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
全文です
・リンクは「リンクの挿入」で記入しましょう。
・エラーメッセージは全文掲載しましょう。
・forループ内のインデントがおかしいので修正しましょう。(+最新のコードを提示してください)
エラーはtracebackの先頭からお願いします。コードも実行可能な形でないと回答するのが難しいです(オリジナルのコードでなくてもいいですが、単純化したりダミーデータを用いたりして実行するだけで再現可能な形が望ましい。難しければオリジナルのコードすべて)。
"cs"は文字列になっていますか?
文字列です。
半角の記号等が問題になる場合もあるようですが、含まれていませんか?
公式には「JUMAN/KNPでは、入力文が全角文字で記述されていることを前提としています。半角スペースなどの半角文字は全角文字に変換してから入力してください。」とあります。
その点は問題ないと思います。
エラー文が一つ書き忘れていたため追加しました。
あなたの回答
tips
プレビュー