Pregunta

Estoy procesando mucho el lenguaje natural con requisitos un poco inusuales.A menudo recibo tareas similar a la lematización - dada una palabra (o simplemente un fragmento de texto), necesito encontrar algunos patrones y transformar la palabra de alguna manera.Por ejemplo, es posible que necesite corregir errores ortográficos, p.dada la palabra "comer" necesito transformarla en "comer".O puede que necesite transformar las palabras "ahahaha", "ahahahaha", etc.a simplemente "ahaha" y así sucesivamente.

Así que estoy buscando algunos herramienta genérica que permite definir reglas de transformación para tales casos.Las reglas pueden verse así:

 {w}in   ->  {w}ing
 aha(ha)+  ->  ahaha

Es decir, necesito poder utilizar patrones capturados del lado izquierdo en el lado derecho.

Trabajo con lingüistas que no saben nada de programación, así que idealmente esta herramienta debe usarse archivos externos y lenguaje simple para reglas.

Estoy haciendo este proyecto en Clojure, así que idealmente Esta herramienta debería ser una biblioteca para uno de los lenguajes JVM (Java, Scala, Clojure), pero otros lenguajes o herramientas de línea de comandos también están bien.

Hay varios proyectos de PNL muy interesantes, incluidos PUERTA, Stanford CorePNL, NLTK y otros, y no soy experto en todos ellos, por lo que podría perderme la herramienta que necesito allí.Si es así, por favor hágamelo saber.

Tenga en cuenta que estoy trabajando con varios idiomas y realizo tareas muy diferentes, por lo que los lematizadores, lematizadores, correctores de errores ortográficos concretos, etc. para idiomas concretos, no se ajustan a mis necesidades; realmente necesito una herramienta más genérica.

UPD. Parece que necesito dar más detalles/ejemplos de lo que necesito.

Básicamente, necesito una función para reemplazar texto por algún tipo de expresión regular (similar a la de Java String.replaceAll()) pero con posibilidad de utilizar texto capturado en la cadena de reemplazo.Por ejemplo, en el texto del mundo real las personas suelen repetir caracteres para enfatizar una palabra en particular, p.Alguien puede escribir "Esta película es muuuy aburrida...".Necesito poder reemplazar estos "oooo" repetitivos con un solo carácter.Entonces puede haber una regla como esta (con una sintaxis similar a la que usé anteriormente en esta publicación):

{chars1}<char>+{chars2}?  ->  {chars1}<char>{chars2}

es decir, reemplazar la palabra que comienza con algunos caracteres (chars1), al menos 3 caracteres y posiblemente termine con algunos otros caracteres (chars2) con una cadena similar, pero con un solo .El punto clave aquí es que tomamos el lado izquierdo de una regla y la usamos en el lado derecho.

¿Fue útil?

Solución

He encontrado http://userguide.icu-project.org/transforms/general Para que también sea útil para algunas tareas generales de patrones/transformación como esta, ignore el tema de la transliteración, es bueno para hacer muchas cosas.

Puede simplemente cargar reglas de un archivo en una cadena y registrarlas, etc.

http://userguide.icu-project.org/transforms/general/rules

Otros consejos

No soy un experto en PNL, pero creo Bola de nieve podría ser de su interés.Es un lenguaje para representar algoritmos de derivación.Su lematizador se utiliza en el motor de búsqueda Lucene.

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