Sentimen adalah modul Node.js yang menggunakan peringkat WordList AFINN-165 dan Peringkat Sentimen Emoji untuk melakukan analisis sentimen pada blok sewenang-wenang dari teks input. Sentimen memberikan beberapa hal:
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 Anda dapat menambahkan dukungan untuk bahasa baru dengan mendaftarkannya menggunakan metode 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.5Anda juga dapat mendefinisikan strategi penilaian khusus untuk menangani hal-hal seperti negasi dan penekanan berdasarkan per-bahasa:
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 Anda dapat menambahkan dan/atau menimpa nilai dari AFINN hanya dengan menyuntikkan pasangan kunci/nilai ke panggilan metode sentimen:
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])| Argumen | Jenis | Diperlukan | Keterangan |
|---|---|---|---|
| opsi | object | false | Opsi Konfigurasi (tidak ada opsi yang didukung saat ini) |
sentiment.analyze(phrase, [options], [callback])| Argumen | Jenis | Diperlukan | Keterangan |
|---|---|---|---|
| frasa | string | true | Input frasa untuk menganalisis |
| opsi | object | false | Opsi (lihat di bawah) |
| panggilan balik | function | false | Jika ditentukan, hasilnya dikembalikan menggunakan fungsi panggilan balik ini |
options Properti Objek:
| Milik | Jenis | Bawaan | Keterangan |
|---|---|---|---|
| bahasa | string | 'en' | Bahasa untuk digunakan untuk analisis sentimen |
| tambahan | object | {} | Set label dan nilai terkaitnya untuk menambah atau menimpa |
sentiment.registerLanguage(languageCode, language)| Argumen | Jenis | Diperlukan | Keterangan |
|---|---|---|---|
| languagecode | string | true | Kode dua digit internasional untuk ditambahkan bahasa |
| bahasa | object | true | Modul Bahasa (lihat Menambahkan Bahasa Baru) |
Afinn adalah daftar kata yang diberi peringkat untuk valensi dengan integer antara minus lima (negatif) dan ditambah lima (positif). Analisis sentimen dilakukan dengan memeriksa silang token string (kata-kata, emoji) dengan daftar Afinn dan mendapatkan skor masing-masing. Skor komparatif adalah: sum of each token / number of tokens . Jadi misalnya mari kita ambil yang berikut:
I love cats, but I am allergic to them.
Hasil string itu sebagai berikut:
{
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'
]
} Dalam hal ini, cinta memiliki nilai 3, alergi memiliki nilai -2, dan token yang tersisa netral dengan nilai 0. karena string memiliki 9 token, skor komparatif yang dihasilkan terlihat seperti: (3 + -2) / 9 = 0.111111111
Pendekatan ini membuat Anda dengan titik tengah 0 dan batas atas dan bawah masing-masing dibatasi untuk positif dan negatif (sama seperti masing-masing token!?). Sebagai contoh, mari kita bayangkan string "positif" yang luar biasa dengan 200 token dan di mana masing -masing token memiliki skor afinn 5. Skor komparatif yang dihasilkan akan terlihat seperti ini:
(max positive score * number of tokens) / number of tokens
(5 * 200) / 200 = 5
Tokenisasi berfungsi dengan membagi garis string input, kemudian menghapus karakter khusus, dan akhirnya membelahnya menggunakan spasi. Ini digunakan untuk mendapatkan daftar kata dalam string.
Motivasi utama untuk merancang sentiment adalah kinerja. Dengan demikian, itu termasuk skrip benchmark dalam direktori uji yang membandingkannya dengan modul sentimental yang menyediakan antarmuka dan pendekatan yang hampir setara. Berdasarkan tolok ukur ini, berjalan di MacBook Pro dengan Node v6.9.1, sentiment hampir dua kali lebih cepat dari implementasi alternatif:
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)Untuk menjalankan tolok ukur sendiri:
npm run test:benchmark Sementara keakuratan yang disediakan oleh Afinn cukup baik mengingat kinerja komputasi (lihat di atas) selalu ada ruang untuk perbaikan. Oleh karena itu modul sentiment terbuka untuk menerima PR yang memodifikasi atau mengubah set data atau implementasi AFINN / Emoji mengingat bahwa mereka meningkatkan akurasi dan mempertahankan karakteristik kinerja yang serupa. Untuk menetapkan ini, kami menguji modul sentiment terhadap tiga set data berlabel yang disediakan oleh UCI.
Untuk menjalankan tes validasi sendiri:
npm run test:validate Amazon: 0.726
IMDB: 0.765
Yelp: 0.696
npm test