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

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

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

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

1302閲覧

JanomeのAnalyzer中の引数(token_filters = token_filters)が分からない

James1201

総合スコア15

Python 3.x

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2018/05/19 16:27

編集2018/05/19 16:37

サイト通りのコードを入力したのですが、エラーが出てしまいます。
問題箇所のエラーを調べたのですが、どこを探しても

Analyzer(token_filters = token_filters)

に関する記述がありませんでした。

下記にスクリプトとエラー内容を掲載しますので、どなたか詳しい方教えていただけませんか。
よろしくお願い致します。

スクリプト↓

python

1from janome.tokenizer import Tokenizer 2from janome.analyzer import Analyzer 3from janome.tokenfilter import * 4text = u'すもももももももものうち' 5token_filters = [POSKeepFilter('名詞'), TokenCountFilter(att='base_form')] 6a = Analyzer(token_filters = token_filters) 7for k, v in a.analyze(text): 8 print('%s: %d' % (k, v))

エラー内容↓

python

1SyntaxError Traceback (most recent call last) 2~/anaconda3/lib/python3.6/site-packages/sysdic/__init__.py in entries(compact) 3 22 try: 4---> 23 from sysdic import entries_compact0, entries_compact1, entries_compact2, entries_compact3, entries_compact4, entries_compact5, entries_compact6, entries_compact7, entries_compact8, entries_compact9 5 24 except: 6 7SyntaxError: invalid token (entries_compact0.py, line 2) 8 9During handling of the above exception, another exception occurred: 10 11LoadingDictionaryError Traceback (most recent call last) 12<ipython-input-15-d7a250153fe3> in <module>() 13 4 text = u'すもももももももものうち' 14 5 token_filters = [POSKeepFilter('名詞'), TokenCountFilter(att='base_form')] 15----> 6 a = Analyzer(token_filters) 16 7 for k, v in a.analyze(text): 17 8 print('%s: %d' % (k, v)) 18 19~/anaconda3/lib/python3.6/site-packages/janome/analyzer.py in __init__(self, char_filters, tokenizer, token_filters) 20 83 """ 21 84 if not tokenizer: 22---> 85 self.tokenizer = Tokenizer() 23 86 elif tokenizer.wakati: 24 87 raise Exception('Invalid argument: A Tokenizer with wakati=True option is not accepted.') 25 26~/anaconda3/lib/python3.6/site-packages/janome/tokenizer.py in __init__(self, udic, udic_enc, udic_type, max_unknown_length, wakati, mmap) 27 162 self.sys_dic = MMapSystemDictionary(mmap_entries(wakati), connections, chardef.DATA, unknowns.DATA) 28 163 else: 29--> 164 self.sys_dic = SystemDictionary(entries(wakati), connections, chardef.DATA, unknowns.DATA) 30 165 if udic: 31 166 if udic.endswith('.csv'): 32 33~/anaconda3/lib/python3.6/site-packages/sysdic/__init__.py in entries(compact) 34 23 from sysdic import entries_compact0, entries_compact1, entries_compact2, entries_compact3, entries_compact4, entries_compact5, entries_compact6, entries_compact7, entries_compact8, entries_compact9 35 24 except: 36---> 25 raise LoadingDictionaryError() 37 26 __entries = entries_compact0.DATA 38 27 __entries.update(entries_compact1.DATA) 39 40LoadingDictionaryError:

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

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

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

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

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

guest

回答1

0

ベストアンサー

こちらの環境では質問文のコードは問題なく実行できました。

txt

1Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 15 2017, 03:27:45) [MSC v.1900 64 bit (AMD64)]

エラーメッセージを見る限りでは、辞書ファイルを読もうとしてライブラリ内部でエラーが発生しているように見受けられます。


James1201さんへ
辞書はデフォルトのではなく新規語に対応できるようにアップデートした

そういう重要な事項はどういう手順で辞書のアップデートを行ったのかも含めて質問文に追記してくださいな。。。

具体的なエラーと言われても、こちらの環境では問題を再現できないので、現状質問文で提示されている情報以上の事はわかりません。

SyntaxError: invalid token (entries_compact0.py, line 2)

site-packages\sysdic\entries_compact0.pyの2行目で無効なトークンのエラー。


(very experimental) NEologd 辞書を内包した janome をビルドする方法

Tokenizer 初期化

Tokenizer 初期化時,mmap=True オプションが必須です。このオプションをつけないと, LoadingDictionaryError が発生します。

よって、問題は

a = Analyzer(token_filters)

self.tokenizer = Tokenizer()が引数無し呼び出されているのが問題なため、
Tokenizerを生成しAnalyzerの引数として渡せばよいのでは。

Python

1# -*- coding: utf-8 -*- 2from janome.tokenizer import Tokenizer 3from janome.analyzer import Analyzer 4from janome.tokenfilter import * 5text = u'すもももももももものうち' 6tokenizer = Tokenizer(mmap=True) 7token_filters = [POSKeepFilter('名詞'), TokenCountFilter(att='base_form')] 8a = Analyzer(tokenizer=tokenizer, token_filters = token_filters) 9for k, v in a.analyze(text): 10 print('%s: %d' % (k, v)) 11

投稿2018/05/19 23:05

編集2018/05/20 04:32
umyu

総合スコア5846

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

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

James1201

2018/05/20 03:44

そういえば、辞書はデフォルトのではなく新規語に対応できるようにアップデートした覚えがあります。 できれば辞書はこのままで行いたいのですが、具体的にどういうエラーなのかもし分かるようでしたら教えて頂けないでしようか。
James1201
James1201

2018/05/20 05:45

無事解決致しました! ご親切にありがとうございました!
umyu

2018/05/20 05:46

>James1201さんへ 解決して良かったです。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問