El procesamiento de lenguaje natural o NLP (Natural language processing) ha generado un sin número de aplicaciones para lenguas de muchos hablantes, como traductores automáticos, correctores ortográficos, clasificación de textos, resúmenes automáticos (summarization), generación automática de preguntas y/o respuestas (question answering), entre otros.

Estas herramientas y beneficios no se han materializados para lenguas de menores recursos como las lenguas / idiomas mexicanos y en general a las lenguas con pocos hablantes, principalmente en países en desarrollo.

Una de las razones principales es precisamente la falta de suficientes textos, pero otro igual de grande es la falta de apoyo gubernamental y social para organizar los recursos existentes y generar nuevos.

Herramientas de NLP para idiomas de pocos recursos

Py-Elotl

Logo de la comunidad Elotl.mxPy-Elotl es un paquete para python (python>=3.x) desarrollado por Paul Aguilar y Robert Pugh de la comunidad Elotl. Está enfocado en los idiomas de pocos recursos de México. La versión actual tiene dos funciones principales: Normalización ortográfica y corpus paralelos.

¿Cómo instalar Py-Elotl?

Partiendo de que se cuenta con entorno de trabajo GNU/Linux con python>3.x instalado, podemos crear un ambiente python, que llaramaremos tlahtolli (“idioma” en lengua nahuatl), para hacer organizar mejor el trabajo:

python3 -m venv tlahtolli

Entramos a la carpeta creada:

cd tlahtolli

Y activamos el ambiente:

source ./bin/activate

Para instalar la última versión de Py-Elotl:

git clone https://github.com/ElotlMX/py-elotl.git
pip install -e py-elotl/

¿Qué son y cómo usar los corpus paralelos?

Los corpus paralelos son un recursos lingüístico que consiste en textos con el mismo significado en dos lenguas distintas, normalmente a nivel oración. Se puede entender como una base de datos con texto original más una traducción normalmente a un lenguaje más hablado.

Los corpus son muy utilizados para crear herramientas de traducción automática o directamente como textos consultables para aprendices de alguno de los idiomas involucrados.

Empezamos importando el paquete:

import elotl.corpus

E imprimimos la lista de corpus disponibles:

list_of_corpus = elotl.corpus.list_of_corpus()
for row in list_of_corpus:
    print(row)

La salida en la versión actual es:

['axolotl', 'Is a nahuatl corpus']
['tsunkua', 'Is an otomí corpus']

Axolotl es un corpus Nahuatl-español y Tsunkua es un corpus Otomí-español. En el caso py-Elotl cada entrada contiene 4 campos:

  • Lengua no original (non_original_language), para los corpus actuales sería Español.
  • Lengua original (original_language). Actualmente Nahuatl y Otomí.
  • Variante dialectal (variant). Las idiomas/lenguas mexicanas son muy diversas y muchas tiene varias variantes dialectales.
  • Nombre del documento de donde proviene la oración (document_name).

Para cargar un corpus solo hay que usar el método load() con el nombre del corpus, por ejemplo, para cargar el corpus “axolotl”:

axolotl = elotl.corpus.load('axolotl')

Una vez cargado, podemos hacer consultas, por ejemplo, vemos la primera entrada:

print(axolotl[0])

Y la salida es:

['Vino a iluminar el sol y allí fue a ver a su', 'tlaminako tonati uan noponi kiitato', '', 'Lo que relatan de antes (cuentos tének y nahuas de la huasteca)']

Por ejemplo, para buscar la felicidad, o sea, la palabra “felicidad” (paquiliztli) en el corpus podemos hacer lo siguiente:

keyword = 'paquiliztli'
for entry in axolotl:
    if any(keyword in s for s in entry):
        print(entry)

Y tendremos muchos ejemplos del uso de esta palabra, por ejemplo la última entrada es:

['Mucha gente busca la felicidad en todas partes y nunca la encuentra.', 'Miac tlacah canohuian pahpaquiliztli quitemoah ihuan ayic quinextiah.', '', 'Método auto-didáctico náhuatl-español']

¿Qué es y cómo usar la normalización ortográfica?

py-Elotl incluye un normalizador ortográfico para el idioma nahuatl.

El nahuatl como muchos otros idiomas, tiene más de una forma de escribirse, más de una norma ortográfica (en el castellano hay una historia interesante con la ortografía chilena).

Una desventaja de la diversidad ortográfica es que dificulta el procesamiento (comparación, conteo, etc) de la misma palabra en diferentes normas. Aquí es donde un normalizador es de mucha utilidad.

py-Elotl puede convertir entre tres normas: SEP, INALI y Ack.

Para usarlo primero importamos el nomalizador:

import elotl.nahuatl.orthography

Y cargamos la norma a trabajar:

n = elotl.nahuatl.orthography.Normalizer("sep")

Y podemos probar normaliza la palabra “tlahtoa”, también se pueden usar textos largos sin problema, que en la norma Sep sería “tlajtoa” (palabra):

word = 'tlahtoa'
print(n.normalize(word))

Y la salida es la esperada “tlajtoa”. Incluso es posible ver la conversión a fonemas:

n.to_phones(word)

Y la salida:

ƛaʔtoa

El ejemplo de principio a fin se muestra a continuación:

import elotl.corpus
import elotl.nahuatl.orthography

print('List of corpus')
list_of_corpus = elotl.corpus.list_of_corpus()
for row in list_of_corpus:
    print(row)

axolotl = elotl.corpus.load('axolotl')
print('Print first entry')
print(axolotl[0])

keyword = 'paquiliztli'
print('Looking for the word: '+keyword)
for entry in axolotl:
    if any(keyword in s for s in entry):
        print(entry)

word = 'tlahtoa'
print('Normalizing the word: '+word)
n = elotl.nahuatl.orthography.Normalizer('sep')
print(n.normalize(word))
print(n.to_phones(word))