Sentiment ist ein Node.js-Modul, das das AFINN-165-WordList- und Emoji-Sentiment-Ranking verwendet, um die Sentiment-Analyse in beliebigen Blöcken des Eingabetxtes durchzuführen. Das Gefühl liefert mehrere Dinge:
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 Sie können Unterstützung für eine neue Sprache hinzufügen, indem Sie sie mithilfe der registerLanguage -Methode registrieren:
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.5Sie können auch benutzerdefinierte Bewertungsstrategien definieren, um Dinge wie Negation und Betonung pro Sprachbasis zu behandeln:
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 Sie können Werte von AFINN anhängen und/oder überschreiben, indem Sie einfach Schlüssel-/Wertpaare in einen Sentiment -Methode -Aufruf injizieren:
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])| Argument | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| Optionen | object | false | Konfigurationsoptionen (derzeit keine Optionen unterstützt) |
sentiment.analyze(phrase, [options], [callback])| Argument | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| Phrase | string | true | Eingabephrase zur Analyse |
| Optionen | object | false | Optionen (siehe unten) |
| Rückruf | function | false | Wenn angegeben, wird das Ergebnis mit dieser Rückruffunktion zurückgegeben |
options :
| Eigentum | Typ | Standard | Beschreibung |
|---|---|---|---|
| Sprache | string | 'en' | Sprache, die für die Stimmungsanalyse verwendet werden müssen |
| Extras | object | {} | Satz von Etiketten und deren zugehörigen Werten zum Hinzufügen oder Überschreiben |
sentiment.registerLanguage(languageCode, language)| Argument | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| Languagecode | string | true | Internationaler zweistelliger Code für die Sprache zum Hinzufügen |
| Sprache | object | true | Sprachmodul (siehe Hinzufügen neuer Sprachen) |
Afinn ist eine Liste von Wörtern, die für die Valenz mit einer Ganzzahl zwischen minus fünf (negativ) und plus fünf (positiv) bewertet wurden. Die Stimmungsanalyse wird durchgeführt, indem die String-Token (Wörter, Emojis) mit der AFINN-Liste geprüft und ihre jeweiligen Punktzahlen erhalten werden. Die Vergleichsbewertung ist einfach: sum of each token / number of tokens . Lassen Sie uns zum Beispiel Folgendes nehmen:
I love cats, but I am allergic to them.
Diese Zeichenfolge führt zu Folgendem:
{
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'
]
} In diesem Fall hat die Liebe einen Wert von 3, allergisch einen Wert von -2 und die verbleibenden Token sind neutral mit einem Wert von 0. Da die Zeichenfolge 9 Token hat, sieht die resultierende Vergleichsbewertung aus wie: (3 + -2) / 9 = 0.111111111
Dieser Ansatz lässt Sie mit einem Mittelpunkt von 0 und die oberen und unteren Grenzen sind auf positive bzw. negative 5 beschränkt (das gleiche wie bei jedem Token!). Stellen wir uns beispielsweise eine unglaublich "positive" Zeichenfolge mit 200 Token vor und wo jeder Token einen AFINN -Score von 5 hat. Unsere resultierende Vergleichspunktzahl würde so aussehen:
(max positive score * number of tokens) / number of tokens
(5 * 200) / 200 = 5
Die Tokenisierung funktioniert, indem die Zeilen der Eingabezeichenfolge geteilt, dann die Sonderzeichen entfernt und schließlich mit Leerzeichen aufgeteilt werden. Dies wird verwendet, um eine Liste von Wörtern in der Zeichenfolge zu erhalten.
Eine Hauptmotivation für die Gestaltung sentiment war die Leistung. Daher enthält es ein Benchmark -Skript in das Testverzeichnis, das es mit dem sentimentalen Modul vergleicht, das eine nahezu äquivalente Schnittstelle und einen nahezu äquivalenten Ansatz bietet. Basierend auf diesen Benchmarks, die auf einem MacBook Pro mit Node V6.9.1 ausgeführt werden, ist sentiment fast doppelt so schnell wie alternative Implementierungen:
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)Um die Benchmarks selbst zu leiten:
npm run test:benchmark Während die von Afinn bereitgestellte Genauigkeit in Anbetracht der Rechenleistung (siehe oben) ziemlich gut ist, gibt es immer Raum für Verbesserungen. Daher ist das sentiment offen für die Akzeptanz von PRs, die die afinn / emoji -Datensätze oder die Implementierung ändern oder ändern, da sie die Genauigkeit verbessern und ähnliche Leistungsmerkmale aufrechterhalten. Um dies festzustellen, testen wir das sentiment gegen drei von UCI bereitgestellte Datensätze.
Um die Validierungstests selbst durchzuführen:
npm run test:validate Amazon: 0.726
IMDB: 0.765
Yelp: 0.696
npm test