Usando Node.js y LnaguageTool para corregir textos
Como hacer un corrector ortográfico para nuestros proyectos
Vamos a explicar como hacer un corrector ortográfico usando el motor de LibreOffice.
Como ya sabréis, LibreOffice es la alternativa de software libre para Microsoft Office, este estupendo editor de textos trae consigo un potente corrector ortográfico que no solo mira si una palabra este mal escrita, si no también conjugaciones y muchas más habilidades complejas.
Pues bien, lo vamos a usar en nuestro proyecto para que nuestros editores cuando escriban no cometan tantas faltas de ortografía y que el sistema lo detecte y los pueda avisar si no se han dado cuenta y han cometido algún error ortográfico simple o complejo.
Te voy a enseñar como hacerlo con Node.js pero realmente se podría hacer con cualquier lenguaje que desees pues prácticamente todo el procesamiento nos lo va a hacer el motor de LibreOffice que se llama LanguageTool, que también es libre o por lo tanto podremos usar en nuestros proyectos como se nos antoje.
Puedes usar su API o usar tu propio servidor, te voy a explicar como hacerlo y montarlo en tu propio servidor para no tener que depender de la API de LanguageTool que trae algunas limitaciones en su capa gratuita.
Instalación del servidor de corrección de textos
El primer paso que vamos a dar es la instalación del servidor de corrección de textos para poder hacer las peticiones a este y que nos responda con el resultado.
Descargue la versión de LanguageTool «Desktop» para usar sin conexión (ocupa > 170MB) y descomprímala.
wget https://languagetool.org/download/LanguageTool-stable.zip
unzip LanguageTool-stable.zip
Bien la descargamos y la descomprimimos como ves en el comando anterior, necesitaremos tener instalado JAVA en nuestro servidor para poder correr el programa ya que está escrito en este lenguaje. Nada preocupante es bien sencillo hacerlo, en el caso de Ubuntu 18.04 y seguramente el resto solo tendremos que ejecutar el siguiente comando.
apt install default-jre
Se nos instalar la maquina virtual y ya podremos ejecutar nuestro propio servidor de correcciones ortográficas, vamos a proceder a ejecutar el servidor.
java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin '*'
Ahora ya puedes probar el servidor de ortografía haciendo una petición a la siguiente URL: curl --data "language=es&text=testo simple con eror" http://localhost:8081/v2/check
Esta petición nos devolverá una respuesta en formato JSON la cual es la que usaremos para nuestro corrector.
{"software": {
"name":"LanguageTool",
"version":"4.6-SNAPSHOT","buildDate":"2019-05-22 18:47",
"apiVersion":1,
"premium":false,
"premiumHint":"You might be missing errors only the Premium version can find. Contact us at support<at>languagetoolplus.com.",
"status":""
},
"warnings": {
"incompleteResults":false
},
"language": {
"name":"English (US)",
"code":"en-US",
"detectedLanguage": {
"name":"English (US)",
"code":"en-US",
"confidence":0.6561856
}
},
"matches": [{
"message":"This sentence does not start with an uppercase letter",
"shortMessage":"",
"replacements": [{
"value":"My"
}],
"offset":0,
"length":2,
"context": {
"text":"my text",
"offset":0,"length":2
},
"sentence":"my text",
"type": {"typeName":"Other"},
"rule": {
"id":"UPPERCASE_SENTENCE_START",
"description":"Checks that a sentence starts with an uppercase letter",
"issueType":"typographical",
"category": {
"id":"CASING",
"name":"Capitalization"
}
},
"ignoreForIncompleteSentence":true,
"contextForSureMatch":-1
}]
}
Bien como vemos casi todo nos lo hace el este estupendo software que además es libre, una maravilla ¡oiga!.
Ahora vamos a integrar esta respuesta en nuestro sitio web / servicio que tengamos, en este caso escrito con Node.
import request from 'request'; // si no tenemos el paquete instalado lo hacemos ;)
const result = new Promise((resolve, reject) => {
request({
method: 'GET',
url: 'http://localhost:8081/v2/check',
qs: {
disabledRules: 'WHITESPACE_RULE,FRENCH_WHITESPACE',
allowIncompleteResults: true,
enableHiddenRules: true,
enabledOnly: false,
language: post.locale,
text: 'Texto ha comprobar'
},
json: true
},
(error, response, body) => {
if (error) {
reject(error);
} else {
resolve(body);
}
});
});
Pues bien es así de sencillo, como veis se puede hacer en cualquier lenguaje de manera fácil pues todo el trabajo lo hace el LanguageTool, si bien este ejemplo es bastante sencillo ya es cosa tuya explotarlo y complicarlo más para hacer lo que quieras exactamente, la idea es hacer o mostrarle al el escritor estos errores para que pueda resolverlos, como veis también LanguageTool te devuelve un texto en el idioma que estés tratando con el consejo y las posibilidades de remplazo así como sugerencias para dependiendo el error que salte.
En WebMediums estamos usando este sistema para que nuestros escritores no metan la pata sin darse cuenta, algo que facilitara desde luego el trabajo y la fluidez sin tener que estar tan al tanto de los errores y delegar esta tarea en el software que lo hará al instante.
Asi es como nosotros lo hemos implementado: