Sentimentは、Afinn-165 WordListとEmoji Sentimentランキングを使用して、入力テキストの任意のブロックでセンチメント分析を実行するnode.jsモジュールです。感情はいくつかのことを提供します:
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 | 追加する言語の国際的な2桁のコード |
| 言語 | object | true | 言語モジュール(新しい言語の追加を参照) |
アフィンは、マイナス5(負)とプラス5(ポジティブ)の間の整数を持つ価数と評価された単語のリストです。センチメント分析は、弦トークン(単語、絵文字)を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トークンを備えた信じられないほど「ポジティブな」文字列と、各トークンのアフィンスコアが5の想像してみましょう。結果の比較スコアは次のようになります。
(max positive score * number of tokens) / number of tokens
(5 * 200) / 200 = 5
トークン化は、入力文字列の行を分割し、特殊文字を削除し、最終的にスペースを使用して分割することで機能します。これは、文字列内の単語のリストを取得するために使用されます。
sentimentを設計するための主な動機はパフォーマンスでした。そのため、ほぼ同等のインターフェイスとアプローチを提供するセンチメンタルモジュールと比較するテストディレクトリ内のベンチマークスクリプトが含まれています。これらのベンチマークに基づいて、ノードv6.9.1を備えたMacBook Proで実行されているため、 sentiment代替実装のほぼ2倍の速さです。
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:benchmarkAfinnが提供する精度は、計算パフォーマンス(上記参照)であることを考えると非常に良いことですが、常に改善の余地があります。したがって、 sentimentモジュールは、精度を改善し、同様のパフォーマンス特性を維持することを考慮して、Afin / emojiデータセットまたは実装を変更または修正するPRを受け入れることに開放されています。これを確立するために、UCIが提供する3つのラベル付きデータセットに対してsentimentモジュールをテストします。
自分で検証テストを実行するには:
npm run test:validate Amazon: 0.726
IMDB: 0.765
Yelp: 0.696
npm test