N-gramで分析した結果から単語のカウントを行いたいのですがやり方がよく分かりませんでした。実行結果のような処理をしたのちに、単語ごとのカウントを行いたいと考えています。こちらの例に対して出力したい内容としては、
煮干し,3
最近,3
濃い,3
.,2
ラーメン屋,1
さん,1
です,1
といったように左側に単語、右側に出現数のカウントを行いたいです。
該当のソースコード
Python
1import pandas as pd 2import MeCab 3import re 4from collections import Counter 5import numpy as np 6import matplotlib.pyplot as plt 7 8# ファイル読み込み 9# 対象ファイルの読み込みと形態素解析の実施 10with open('data/review_high.csv', encoding='utf-8') as f: 11 str = f.read() 12 13def format_text(text): 14 text = text.lower() 15 text = re.sub(r'[0-90-9a-zA-Z]+', "", text) #半角 16 text = re.sub(r'[!$%&\’\\\\()*+,-./:;?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@?!`+¥%]', "", text) 17 18 return text 19 20mecab = MeCab.Tagger("-Ochasen -u \"C:/laboratory/MeCab/dic/neologd/neologd.dic\"") 21str = format_text(str) 22work_mecab_arry = mecab.parse(str).splitlines() 23 24# 形態素解析結果の配列形式の変更 25mecab_arry = [] 26for u in work_mecab_arry: 27 member = [] 28 member = re.split('\t',u) 29 mecab_arry.append(member) 30 31# 形態素解析結果から単語部分の抽出 32word_arry = [] 33for u in mecab_arry: 34 word_arry.append(u[0]) 35 36with open('data/japanese.txt',encoding='utf-8') as f: 37 stop_words = f.read().splitlines() 38 39result_word_list = [] 40 41for line in mecab.parse(str).splitlines(): 42 if line is None or line == '' or line == 'EOS' or len(line.split()) < 4: 43 continue 44 for target_part_of_speech in target_parts_of_speech: 45 if target_part_of_speech == line.split()[3]: 46 word = line.split()[2] 47 if not word in stop_words: 48 result_word_list.append(word) 49 50# 2-gram, 3-gramの配列作成 51bg_list = list(zip(word_arry[:-1],word_arry[1:])) 52tg_list = list(zip(word_arry[:-2],word_arry[1:-1],word_arry[2:])) 53 54# 2-gram, 3-gramの頻度のカウント 55bigram_arry = Counter(bg_list) 56trigram_arry = Counter(tg_list) 57 58# 分析結果の表示 59for k, v in sorted(bigram_arry.items(), key=lambda x:x[1], reverse=True): 60 print(k, v) 61 62for k, v in sorted(trigram_arry.items(), key=lambda x:x[1], reverse=True): 63 print(k, v) 64 65
ここまでの実行結果(一部抜粋)
('です', '.', '最近') 1 ('.', '最近', '濃い') 1 ('最近', '濃い', '煮干し') 1 ('濃い', '煮干し', 'ラーメン屋') 1 ('煮干し', 'ラーメン屋', 'さん') 1
回答1件
あなたの回答
tips
プレビュー