Настройка-это модуль Node.js, который использует рейтинг Wordlist AFINN-165 и рейтинг настроения смайликов для выполнения анализа настроений на произвольных блоках входного текста. Настройка дает несколько вещей:
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)| Аргумент | Тип | Необходимый | Описание |
|---|---|---|---|
| языковой код | 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'
]
} В этом случае Love имеет значение 3, Allergic имеет значение -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 была производительность. Таким образом, он включает в себя эталонный сценарий в тестовом каталоге, который сравнивает его с сентиментальным модулем, который обеспечивает почти эквивалентный интерфейс и подход. Основываясь на этих критериях, работая на MacBook Pro с узлом 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