<相談したい事>
pythonとnltkを用いて、共起の結果を出力したいと考えているのですが、
出力する時に、出来る限り出力結果を少なくしたいので、値の範囲(~以上、~未満など)の語が
入っている場合のみ共起の結果を返すようにしたいです。
python
1import nltk 2from pyknp import Juman 3import jctconv 4import re 5 6def separate(text): 7 tokens = [] 8 juman = Juman() 9 result = juman.analysis(text) 10 for mrph in result.mrph_list(): 11 if not mrph.hinsi == '助詞' and not mrph.hinsi == '助動詞' and not mrph.bunrui == '読点' and not mrph.bunrui == '句点': 12 tokens.append(mrph.midasi) 13 return tokens 14 15 16# 形態素解析を行った結果から、数値に関係する語の共起の結果を得る 17def number_cooccurrence(list,N): 18 number_list = [] 19 ngram = nltk.ngrams(list,N) # N-グラムを作成(Nは指定) 20 for dict_key in nltk.FreqDist(ngram).keys(): 21 # number_list.append(dict_key) 22 if re.search(r'\d+', str(dict_key)) and not re.search(r'\d+',str(dict_key[N-1])): 23 number_list.append(dict_key) 24 fd = nltk.FreqDist(number_list) 25 return fd.items() 26 27 28if __name__ == '__main__': 29 with open('sample.txt',encoding = 'utf8') as f: 30 text_list = f.readlines() 31 for text in text_list: 32 text = ''.join(text.split()) # スペースを除く 33 text = jctconv.z2h(text,kana = False, digit = True, ascii = True) 34 if not text == '\n' and re.search(r'\d+\D+', text): 35 print(number_cooccurrence(separate(text),3)) 36 37<実行結果> 38dict_items([(('温度', '100', '℃'), 1), (('100', '℃', '以上'), 1)]) 39dict_items([(('月', '24', '日'), 1), (('24', '日', '大学'), 1)]) 40 41※上記の結果で、dict_items((('100', '℃', '以上'), 1)))だけ出力できるようにしたい
<考えていること>
jumanを使用しているので、値の範囲を表現する語(以上、未満など)の品詞で判定し、
タグかなにかつけることが出来ればいけそうと思っている。
上記の値の範囲を表現する語をseparate関数で出来れば、最終的な出力結果を参照することなく
出力結果を少なくできるのではないかと考えている。
あなたの回答
tips
プレビュー