
مرحبا بالجميع. الموضوع مثير للغاية وقد يبدو من الصعب تنفيذه. لكنني شخص عملي وأريد أن أتطرق إلى الجمال خاصة دون توتر. اليوم سنقوم بعمل "خدمة مجهرية" لتحليل العاطفة / الدرجة اللونية للنص. والحالة ، بعض الأشياء الأكثر إثارة والتي ستساعدك على إعداد جاذبيتك النصية إلى Skynet.
مقدمة
لماذا؟ هذا سؤال جيد جدا ولكن قبل الإجابة عليه ، دعنا نحصل على القليل من الذكاء ونكتشف ما هو تحليل لونية النص وما هي الدرجة اللونية؟
تحليل الدرجة اللونية للنص (تحليل المعنويات ، تحليل المعنويات الإنجليزية ، التنقيب عن الرأي باللغة الإنجليزية) هو فئة من طرق تحليل المحتوى في اللغويات الحاسوبية ، والمصممة لتحديد تلقائي في النصوص المفردات الملونة عاطفياً والتقييم العاطفي للمؤلفين (الآراء) فيما يتعلق بالكائنات والكلام الذي يذهب في النص.
الدرجة اللونية هي الموقف العاطفي لمؤلف البيان تجاه كائن ما (كائن من العالم الحقيقي ، أو حدث ، أو عملية ، أو خصائصهم / سماتهم) ، معبراً عنها في النص. يُطلق على المكون العاطفي ، المعبر عنه على مستوى المعجم أو الجزء التواصلي ، الدرجة اللونية المعجمية (أو المعنى المعجمي). يمكن تعريف الدرجة اللونية للنص بأكمله ككل كدالة (في أبسط الحالات ، مجموع) النغمة المعجمية لوحداته (جمل) وقواعد الجمع بينها.
بواسطة ويكيبيديا
لماذا؟
كثيرا ما يكون لدي أسئلة أكثر من الإجابات من قراءة ويكيبيديا. دعنا نبسط - مفتاح النص يخبرنا عن "مزاج النص". على سبيل المثال ، "تعال هنا ، أمك ..." تشير إلى أن المستمع لديه مشاكل. "عزيزتي ، أنا في المنزل" - أفضل قليلاً ، ولكن حسب الموقف.

يمكنك استخدام مثل هذا التحليل للبحث عن أخبار إيجابية ، لتصفية التعليقات السلبية ، وبناء تقييمات المنتج حسب المراجعات ، وما إلى ذلك. أعتقد أن الفكرة العامة واضحة.
تثبيت اللازمة
نظرًا لأننا سنستخدم Node.js ، فسنحتاج إلى Express. يمكنك استخدام أي شيء ، والتعبير عن مستوى منخفض وغير حاسم لهذه المهمة.
npm install -g express-generator
Express-generator عبارة عن نوع من إنشاء تطبيق رد فعل لإطار Express.
نقوم بإنشاء التطبيق في مجلد node_nlp
:
express node_nlp --no-view
يمكنك تبسيط آخر أمرين باستخدام npx:
npx express-generator node_nlp --no-view
لبدء التطبيق ، انتقل إلى المجلد ، وقم بتنزيل التبعيات وتشغيله:
cd node_nlp npm install npm start
حتى لا نضيع الوقت في إعادة تشغيل الخادم يدويًا لكل تغيير ، فلنقم nodemon
وتهيئة nodemon
:
npm install --save nodemon
التعديلات الطفيفة في package.json:
"dev": "nodemon ./bin/www"
وللتنمية نستخدم:
npm run dev
دعنا نضع مجموعة من الحزم على الفور ، سأخبرك عن سبب الحاجة إليها على طول الطريق. إنه مجرد برنامج تعليمي مختلف نسعى جاهدين ليكون إعداد مشروع وقد نسيت بالفعل ما أكتبه مع كل npm install
هذه.
npm install --save natural apos-to-lex-form spelling-corrector stopword

التوجيه
في الواقع ، سيكون لدينا نقطة نهاية واحدة فقط ، في مجلد. / ./routers
، يوجد ملف index.js
سنقوم ./routers
:
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;
نقطة نهاية POST
بسيطة تأخذ text
مع حقل text
.
تحويل
إذا كنت ، مثلي ، قد اتصلت بطريقة ما بالخلق سكاي نت بمعالجة البيانات ، ربما تعلم أن عملية التحضير مهمة مثل عملية معالجة البيانات. نحتاج إلى تقليل الضوضاء المختلفة والأخطاء المحتملة ، حتى لا تتجه نحو السماعة ، "حسنًا ، تعال إلى هنا أمك ...".
تخلص من التخفيضات

نظرًا لأن خدمة microservice ستشارك في تحليل الدرجة اللونية للغة الإنجليزية ، فنحن بحاجة إلى التفكير في كيفية تحويل الاختصارات كما أنا ، فأنت في أنا ، أنت.
لهذا سنستخدم 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;
تحويل النص إلى أحرف صغيرة (صغيرة)
من أجل الكلمات ، اذهب إلى هنا وتعال إلى هنا لكي تُدرك بنفس الطريقة ، عليك التأكد من أن النص بأكمله موجود في سجل واحد.
const casedReview = lexedText.toLowerCase();
حذف حروف اضافية
للتحسين التالي في دقة تحليلنا ، يجب عليك إزالة الأحرف الزائدة ، من الصعب بالنسبة لي أن أقول ما هي هذه الأحرف اللونية @ # $٪ ^ #. لذلك ، نقوم بإزالة جميع لا لزوم لها وترك رسائل فقط.
نستخدم وظيفة JavaScript القياسية - replace()
:
const alphaOnlyReview = casedReview.replace(/[^a-zA-Z\s]+/g, '')
tokenization
Tokenization هي عملية تقسيم النص إلى مكونات فردية. على سبيل المثال ، الكلمة هي رمز الجملة ، والجملة ، بدورها ، هي رمز الفقرة.
هنا يندفع حصاننا الرئيسي الطبيعي إلى مكان الحادث.
في هذه الحزمة ، يتم WordTokenizer
:
... const { WordTokenizer } = natural; const tokenizer = new WordTokenizer(); const tokenizedReview = tokenizer.tokenize(alphaOnlyReview); ...
إصلاح الأخطاء
نظرًا لأن النص يمكن أن يأتي من أي مكان ، فهناك فرصة للأخطاء. نحن بحاجة إلى محاولة إصلاحها. سوف يساعدنا مصحح الهجاء في هذا.
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;
حذف كلمات التوقف

توقف عن الكلام ، فهذه نوع من أنواع الطفيليات. حسنًا ، كما كان ، أه ، uuu ، مهلا ، ليس مثل الطفيليات ، ولكن مجرد كلمات لا لزوم لها لا تجعل الطقس منشطًا على الإطلاق. مع إزالة هذه الكلمات ، سوف تساعدنا حزمة الكلمات الرئيسية.
const SW = require('stopword'); ... const filteredReview = SW.removeStopwords(tokenizedReview);
النابعة (انطلاقا)
التجذير هو عملية تطبيع الكلمات. على سبيل المثال ، "العطاء" ، "العطاء" ، و "المانح" بالشكل البسيط "العطاء".
لن نأخذ هذا كخطوة منفصلة ، نظرًا لأن SentimentAnalyzer
الذي يوفر لنا الحزمة Natural
يمكنه القيام بذلك نيابة عنا.
لهجة تحليل النص مع الطبيعية
هذا كل شئ! وصلنا إلى هناك. الآن سكاينيت سيقبلنا ويفهم كل شيء. لقد حان الوقت لتغذية النص في SentimentAnalyzer
وفهم ما إذا كنا نبدو إيجابيين في هذا المجتمع المتسامح أم لا.
تحليل النغمة يعمل بشكل معقد للغاية. تحتوي الحزمة الطبيعية على قاموس الكلمات الخاص بها مع "قطبية" الكلمات. على سبيل المثال ، كلمة "جيدة" تحتوي على قطبية 3 ، وكلمة "سيئة" هي -3. في الواقع ، يتم تلخيص كل هذه "النقاط" وتطبيعها وفقًا لحجم الاقتراح. لذلك ، في الواقع ، لقد فعلنا الكثير لتنظيف نصنا من كل ما كان لزومًا ، بحيث لن يكون هناك شيء يمنعنا من الحصول على تقييم مناسب.
النص إيجابي إذا كان التقييم موجبًا وسالبًا إذا كان سالبًا ومحايدًا إذا حصلنا على 0.
يقبل SentimentAnalyzer
3 معلمات :
- لغة النص
- تيار أم لا تيار
- قاموس (AFINN ، Senticon ، Pattern) ، إنه مدمج
كل الكود النهائي مع تحليل لهجة النص في النهاية:
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;
لقد أضفنا بعض الخطوط الجديدة. التدمير natural
، للحصول على الأدوات التي نحتاجها ، أنشأنا متغيرًا للمحلل وخصصنا النتيجة analysis
المتغير.
معلمات SentimentAnalyzer
واضحة نسبيًا. اللغة الإنجليزية هي النص الذي نعالجه باللغة الإنجليزية. ختم الكلمات التي ذكرتها أعلاه والقاموس الذي يتم توفيره لنا من خلال حزمة Natrual
.
أرغب في إنشاء واجهة مستخدم لهذه الحالة ، ولكن يمكنك اختبارها في عدد قليل من DevTools:
fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({text: 'hey'}) })
كما نرى أنه يعمل :)
جيثب ريبو
استنتاج
في هذه المقالة قدمنا "خدمة microservice" لتحليل نغمة النص. خذها إلى أي مواجهة وتحليل ما يقوله خصومك. تطرقنا أيضًا إلى موضوع إعداد البيانات وقمنا بتثبيت الكثير من التبعيات. شكرا لاهتمامكم!
اقرأ نفسه