natural language algorithm nlp

algorithm - natural language processing pdf



¿Qué algoritmos pueden agrupar personajes en palabras? (1)

Tengo un texto generado por algún software OCR pésimo.

El resultado contiene una mezcla de palabras y caracteres separados por espacios, que deberían haberse agrupado en palabras. Por ejemplo,

Expr e s s i o n Syntax S u m m a r y o f T e r minology

debería haber sido

Expression Syntax Summary of Terminology

¿Qué algoritmos pueden agrupar personajes en palabras?

Si programo en Python, C #, Java, C o C ++, ¿qué bibliotecas proporcionan la implementación de los algoritmos?

Gracias.


Enfoque mínimo:

  1. En su entrada, elimine el espacio antes de cualquier palabra de una sola letra. Marque las palabras finales creadas como parte de esto de alguna manera (prefíquelas con un símbolo que no esté en la entrada, por ejemplo).
  2. Obtenga un diccionario de palabras en inglés, ordenadas del más largo al más corto.
  3. Para cada palabra marcada en su entrada, encuentre la coincidencia más larga y divídala como una palabra. Repita con los caracteres que quedan en la "palabra" original hasta que no quede nada. (En el caso donde no hay coincidencia, simplemente déjalo en paz).

Un enfoque más sofisticado y excesivo:

El problema de dividir palabras sin espacios es un problema del mundo real en los idiomas comúnmente escritos sin espacios, como el chino y el japonés. Estoy familiarizado con el japonés así que principalmente hablaré con referencia a eso.

Los enfoques típicos usan un diccionario y un modelo de secuencia. El modelo está entrenado para aprender las propiedades de transición entre etiquetas: parte del etiquetado de voz, combinado con el diccionario, se usa para determinar la probabilidad relativa de diferentes lugares potenciales para dividir palabras. Entonces la secuencia más probable de divisiones para una oración completa se resuelve para usar (por ejemplo) el algoritmo de Viterbi.

Crear un sistema como este es, casi con seguridad, exagerado si solo está limpiando los datos de OCR, pero si le interesa, puede valer la pena examinarlo.

Un caso de muestra donde el enfoque más sofisticado funcionará y el más simple no:

  • entrada: Playforthefunofit
  • salida simple: Play forth efunofit ( forth es más larga que for )
  • Salida sofisticada: Play for the fun of it ( forth efunofit es una forth efunofit baja frecuencia, es decir, antinatural, mientras que for the no lo es)

Puede solucionar el problema con el enfoque simple en cierta medida agregando secuencias comunes de palabras cortas a su diccionario como unidades. Por ejemplo, agregue forthe como una palabra de diccionario, y divídala en un paso de procesamiento posterior.

¡Espero que ayude, buena suerte!