質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1150閲覧

nltkで特定の条件を満たす共起の結果を出したい

syen2501

総合スコア38

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/29 13:22

<相談したい事>
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関数で出来れば、最終的な出力結果を参照することなく
出力結果を少なくできるのではないかと考えている。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問