java dictionary nlp gate

java - Concordancia parcial en un diccionario



dictionary nlp (3)

Estoy trabajando con GATE (Framework basado en Java NLP) y quiero encontrar palabras con una coincidencia parcial con un diccionario. Por ejemplo, tengo un diccionario de enfermedades con los siguientes términos

Congestive cardiac failure Congestive Heart Failure Colon Cancer . . . Thousands of more terms

Supongamos que tengo como cadena "Father had cardiac failure last year" de esta cadena. Quiero identificar "falla cardíaca" como una coincidencia parcial porque ocurre como parte de un término en el diccionario.

He visto algunas discusiones sobre temas similares en Python, JS y C #, pero no estoy seguro de qué puede ayudar en este caso aquí. Me pregunto si puedo utilizar Aho-Corrasick aquí.


Tal vez deberías usar Lucene . Trate cada línea del diccionario como un documento y cada oración en el texto como una consulta.


Una pregunta que surge es qué subcadenas desea incluir en la búsqueda. Si incluyeste todas las subcadenas, solo "Corazón" también coincidiría, pero eso no es realmente una enfermedad. Quizás todas las subcadenas alineadas a la derecha (palabra-) (quizás con una longitud> 1) serían aceptables.

Entonces, una cosa que podría hacer es entrenar al patrón de concordancia Aho-Corrasick con las subcadenas que desea incluir. Para mantener la información de la que procede el término de diccionario de la subcadena, es probable que necesite modificar un poco el algoritmo (si mantener esa información es importante) o crear otra estructura de datos para buscarla posteriormente.

En cualquier caso, convertiría la lista de enfermedades y los documentos que desea buscar en minúsculas antes de entrenar / emparejar. Si existe la posibilidad de errores ortográficos, también hay artículos sobre autómatas fuzzy aho-corasick.