المشاعر هي وحدة Node.js التي تستخدم قائمة Wordlist AFINN-165 وتصنيف المعنويات الرموز التعبيرية لأداء تحليل المشاعر على كتل تعسفية لنص الإدخال. يقدم المشاعر عدة أشياء:
npm install sentiment var Sentiment = require ( 'sentiment' ) ;
var sentiment = new Sentiment ( ) ;
var result = sentiment . analyze ( 'Cats are stupid.' ) ;
console . dir ( result ) ; // Score: -2, Comparative: -0.666 يمكنك إضافة دعم لغة جديدة عن طريق تسجيلها باستخدام طريقة registerLanguage :
var frLanguage = {
labels : { 'stupide' : - 2 }
} ;
sentiment . registerLanguage ( 'fr' , frLanguage ) ;
var result = sentiment . analyze ( 'Le chat est stupide.' , { language : 'fr' } ) ;
console . dir ( result ) ; // Score: -2, Comparative: -0.5يمكنك أيضًا تحديد استراتيجيات التسجيل المخصصة للتعامل مع أشياء مثل النفي والتركيز على أساس اللغة:
var frLanguage = {
labels : { 'stupide' : - 2 } ,
scoringStrategy : {
apply : function ( tokens , cursor , tokenScore ) {
if ( cursor > 0 ) {
var prevtoken = tokens [ cursor - 1 ] ;
if ( prevtoken === 'pas' ) {
tokenScore = - tokenScore ;
}
}
return tokenScore ;
}
}
} ;
sentiment . registerLanguage ( 'fr' , frLanguage ) ;
var result = sentiment . analyze ( 'Le chat n'est pas stupide' , { language : 'fr' } ) ;
console . dir ( result ) ; // Score: 2, Comparative: 0.4 يمكنك إلحاق قيم و/أو الكتابة فوقها من AFINN بمجرد حقن أزواج المفاتيح/القيمة في استدعاء طريقة المشاعر:
var options = {
extras : {
'cats' : 5 ,
'amazing' : 2
}
} ;
var result = sentiment . analyze ( 'Cats are totally amazing!' , options ) ;
console . dir ( result ) ; // Score: 7, Comparative: 1.75 var sentiment = new Sentiment([options])| دعوى | يكتب | مطلوب | وصف |
|---|---|---|---|
| خيارات | object | false | خيارات التكوين (لا توجد خيارات مدعومة حاليًا) |
sentiment.analyze(phrase, [options], [callback])| دعوى | يكتب | مطلوب | وصف |
|---|---|---|---|
| عبارة | string | true | عبارة الإدخال للتحليل |
| خيارات | object | false | الخيارات (انظر أدناه) |
| أتصل مرة أخرى | function | false | إذا تم تحديدها ، يتم إرجاع النتيجة باستخدام وظيفة رد الاتصال هذه |
خصائص كائن options :
| ملكية | يكتب | تقصير | وصف |
|---|---|---|---|
| لغة | string | 'en' | اللغة التي يجب استخدامها لتحليل المشاعر |
| إضافات | object | {} | مجموعة من الملصقات والقيم المرتبطة بها لإضافة أو الكتابة فوقها |
sentiment.registerLanguage(languageCode, language)| دعوى | يكتب | مطلوب | وصف |
|---|---|---|---|
| LanguageCode | string | true | رمز دولي مكون من رقمين لإضافة اللغة |
| لغة | object | true | وحدة اللغة (انظر إضافة لغات جديدة) |
AFINN هي قائمة بالكلمات المصنفة للتكافؤ مع عدد صحيح بين ناقص خمسة (سلبية) و PLUS خمسة (إيجابية). يتم إجراء تحليل المشاعر عن طريق التحقق المتبادل لرموز السلسلة (الكلمات ، الرموز التعبيرية) مع قائمة AFINN والحصول على درجات كل منها. النتيجة المقارنة هي ببساطة: sum of each token / number of tokens . على سبيل المثال ، دعنا نأخذ ما يلي:
I love cats, but I am allergic to them.
تؤدي هذه السلسلة إلى ما يلي:
{
score : 1 ,
comparative : 0.1111111111111111 ,
calculation : [ { allergic : - 2 } , { love : 3 } ] ,
tokens : [
'i' ,
'love' ,
'cats' ,
'but' ,
'i' ,
'am' ,
'allergic' ,
'to' ,
'them'
] ,
words : [
'allergic' ,
'love'
] ,
positive : [
'love'
] ,
negative : [
'allergic'
]
} في هذه الحالة ، تبلغ قيمة الحب 3 ، والتحسس قيمة -2 ، والرموز المتبقية محايدة بقيمة 0. لأن السلسلة لها 9 رموز تبدو النتيجة المقارنة الناتجة: (3 + -2) / 9 = 0.111111111
هذا النهج يتركك بنقطة منتصف 0 والحدود العلوية والسفلية مقيدة بالإيجابية والسلبية 5 على التوالي (مثل كل رمز!؟). على سبيل المثال ، دعونا نتخيل سلسلة "إيجابية" بشكل لا يصدق مع 200 رمز وحيث أن كل رمز لديه درجة AFINN 5.
(max positive score * number of tokens) / number of tokens
(5 * 200) / 200 = 5
يعمل الرمز المميز عن طريق تقسيم خطوط سلسلة الإدخال ، ثم إزالة الأحرف الخاصة ، وأخيراً تقسيمها باستخدام المساحات. يستخدم هذا للحصول على قائمة بالكلمات في السلسلة.
كان الدافع الأساسي لتصميم sentiment هو الأداء. على هذا النحو ، فإنه يتضمن برنامجًا نصيًا قياسيًا داخل دليل الاختبار الذي يقارنه مع الوحدة العاطفية التي توفر واجهة ونهج مكافئ تقريبًا. استنادًا إلى هذه المعايير ، التي تعمل على جهاز MacBook Pro مع Node V6.9.1 ، فإن sentiment تقارب ضعف ما يقرب من تطبيقات بديلة:
sentiment (Latest) x 861,312 ops/sec ±0.87% (89 runs sampled)
Sentimental (1.0.1) x 451,066 ops/sec ±0.99% (92 runs sampled)لتشغيل المعايير بنفسك:
npm run test:benchmark في حين أن الدقة التي توفرها AFINN جيدة جدًا بالنظر إلى أدائها الحسابي (انظر أعلاه) ، هناك دائمًا مجال للتحسين. لذلك فإن وحدة sentiment مفتوحة لقبول PRS التي تعدل أو تعديل مجموعات بيانات AFINN / Emoji نظرًا لأنها تعمل على تحسين الدقة والحفاظ على خصائص أداء مماثلة. من أجل إنشاء هذا ، نختبر وحدة sentiment مقابل ثلاث مجموعات بيانات ذات علامات مقدمة من UCI.
لتشغيل اختبارات التحقق من الصحة بنفسك:
npm run test:validate Amazon: 0.726
IMDB: 0.765
Yelp: 0.696
npm test