View on GitHub

NLP-Spanish-Predictor

Natural Language Processing - Files and Program for a Spanish Word Predictor

Presiona aquí para ver la app online.

Click here to read the info in English

Procesamiento de Lenguaje Natural - Predictor de Palabras

Contenido:

Instrucciones

Más Información

La aplicación admite texto en español y automáticamente genera,

  1. Sugerencias para completar la palabra en curso.
  2. Sugerencias para la palabra siguiente.

La creación de este programa empezó desde la recolección los siguientes textos,

  1. Spanish Billion Words Corpus, recopilado por Cristian Cardellino (Marzo de 2016) y descargado en Septiembre 12 del 2017. La recopilación incluye: porciones del SenSem, Corpus Ancora, Tibidabo Treebank y IULA Spanish LSP Treebank, Proyecto OPUS, Europarl, Wikipedia, Wikisource y Wikibooks. Disponible aquí.

  2. Artículos actualizados de Wikipedia versión español descargados el 12 de septiembre del 2017. Disponible aquí.

  3. Una colección de estados populares y recientes de Twitter en castellano. Descargados entre el 12 y el 14 de septiembre del 2017 usando el paquete rtweet de CRAN.

Las fuentes fueron después procesadas en Python y R. El procesamiento del corpus se mantuvo intencionalmente al mínimo para así capturar el castellano tal y como es comúnmente escrito, incluyendo gramática, errores ortográficos, abreviaciones, siglas, jerga y regionalismos.

De esta forma se le permitió al programa creador del predictor, determinar la ortografía con la mayor probabilidad de ser la correcta, sin rescindir de información sobre lo que el escritor intentaba decir. Gracias a esto, el predictor es capaz de deducir con flexibilidad lo que el usuario intenta decir, al tiempo que provee sugerencias con ortografía más rigurosa.

predict.both("una sopa de")$predictions
[1] "fideos"   "guisantes" "ajo" "pescado" "tomate"     
predict.both("una sopa de sanao")$current
[1] "zanahoria"   "zanahorias"     

El corpus final contiene ~200 millones de palabras en un archivo no compreso de ~1.5 GiB. Cuenta con texto de diversas regiones de habla castellana pero mayormente de España, México, Argentina y Estados Unidos.

La codificación de palabras y eliminación de redundancias permiten al programa almacenar información de más de 1 millón de n-gramas en menos de 25 MiB, resultando en una ejecución ligera y rápida. Al tiempo que se puede reducir la cantidad de n-gramas sin sacrificar precisión, al igual que se puede aumentar la información predictiva sin sacrificar recursos del sistema.

workspace.size()
[1] "24.35 MiB"

Y generar sugerencias en pocos milisegundos en un sistema de computo modesto o personal.

measure.prediction.time("El Presidente de")
[1] "la"   "los" "Estados" "México" "Venezuela"     
Milliseconds elapsed    = 2.0 
Predictions per second = 500 



Drawing



Natural Language Processing - Spanish Word Predictor

Click here to visit the app

Contents

Instructions

More Information

The shiny app takes text as an input and automatically,

  1. Makes suggestions to complete the word being typed.
  2. Makes suggestions for the next word.

The predictor was built from the ground up using the following,

  1. Spanish Billion Words Corpus, compiled by Cristian Cardellino (March, 2016) and downloaded on September 12, 2017. The compilation includes portions of the SenSem, Ancora Corpus, Tibidabo Treebank and IULA Spanish LSP Treebank, OPUS Project, Europarl, Wikipedia, Wikisource and Wikibooks. Available here.

  2. A partial Spanish Wikipedia dump containing updated articles. Downloaded on September 12, 2017 Download.

  3. A collection of recent and popular Twitter posts in Spanish downloaded between September 12-14, 2017 using the rtweet package.

The corpora were then preprocessed using Python and R. Preprocessing was intentionally kept minimal to capture language as it is typed, including grammar, slang, contractions, and misspellings. In this way, the program that created the predictor files, was allowed to determine the most likely correct spelling of words to provide them as suggestions, without discarding the information of what the writer meant. Because of this, the predictor is able to better understand what the writer means, and also provide more grammatically sound suggestions.

predict.both("una sopa de")$predictions
[1] "fideos"   "guisantes" "ajo" "pescado" "tomate"     
predict.both("una sopa de sanao")$current
[1] "zanahoria"   "zanahorias"     

The final corpus used to build the predictor contains ~200 million words in a ~1.5 GiB uncompressed file. It includes text from diverse Spanish speaking regions but mainly from Spain, Mexico, Argentina, and the United States.

Codification of words and phrases, as well as redundancy checks, allows the program to store information of over 1 million ngram-predictions lists (and the algorithms) in under 25 MiB of uncompressed files.

workspace.size()
[1] "24.35 MiB"

And also make predictions in few milliseconds in a small, personal system.

measure.prediction.time("El Presidente de")
[1] "la"   "los" "Estados" "México" "Venezuela"     
Milliseconds elapsed    = 2.0 
Predictions per second = 500 

Because of the vast amount of information, the program can be safely scaled-down without significantly sacrificing accuracy. Whereas the limited footprint allows for smooth execution, and easy scale-up without being heavy on resources.


Drawing