ความเชื่อมั่นคือโมดูล Node.js ที่ใช้การจัดอันดับความเชื่อมั่น Afinn-165 WordList และ Emoji เพื่อทำการวิเคราะห์ความเชื่อมั่นในบล็อกโดยพลการของข้อความอินพุต ความเชื่อมั่นให้หลายสิ่ง:
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 เป็นรายการของคำที่ได้รับการจัดอันดับสำหรับวาเลนซ์ที่มีจำนวนเต็มระหว่างลบห้า (ลบ) และบวกห้า (บวก) การวิเคราะห์ความเชื่อมั่นดำเนินการโดยการตรวจสอบข้ามโทเค็นสตริง (คำ, อิโมจิ) กับรายการ 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
Tokenization ทำงานได้โดยการแยกสายของสตริงอินพุตจากนั้นลบอักขระพิเศษและในที่สุดก็แยกมันโดยใช้ช่องว่าง สิ่งนี้ใช้เพื่อรับรายการคำในสตริง
แรงจูงใจหลักสำหรับการออกแบบ 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