
Hola a todos El tema es bastante interesante y puede parecer bastante difícil de implementar. Pero soy una persona práctica y quiero tocar lo bello, especialmente sin esfuerzo. Hoy haremos un "microservicio" para el análisis de sentimentalismo / tonalidad del texto. Y el caso, algunas cosas más interesantes que lo ayudarán a preparar su apelación textual a Skynet.
Introducción
Por qué Esta es una muy buena pregunta. Pero antes de responderlo, seamos un poco más inteligentes y descubramos cuál es el análisis de la tonalidad del texto y cuál es la tonalidad.
El análisis de la tonalidad del texto (análisis de sentimientos, análisis de sentimientos en inglés, minería de opinión en inglés) es una clase de métodos de análisis de contenido en lingüística informática, diseñado para identificar automáticamente en los textos vocabulario coloreado emocionalmente y la evaluación emocional de los autores (opiniones) en relación con los objetos, el habla que va en el texto
La tonalidad es la actitud emocional del autor de una declaración a un objeto (un objeto del mundo real, un evento, un proceso o sus propiedades / atributos), expresado en el texto. El componente emocional, expresado a nivel del lexema o fragmento comunicativo, se llama tonalidad léxica (o sentimiento léxico). La tonalidad de todo el texto en su conjunto puede definirse como una función (en el caso más simple, la suma) de la tonalidad léxica de sus unidades (oraciones) y las reglas para combinarlas.
por wikipedia
Por qué
A menudo tengo más preguntas que respuestas al leer Wikipedia. Simplifiquemos: la clave del texto nos habla sobre el "estado de ánimo del texto". Por ejemplo, "Ven aquí, tu madre ..." indica que el oyente tiene problemas. "Cariño, estoy en casa", un poco mejor, pero según la situación.

Puede usar este análisis para buscar noticias positivas, filtrar comentarios negativos, crear calificaciones de productos por revisiones, etc. Creo que la idea general es clara.
Instala lo necesario
Como vamos a usar Node.js, necesitaremos Express. Puede usar cualquier cosa, exprese un bajo nivel y no sea crítico para la tarea.
npm install -g express-generator
express-generator es un tipo de aplicación create-react- for para el framework Express.
node_nlp
la aplicación en la carpeta node_nlp
:
express node_nlp --no-view
puedes simplificar los dos últimos comandos usando npx:
npx express-generator node_nlp --no-view
Para iniciar la aplicación, vaya a la carpeta, descargue las dependencias y los lanzamientos:
cd node_nlp npm install npm start
Para no perder tiempo reiniciando manualmente el servidor para cada cambio, nodemon
y configuremos nodemon
:
npm install --save nodemon
Ediciones menores en package.json:
"dev": "nodemon ./bin/www"
Y para el desarrollo usamos:
npm run dev
Pongamos un puñado de paquetes de inmediato, te diré por qué se necesitan en el camino. Es solo un tutorial diferente para luchar por ser una configuración de proyecto y ya olvidé lo que estoy escribiendo con toda esta npm install
.
npm install --save natural apos-to-lex-form spelling-corrector stopword

Enrutamiento
De hecho, solo tendremos un punto final, en la carpeta ./routers
, hay un archivo index.js
que lo destruiremos:
const express = require('express'); const natural = require('natural'); const router = express.Router(); router.post('/', function(req, res, next) { const { text } = req.body; }); module.exports = router;
Un punto final POST
simple que toma un body
con un campo de text
.
Procesamiento
Si usted, como yo, de alguna manera ha entrado en contacto con la creación Skynet , procesó los datos, probablemente sepa que el proceso de preparación es tan importante como el proceso de procesamiento de datos. Necesitamos minimizar varios ruidos y posibles errores, para que no vaya hacia el orador, "bueno, ven aquí tu madre ...".
Deshacerse de los cortes

Dado que el microservicio se dedicará al análisis de la tonalidad del idioma inglés, debemos considerar cómo convertir esas abreviaturas como estoy, estás dentro, estoy, estás.
Para esto usaremos apos-to-lex-form
const express = require('express'); const natural = require('natural'); const aposToLexForm = require('apos-to-lex-form') const router = express.Router(); router.post('/', function(req, res, next) { const { text } = req.body; const lexedText = aposToLexForm(text); }); module.exports = router;
Convertir texto a minúsculas (minúsculas)
Para que las palabras IR AQUÍ y venir aquí sean percibidas de la misma manera, debe asegurarse de que todo el texto esté en un registro.
const casedReview = lexedText.toLowerCase();
Eliminar caracteres extra
Para la próxima mejora en la precisión de nuestro análisis, debe eliminar los caracteres adicionales, es difícil para mí decir qué tonalidad @ # $% ^ # son esos caracteres. Por lo tanto, eliminamos todo lo innecesario y dejamos solo letras.
Usamos la función estándar de JavaScript - replace()
:
const alphaOnlyReview = casedReview.replace(/[^a-zA-Z\s]+/g, '')
Tokenización
La tokenización es el proceso de dividir el texto en componentes individuales. Por ejemplo, la palabra es el token de la oración, y la oración, a su vez, es el token del párrafo.
Aquí nuestro caballo principal Natural se precipita en la escena.
En este paquete, se nos proporciona la WordTokenizer
tokenización de WordTokenizer
:
... const { WordTokenizer } = natural; const tokenizer = new WordTokenizer(); const tokenizedReview = tokenizer.tokenize(alphaOnlyReview); ...
Correcciones de errores
Dado que el texto puede venir de cualquier parte, existe la posibilidad de errores. Necesitamos tratar de arreglarlos. El corrector ortográfico nos ayudará con esto.
const express = require('express'); const natural = require('natural'); const aposToLexForm = require('apos-to-lex-form'); const SpellCorrector = require('spelling-corrector'); const router = express.Router(); const spellCorrector = new SpellCorrector(); spellCorrector.loadDictionary(); router.post('/', function(req, res, next) { const { text } = req.body; const lexedText = aposToLexForm(text); const casedReview = lexedText.toLowerCase(); const alphaOnlyReview = casedReview.replace(/[^a-zA-Z\s]+/g, '') const { WordTokenizer } = natural; const tokenizer = new WordTokenizer(); const tokenizedReview = tokenizer.tokenize(alphaOnlyReview); tokenizedReview.forEach((word, index) => { tokenizedReview[index] = spellCorrector.correct(word); }); }); module.exports = router;
Eliminar palabras de detención

Pare las palabras, estos son algún tipo de palabras parásitos. Bueno, por así decirlo, eh, oye, oye, no como parásitos, sino palabras superfluas que no hacen absolutamente ningún tiempo para nuestro tónico. Con la eliminación de tales palabras, el paquete de palabras clave nos ayudará.
const SW = require('stopword'); ... const filteredReview = SW.removeStopwords(tokenizedReview);
Tallo
La derivación es el proceso de normalización de las palabras. Por ejemplo, "dar", "dio" y "donante" en la forma simple "dar".
No tomaremos esto como un paso separado, ya que el SentimentAnalyzer
que nos proporciona el paquete Natural
puede hacer esto por nosotros.
Análisis de texto de tono con Natural
Eso es todo! Llegamos ahi. Ahora Skynet aceptará el nuestro y lo entenderá todo. Es hora de alimentar el texto en SentimentAnalyzer
y comprender si sonamos positivos en una sociedad tan tolerante o no.
El análisis de tonos funciona de manera bastante compleja. El paquete natural tiene su propio diccionario de palabras con la "polaridad" de las palabras. Por ejemplo, la palabra "bueno" tiene una polaridad de 3, y la palabra "malo" es -3. De hecho, todos estos "puntos" se resumen y normalizan al tamaño de la propuesta. Por lo tanto, de hecho, hicimos mucho para borrar nuestro texto de todo lo que era superfluo, de modo que no hubiera nada que nos impidiera obtener una evaluación adecuada.
El texto es positivo si la calificación es positiva, negativa si es negativa y neutral si obtenemos 0.
SentimentAnalyzer
acepta 3 parámetros :
- Lenguaje de texto
- Transmitir o no transmitir
- Diccionario (AFINN, Senticon, Pattern), está incorporado
Todo el código final con análisis de tono del texto al final:
const express = require('express'); const natural = require('natural'); const aposToLexForm = require('apos-to-lex-form'); const SpellCorrector = require('spelling-corrector'); const SW = require('stopword'); const router = express.Router(); const spellCorrector = new SpellCorrector(); spellCorrector.loadDictionary(); router.post('/', function(req, res, next) { const { text } = req.body; const lexedText = aposToLexForm(text); const casedReview = lexedText.toLowerCase(); const alphaOnlyReview = casedReview.replace(/[^a-zA-Z\s]+/g, '') const { WordTokenizer } = natural; const tokenizer = new WordTokenizer(); const tokenizedReview = tokenizer.tokenize(alphaOnlyReview); tokenizedReview.forEach((word, index) => { tokenizedReview[index] = spellCorrector.correct(word); }); const filteredReview = SW.removeStopwords(tokenizedReview); const { SentimentAnalyzer, PorterStemmer } = natural; const analyzer = new SentimentAnalyzer('English', PorterStemmer, 'afinn'); const analysis = analyzer.getSentiment(filteredReview); res.status(200).json({ analysis }); }); module.exports = router;
Hemos agregado algunas líneas nuevas. Destrucción natural
, para obtener las herramientas que necesitamos, creamos una variable para el analizador y asignamos el resultado al analysis
variables.
Los parámetros del SentimentAnalyzer
son relativamente obvios. El idioma es el inglés como el texto que procesamos en inglés. Sellando las palabras que mencioné anteriormente y el diccionario que nos proporciona el paquete Natrual
.
Me gustaría hacer una interfaz de usuario para este caso, pero puede probarla en algunas DevTools:
fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({text: 'hey'}) })
Como vemos, funciona :)
Repositorio de Github
Conclusión
En este artículo realizamos un "microservicio" que analiza la tonalidad del texto. Llévelo a cualquier enfrentamiento y analice lo que dicen sus oponentes. También tocamos el tema de la preparación de datos e instalamos un montón de dependencias. Gracias por su atencion!
Leer lo mismo