7

Este es el problema: tengo unos pocos miles de pequeños fragmentos de texto, desde unas pocas palabras hasta unas pocas frases: el fragmento más grande es de aproximadamente 2k en el disco. Quiero poder comparar cada uno y calcular un factor de relación para poder mostrar la información relacionada con los usuarios.¿Cuáles son algunos buenos métodos para encontrar la "relación" de dos cuerpos de texto?

¿Cuáles son algunas buenas maneras de hacer esto? ¿Existen algoritmos conocidos para hacer esto que sean buenos, hay soluciones GPL, etc.?

No necesito que esto se ejecute en tiempo real, ya que puedo precalcular todo. Me preocupa más obtener buenos resultados que el tiempo de ejecución.

Solo pensé en preguntarle a la comunidad de Stack Overflow antes de ir y escribir lo mío. TIENE que haber personas que hayan encontrado buenas soluciones para esto antes.

+1

Pregunta muy poco definida. ¿Sobre qué base considera que dos textos se relacionan entre sí? Temas comunes? Frases repetidas? ¿Longitud? ¿Complejidad? ¿Frecuencia de letras? –

Respuesta

2

nunca he utilizado, pero es posible que desee ver en Levenshtein distance

+0

Funciona bien en muchos escenarios –

+0

Levenshtein ofrece la distancia de edición, no las diferencias semánticas. – Bob

0

Este book pueden ser relevantes.

Editar: aquí hay una relacionados SO question

+0

Gracias. La recuperación de la información es el tema general, y este libro probablemente tenga buena información. – Matt

0

Esto es bastante factible para textos grandes y razonables, sin embargo es más difícil para textos más pequeños.

Lo hice una vez de esta manera, y funcionó bastante bien:

  • Filtrar todas las palabras "generales" (como un, una, el, en, etc ...) (Filtros de aproximadamente 10-30 % de las palabras)
  • Cuente las frecuencias de las palabras restantes, almacene la parte superior x de las palabras más frecuentes, estos son sus temas.
  • Como paso adicional, puede crear grupos de 2/3/4 palabras subsiguientes y compararlas con los grupos en otros textos. Lo usé como una medida para el plagio.
0

Consulte las notas de curso de Manning y Raghavan sobre MinHashing y la búsqueda de artículos similares, y un C#(?) version. Creo que las técnicas provienen de la investigación de Ullman y Motwani.

0

algoritmos fonéticos

El artículo, Beyond SoundEx - Functions for Fuzzy Searching in MS SQL Server, se muestra cómo instalar y utilizar la biblioteca SimMetrics en SQL Server.Esta biblioteca le permite encontrar similitudes relativas entre cadenas e incluye numerosos algoritmos.

Terminé utilizando principalmente Jaro Winkler para que coincida con los nombres de los nombres. Aquí hay más información donde pregunté sobre nombres coincidentes en SO: Matching records based on Person Name

Algunos algoritmos basados ​​en Levenshtein Distance también están disponibles en la biblioteca de SimMetric y probablemente sean útiles en su aplicación.

Cuestiones relacionadas