情感是一個節點.js模塊,它使用Afinn-165 WordList和表情符號的情感排名對輸入文本的任意塊進行情感分析。情緒提供了幾件事:
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 您可以通過簡單地將密鑰/值對注入情感方法來調用:
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)| 爭論 | 類型 | 必需的 | 描述 |
|---|---|---|---|
| Langualagecode | 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
令牌化是通過拆分輸入字符串的線,然後刪除特殊字符,最後使用空格將其拆分來起作用。這用於獲取字符串中的單詞列表。
設計sentiment的主要動機是表現。因此,它在測試目錄中包含一個基準腳本,該腳本將其與情感模塊進行比較,該模塊提供了幾乎等效的接口和方法。基於這些基準測試,在帶有節點v6.9.1的MacBook Pro上運行的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模塊開放,可以接受修改或修改Afinn / emoji數據集或實現的PR,鑑於它們提高了準確性並保持相似的性能特徵。為了建立這個問題,我們針對UCI提供的三個標記數據集測試sentiment模塊。
自己運行驗證測試:
npm run test:validate Amazon: 0.726
IMDB: 0.765
Yelp: 0.696
npm test