2011-06-30 26 views
6

Tengo un par de textos que no están en inglés. Me gustaría realizar comparaciones estilísticas sobre ellos.Algoritmo para detectar y comparar frases

Un método para comparar estilos es buscar frases similares. Si encuentro en un libro "pesca, esquí y senderismo" un par de veces y en otro libro "pesca, senderismo y esquí", la similitud en el estilo señala a un autor. También necesito poder encontrar "pesca e incluso esquí o senderismo". Idealmente, también encontraría "pesca con caña, senderismo y esquí", pero debido a que son textos no ingleses (griego koiné), los sinónimos son más difíciles de admitir y este aspecto no es vital.

¿Cuál es la mejor manera de (1) ir a detectar este tipo de frases y luego (2) buscarlas de una manera que no sea demasiado rígida en otros textos (para encontrar "pesca e incluso esquí o excursionismo")?

Respuesta

8
  • Tome todos sus textos y cree una lista de las palabras. Manera fácil: toma todas las palabras. Difícil: tome solo el relevante (es decir: en inglés, "the" nunca es una palabra pertinente, ya que se usa con demasiada frecuencia). Digamos que tienes V palabras en tu vocabulario.
  • Para cada texto, construya una matriz de adyacencia A, cuyo tamaño es V * V. La fila A (i) indica qué tan cerca están las palabras en su vocabulario de la i-ésima palabra V (i). Por ejemplo, si V (i) = "esquí", entonces A (i, j) es qué tan cerca está la palabra V (j) de la palabra "esquí". ¡Prefiere un vocabulario pequeño!

Detalles técnicos: Para el vocabulario, tiene varias posibilidades para obtener un buen vocabulario. Lamentablemente, no puedo recordar los nombres. Uno de ellos consiste en eliminar palabras que están presentes a menudo y en todas partes. Por el contrario, debe mantener palabras raras que están presentes en algunos textos. Sin embargo, no sirve de nada conservar las palabras presentes exactamente en un texto.

Para la matriz de adyacencia, la adyacencia se mide contando qué tan lejos están las palabras que está considerando (indicando el número de palabras que las separan). Por ejemplo, vamos a utilizar el mismo texto =)

Un método de comparar el estilo es la búsqueda de frases similares. Si encuentro en un libro "pesca, esquí y senderismo" un par de veces y en otro libro "pesca, senderismo y esquí", la similitud apunta a un autor. También necesito poder encontrar "pesca e incluso esquí o senderismo". Idealmente, también encontraría "pesca con caña, senderismo y esquí", pero debido a que no son textos en inglés (Koine griego), los sinónimos son más difíciles de admitir y este aspecto no es vital.

Estos están hechos totalmente de valores:
A (método, la comparación) + = 1,0
A (método, similitud) + = 0,5
A (método, griego) + = 0.0

Usted necesita principalmente una "distancia típica". Por ejemplo, puede decir que después de 20 palabras de separación, las palabras ya no pueden considerarse adyacentes.

Después de un poco de normalización, simplemente haga una distancia L2 entre la matriz de adyacencia de dos textos para ver qué tan cerca están. Puedes hacer cosas más elegantes después, pero esto debería arrojar resultados aceptables. Ahora, si tiene sinónimos, puede actualizar la adyacencia de una manera agradable. Por ejemplo, si tiene en la entrada "hermosa doncella", entonces
A (hermoso, de soltera) + = 1,0
A (magnífica, de soltera) + = 0,9
A (justo, de soltera) + = 0,8
A (sublime, de soltera) + = 0,8
...

2

Probablemente deberías utilizar alguna medida de similitud de cadena como Jaccard, Dice o cosine similarity. Puede intentar esto en palabras, en (palabra o nivel de personaje) n -grams o en lemmas. (Para un lenguaje altamente declinado como Koinè Greek, sugeriría usar lemmas si tiene un buen lemmatizador).

La captura de sinónimos es difícil a menos que tenga algo como WordNet, que mapea sinónimos.

1

me gustaría seguir dos pautas:

  • GUARDA de la optimización prematura en el algoritmo de coincidencia. Comience desde un enfoque amplio y luego vuelva a definirlo según las necesidades (es decir, compruebe si una simple prueba de "proximidad" brinda resultados lo suficientemente buenos para el conjunto de datos para los que conoce la respuesta, y si no, modifíquelo hasta que lo haga). En muchos casos, descubrirá que una solución altamente optimizada no dará resultados considerablemente diferentes a su primer intento brusco.
  • Utilice algún tipo de algoritmo de autoaprendizaje. De esta manera podría alimentar a la IA una cantidad de textos que pueden hacerlo más inteligente. Tomando la inspiración de tu ejemplo: antes de intentar comparar dos textos objetivo, me gustaría alimentar un texto sobre la vida al aire libre. De esta manera, la IA seguramente aprenderá por sí misma que angling es una coincidencia muy cercana para fishing.

Como autoaprendizaje AI, me gustaría utilizar (por lo menos para un comienzo) de una red neuronal. Hay un ejemplo fácil y completamente funcional (en python) que se puede encontrar en here y que se dirige precisamente a "data mining". Es posible que desee implementar en otro idioma, por supuesto.

Sobre sus dos preguntas específicas:

¿Cuál es la mejor manera de ir sobre la detección de este tipo de frases

otras respuestas a sus preguntas han ido en detalles sobre este (y sus autores ¡parece saber mucho más que yo sobre el tema!), pero de nuevo: Comenzaría fácil y simplemente usaré una red neuronal que le dirá cuán cerca están dos términos. Luego procedería con "ondas" de optimización (por ejemplo, si se tratara de un texto en inglés) usando solo la raíz de la palabra, o tal vez sirva para ajustar el puntaje según otros metadatos del texto como el año. , o autor, o origen geográfico, o aún cambiar el algoritmo de coincidencia por completo ...) hasta que esté satisfecho con el resultado.

¿Cuál es el mejor camino a seguir para la búsqueda de ellos de una manera que no es demasiado rígida en otros textos (con el fin de encontrar la "pesca e incluso el esquí o senderismo"

yo diría esto es equivalente a pedir a la IA que devuelva todas las frases cuya "puntuación de proximidad" supera un umbral determinado.

HTH!

Cuestiones relacionadas