pythonと辞書で文章を分類する
まずは既存の辞書を使って、文章の分類を行い、その後自前の辞書を使って分類を行う。
辞書を使う前に文章を単語ごとに分割する必要がある。そのやり方は以下の記事にまとめた。
①極性判定を行う
Open Resources/Japanese Sentiment Polarity Dictionary - 東北大学 乾・鈴木研究室 / Communication Science Lab, Tohoku University
日本語評価極性辞書を用いて、極性判定を行う。
(ソースコード)
import MeCab import pickle import pandas file=open("title.pickle", "rb") sentences=pickle.load(file) file.close() t=MeCab.Tagger('-Ochasen') words_list=[] for sentence in sentences: words=[] parsed=t.parse(sentence) for line in parsed.splitlines()[:-1]: words.append(line.split('\t')[2]) # print(words) words_list.append(words) # print(words_list) wago=pandas.read_csv('wago.121808.pn', header=None, sep='\t') word2score={} values={'ポジ(経験)':1,'ポジ(評価)':1, 'ネガ(経験)':-1, 'ネガ(評価)':-1} for word, label in zip(wago.loc[:, 1], wago.loc[:, 0]): word2score[word]=values[label] scores=[] for words in words_list: score=0 for word in words: if word in word2score: score+=word2score[word] scores.append(score) scores_df=pandas.DataFrame({'sentence': sentences, 'score': scores}, columns=['sentence', 'score']) scores_df_sorted=scores_df.sort_values('score', ascending=False) print(scores_df_sorted.head(5)) scores_df_sorted=scores_df.sort_values('score', ascending=True) print(scores_df_sorted.head(5))
(実行結果)
> python .\words4.py sentence score 36 【1位は商品化】売れなくてもいい…!珍しい東海オンエアグッズプレゼン大会! 2 188 【衝撃】現実に存在する信じられない超人5選 1 164 ◯◯屋さんで◯◯せずにどれだけ楽しむことができるのか!? 1 214 【超楽しい】お安く済ませて!チーム対抗揃えてAtoZ!!! 1 72 【事件発生】「なんで落ちてるの?」っていう珍しいものを拾ってこい選手権! 1 sentence score 218 【りうょり】逆にむずい!高級食材を全力で不味くせよ!!! -1 85 【10月】海!BBQ!キャンプ!時間内に失った夏を取り戻せ! -1 205 材料そろえたのに何作るか忘れちゃった!代わりに作って! -1 45 【検証】一週間ガチで呪い続けたらメンバーは死ぬのか? -1 141 【泥棒】しばゆーがすぐ物を盗むので現行犯で逮捕します。 -1
②自前の辞書を使って分類
お酒に関する動画を見つけるために下記のリストを作り、分類を行う。
word2score={'酒':1,'飲':1,'酔':1,'飲む':1,'酔う':1, '酔い':1, '泥酔':1 }
(ソースコード)
import MeCab import pickle import pandas file=open("title.pickle", "rb") sentences=pickle.load(file) file.close() t=MeCab.Tagger('-Ochasen') words_list=[] for sentence in sentences: words=[] parsed=t.parse(sentence) for line in parsed.splitlines()[:-1]: words.append(line.split('\t')[2]) words_list.append(words) wago=pandas.read_csv('wago.121808.pn', header=None, sep='\t') word2score={'酒':1,'飲':1,'酔':1,'飲む':1,'酔う':1, '酔い':1, '泥酔':1 } scores=[] for words in words_list: score=0 for word in words: if word in word2score: score+=word2score[word] scores.append(score) scores_df=pandas.DataFrame({'sentence': sentences, 'score': scores}, columns=['sentence', 'score']) scores_df_sorted=scores_df.sort_values('score', ascending=False) print(scores_df_sorted.head(5))
(実行結果)
> python .\words5.py sentence score 93 【酔酔酔】当てるまで終われない利き日本酒 4 246 【ゆる動画】たまには6人でお酒でも飲んで話そうよ!でも平均台から落ちたら負け!!! 2 68 ドラマ撮影中、ワンカット毎にお酒一杯飲んだらどうなっちゃうの!?【後編】 2 69 ドラマ撮影中、ワンカット毎にお酒一杯飲んだらどうなっちゃうの!?【前編】 2 114 【半分飲み会】大人が全力でおねしょに挑戦します 1
参考
寺田学 『Pythonによるあたらしいデータ分析の教科書 (AI&TECHNOLOGY)』 翔泳社 (2018/9/19)
(間違い等あればコメントよろしくお願いいたします。)