감정은 AFINN-165 워드리스트 및 이모티콘 정서 순위를 사용하여 입력 텍스트의 임의의 블록에 대한 감정 분석을 수행하는 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)| 논쟁 | 유형 | 필수의 | 설명 |
|---|---|---|---|
| 언어 코드 | string | true | 언어를 추가 할 국제 2 자리 코드 |
| 언어 | object | true | 언어 모듈 (새로운 언어 추가 참조) |
Afinn은 마이너스 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 개의 토큰과 각 토큰이 Afinn 점수가 5 인 곳을 가진 엄청나게 "긍정적 인"문자열을 상상해 봅시다. 우리의 결과 비교 점수는 다음과 같습니다.
(max positive score * number of tokens) / number of tokens
(5 * 200) / 200 = 5
토큰 화는 입력 문자열 라인을 분할 한 다음 특수 문자를 제거한 다음 결국 공백을 사용하여 분할하여 작동합니다. 이것은 문자열에서 단어 목록을 얻는 데 사용됩니다.
sentiment 설계하기위한 주요 동기는 성능이었습니다. 따라서 테스트 디렉토리 내의 벤치 마크 스크립트가 포함되어 있으며이를 거의 동등한 인터페이스 및 접근 방식을 제공하는 감상 모듈과 비교합니다. Node 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 데이터 세트를 수정하거나 수정하는 PRS를 수락 할 수 있습니다. 이를 설정하기 위해 UCI가 제공 한 3 개의 라벨이 붙은 데이터 세트에 대해 sentiment 모듈을 테스트합니다.
검증 테스트를 직접 실행하려면 다음과 같습니다.
npm run test:validate Amazon: 0.726
IMDB: 0.765
Yelp: 0.696
npm test