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

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

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

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

Q&A

0回答

2618閲覧

Python JUMAN エラー

Nomi515

総合スコア8

Python 3.x

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

0グッド

0クリップ

投稿2020/01/01 16:06

編集2020/01/01 17:08

JUMANをもちいて形態素解析を行いたい。

python

1 for s in json_obj['text']: 2 tokens = juman.analysis(cs) 3 base_forms = [tk for tk in tokens] 4 wordset.update(base_forms)

上記はプログラムの一部である。

この状態でプログラムを実行すると

File "TrainNB2.py", line 27, in <module> tokens = juman.analysis(s) #文sを形態素解析してトークンを得る File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/juman.py", line 91, in analysis return self.juman(input_str, juman_format) File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/juman.py", line 78, in juman result = MList(self.juman_lines(input_str), juman_format) File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/mlist.py", line 29, in __init__ mrph = Morpheme(line, mid, juman_format) File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/morpheme.py", line 80, in __init__ self._parse_spec(spec.strip("\n")) File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/morpheme.py", line 143, in _parse_spec self.hinsi_id = int(parts[4]) ValueError: invalid literal for int() with base 10: '特殊'

と文章の途中の文字でエラーとなる。
これはリンク内容こちらのサイトを参考にして

python

1cs = s.replace(' ', ' ')

を加えることで解決した

5735it [02:05, 51.24it/s]Traceback (most recent call last): File "TrainNB2.py", line 27, in <module> tokens = juman.analysis(cs) #文sを形態素解析してトークンを得る File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/juman.py", line 91, in analysis return self.juman(input_str, juman_format) File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/juman.py", line 78, in juman result = MList(self.juman_lines(input_str), juman_format) File "/home/nomi/.local/lib/python3.6/site-packages/pyknp/juman/mlist.py", line 26, in __init__ self._mrph[-1].push_doukei(Morpheme(line[2:], mid, juman_format)) IndexError: list index out of range

次はIndexError: list index out of rangeとエラーが生じてしまった。
上記の状態では5735までしか読み込みません(全て読み込むと5819となります。)

python

1 for s in json_obj['text']: 2 cs = s.replace(' ', ' ') 3 tokens = juman.analysis(cs) 4 base_forms = [tk for tk in tokens] 5 wordset.update(base_forms)

どのように解決すれば宜しいでしょうか?

python

1import json 2import fileinput 3from tqdm import tqdm 4from janome.tokenizer import Tokenizer 5from collections import Counter, defaultdict 6from pyknp import Juman 7 8t = Tokenizer() 9juman = Juman(jumanpp=False) 10 11if __name__ == "__main__": 12 nc = Counter() 13 nwc = defaultdict(lambda: Counter()) 14 global_wordset = set() 15 16 for line in tqdm(fileinput.input('-')): 17 json_obj = json.loads(line) 18 wordset = set() 19 nc[json_obj['category']] += 1 20 21 22 for s in json_obj['text']: 23 cs = s.replace(' ', ' ') 24 tokens = juman.analysis(cs) 25 base_forms = [tk for tk in tokens]26 wordset.update(base_forms) 27 28 for word in wordset: 29 nwc[json_obj['category']][word] += 1 30 31 global_wordset.update(wordset) 32 33 categories = list(nwc.keys()) #カテゴリリスト 34 print('単語\t{0}'.format('\t'.join(categories))) 35 print('__all__\t{0}'.format('\t'.join([str(nc[c]) for c in categories]))) 36 37 for word in global_wordset: 38 if word == '\t': 39 word = '[tab]' 40 for c in categories: 41 nwc[c][word] = nwc[c]['\t'] 42 print('{0}\t{1}'.format( 43 word, 44 '\t'.join([str(nwc[c][word]) for c in categories]) 45 )) 46

全文です

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

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

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

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

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

meg_

2020/01/01 16:27

・リンクは「リンクの挿入」で記入しましょう。 ・エラーメッセージは全文掲載しましょう。 ・forループ内のインデントがおかしいので修正しましょう。(+最新のコードを提示してください)
hayataka2049

2020/01/01 16:42

エラーはtracebackの先頭からお願いします。コードも実行可能な形でないと回答するのが難しいです(オリジナルのコードでなくてもいいですが、単純化したりダミーデータを用いたりして実行するだけで再現可能な形が望ましい。難しければオリジナルのコードすべて)。
meg_

2020/01/01 16:47

"cs"は文字列になっていますか?
Nomi515

2020/01/01 16:51

文字列です。
meg_

2020/01/01 17:00

半角の記号等が問題になる場合もあるようですが、含まれていませんか? 公式には「JUMAN/KNPでは、入力文が全角文字で記述されていることを前提としています。半角スペースなどの半角文字は全角文字に変換してから入力してください。」とあります。
Nomi515

2020/01/01 17:06

その点は問題ないと思います。
Nomi515

2020/01/01 17:08

エラー文が一つ書き忘れていたため追加しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問