Pregunta

Soy consciente de SOUNDEX y (doble) Metaphone, pero estos no me dejan prueba para la similitud de las palabras como un todo - por ejemplo sonidos "Hola" muy similares a "adiós", pero ambos de estos métodos los marcará como completamente diferente.

¿Hay bibliotecas en Ruby, o cualquier método que conocemos, que son capaces de determinar la similitud entre dos palabras? (Ya sea un booleano es / no es similar, o numérica 40% similar)

editar: puntos extra si hay un método fácil de 'caída de' un dialecto o idioma diferente

¿Fue útil?

Solución

creo que estás describiendo distancia levenshtein. Y sí, hay joyas para eso. Si usted está en Ruby puro ir a por el tesoro de texto.

$ gem install text

Los documentos tienen más detalles, pero aquí está el quid de la cuestión:

Text::Levenshtein.distance('test', 'test')    # => 0
Text::Levenshtein.distance('test', 'tent')    # => 1

Si estás bien con extensiones nativas ...

$ gem install levenshtein

uso Es es similar. el rendimiento es de es muy bueno. (Maneja ~ 1000 correcciones de ortografía por minuto en mis sistemas.)

Si lo que necesita saber qué tan similares son dos palabras, el uso de distancia sobre la longitud de la palabra.

Si quieres una prueba de similitud simple, considerar algo como esto:

No probado, pero sencillo:

String.module_eval do
   def similar?(other, threshold=2)
    distance = Text::Levenshtein.distance(self, other)
    distance <= threshold
  end
end

Otros consejos

En primer lugar, podría preprocesar las palabras que utilizan una base de datos de sinónimos, que convertirá las palabras de significado similar a la misma palabra. Hay varias bases de datos de tesauro por ahí, por desgracia no pude encontrar uno libre decente para Inglés ( http: / /www.gutenberg.org/etext/3202 es el que me encontré, pero esto no quiere mostrar qué relaciones tienen las palabras específicas (como similares; opuesto; significado alternativo; etc.), por lo que todas las palabras en la misma línea tiene algunos relación, pero usted no sabe lo que es relación)

Pero por ejemplo para Hungría hay una buena base de datos de diccionario de sinónimos libre, pero usted no tiene soundex / metaphone de textos húngaro ...

Si usted tiene la base de datos escribiendo un programa que procesa previamente los textos no es demasiado difícil (en última instancia, es una simple búsqueda en reemplazar, pero puede que desee para preprocesar la base de datos de tesauro usando simplex o methaphone también)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top