MATLAB에서 트윗의 감정 분석

소개



MATLAB의 Text Analytics Toolbox라는 것을 평소 애용하고 있습니다만, 최신 버젼 R2019b의 새로운 기능 목록 에 센티멘트 분석의 기능이 있었으므로(Sentiment Analysis: Evaluate sentiment in text data using sentiment scoring algorithms including VADER) , 놀이 감각으로 시도했습니다. 자신의 비망도 겸해 소개합니다.

센티멘트 분석이란?



명시된 문장이 긍정적 인 부정적인 중립 중 어느 것인지를 일련의 단어로 판단합니다. 감정 분석이라고도합니다. 트윗이나 설문 조사 결과가 긍정적인지 여부를 결정하는 데 사용되기도합니다.

준비하는 것



MATLAB에 버전 R2019b 이후의 Text Analytics Toolbox가 포함되어 있으면 OK입니다.

조속히 시도했습니다.



데이터 준비



해석에 사용한 데이터는 아래와 같습니다. str이라는 테이블에 세 개의 문장을 저장합니다.


만약을 위해, Google 번역을 사용해 일본어로 번역하면, 의미로서는 아래와 같습니다.
"I am happy for you!": 좋았어!
"Once upon a time, there was a princess.": 어쩐지 공주가 있었다.
"I'm so shocked because I failed the exam.": 시험에 실패했기 때문에 충격을 받았습니다.

토큰화



센티멘트 분석을 하기 위한 전처리로서 토큰화를 합니다. 코드와 출력 결과는 아래와 같습니다.
documents = tokenizedDocument(table2array(str));
documents(1:3)
ans = 
  3×1 tokenizedDocument:
     6 tokens: I am happy for you !
    10 tokens: Once upon a time , there was a princess .
     8 tokens: I'm shocked because I failed the exam .

감정 분석



각 문장의 점수를 살펴 보겠습니다. 코드와 출력 결과는 아래와 같습니다.
compoundScores = vaderSentimentScores(documents);
compoundScores(1:3)
ans =
    0.6114
         0
   -0.6808

문장이 아래로 갈수록 값이 부정적인 것을 알 수 있습니다.
이 스코어화의 부분, 2행만으로 쓸 수 있었으므로, 앞으로 편리하게 사용해 갈 것 같습니다.

트위터의 코멘트를 대략 살펴 보았습니다.



센티멘트 분석을 응용할 수 없을까, 트위터에서 자신이 좋아하는 해외 TV 프로그램 이름을 검색했을 때 시청자의 반응을 보았습니다. (격렬한 코멘트도 있었으므로, 프로그램명은 덮어 둡니다)
덧붙여 트윗의 취득에 관해서는, Twitter의 developer 어카운트도 가지고 있습니다만, 어카운트를 만들지 않은 사람이라도 분위기만 시험할 수 있도록, Html로부터 내용을 취해 오는 코드를 아래에 올려 둡니다.
(아마도 함수가 영어만 대응? 그래서 lang=en을 명시하고 있습니다)
% KEYWORDには好きな検索ワードを入れる
doc = webread('https://twitter.com/search?q=KEYWORD&src=typd&lang=en');
% paragraphタグの中身を抽出
doc2 = extractBetween(doc, "<p", "/p>");
% eraseTagsを使用するためにタグをつけ戻す
for ii=1:length(doc2)
    doc3{ii} = ['<p' doc2{ii} '/p>'];
end
doc3 = doc3';
% HTMLタグの削除
doc4 = eraseTags(doc3);
% トークン化
documents = tokenizedDocument(doc4);
% センチメント分析
compoundScores = vaderSentimentScores(documents);
% ツイートとセンチメント分析スコアを横並びにして1つのテーブルにする
Scoretab = table(doc4 ,compoundScores);

이상의 처리로, Scoretab이라는 이름의 테이블안에, 트윗(실제로는 트윗 이외의 문장도 섞여 있습니다만···)과 스코어가 옆으로 저장됩니다.

그래서, Scoretab의 내용을 전부 공개하기에는 조금 격렬한 내용도 있었으므로 일부 발췌로··
이런 느낌의 결과가 나왔습니다.

・해설자는 야만으로, 소녀는 야만으로, 편집은 야만이다! 스코어 -0.9115


· 말해도 괜찮습니까, 나는 ◎◎와 △△를 좋아합니다 스코어 0.6369


스코어별로 트윗을 정리하거나 정렬하거나 뭔가 사용법이있을 것 같네요.

만약, 그 밖에 더 좋은 센티멘트 분석의 놀이의 소재나, 더 좋은 코드의 작성 방법등 있으면 가르쳐 주세요.

좋은 웹페이지 즐겨찾기