<相談したい事>
nltkを用いて数値に関する共起の抽出を行おうとしているのですが、何故か空白の
辞書まで出力指定しまいます。これを排除した形で出力したい。
python
1import nltk 2from pyknp import KNP 3import re 4 5# knpで形態素解析を行ったあとの結果をリストで返す 6def separate(text,option = '-tab'): 7 number_word = [] 8 tokens = [] 9 knp = KNP(option = option) 10 result = knp.parse(text) 11 12 for mrph in result.mrph_list(): 13 if not mrph.hinsi == '助詞' and not mrph.hinsi == '助動詞' and not mrph.bunrui == '読点' and not mrph.bunrui == '句点': 14 tokens.append(mrph.midasi) 15 return tokens 16 17# 形態素解析を行った結果から、数値に関係する語の共起の結果を得る 18def number_cooccurrence(list,N): 19 number_list = [] 20 ngram = nltk.ngrams(list,N) # N-グラムを作成(Nは指定) 21 for dict_key in nltk.FreqDist(ngram).keys(): 22 if re.search(r'\d+', str(dict_key)): 23 number_list.append(dict_key) 24any([re.search(r'\d+', elem) for elem in k])]) # 数値に関係する語の共起のみを抽出する 25 fd = nltk.FreqDist(number_list) 26 return fd.items() 27 28if __name__ == '__main__': 29 num_contain_result = [] 30 with open('sample.txt',encoding = 'utf8') as f: 31 text_list = f.readlines() 32 for text in text_list: 33 text = re.sub('([あ-んア-ン一-龥ー])\s+((?=[あ-んア-ン一-龥ー]))',r'\1\2', text.replace('\n','').replace('\r','')) 34 result = number_cooccurrence(separate(text),3) 35 num_contain_result.append(result) 36 37 print(num_contain_result) 38 39<sample.txtの中身> 40私が外に出かけている間に見たいテレビが始まっていた。 41ポット内の温度が100℃以上になったら、沸騰する。 42 43<実行結果> 44[dict_items([]), dict_items([(('内', '温度', '100'), 1), (('温度', '100', '℃'), 1), (('100', '℃', '以上'), 1)])] 45 46※dict_items([])を削除した形で出力したい。
<思っていること>
・number_cooccurrence関数で数値に関する共起のみ抽出するようにしているのですが、
その部分がうまく動いていないかもしれないと思っている。
・最終的に出てきたnum_contain_result内にdict_items([])の個数が0より多い場合、
削除するという考えがある。
※正直、あまり行いたくない。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/28 08:29