Repository navigation
How to fix "compileFST assert next_addr is not None" Error #94
Description
Activity
辞書エントリまたはサイズの問題か,環境の問題かを切り分ける必要がありそうです。
- 失敗するユーザー辞書の行は特定できるでしょうか?その行だけをユーザー辞書に与えても失敗しますか?
- 64bit版 Python で実行するとどうでしょうか?
問題が解決できれば、辞書は数千万行以上にする予定です。
理論上はユーザー辞書の行数に上限はありませんが,現実的に数千万件を扱うのは,ビルド時間,実行時の解析時間の両面において厳しいかもしれません。実績があるのは数百万件程度です(そのくらいでも解析時間は遅くなります)。
- 失敗するユーザー辞書の行は特定できるでしょうか?その行だけをユーザー辞書に与えても失敗しますか?
- 64bit版 Python で実行するとどうでしょうか?
調べてみました。
-
32bit Python2.7の場合
- 9045行まで登録できる
- 9046行から登録できない
- 9046行目にすでに登録できることが分かっていて、辞書にない単語を書いても登録できなず、compileFST assert next_addr is not None エラーが表示される。
- 9046行目以降だけのIPA辞書形式のCSVファイルを作成すると問題なく辞書登録される
-
64bit Python2.7の場合
- 4350行あたりから辞書登録に失敗し始める(compileFST assert next_addr is not None エラーが表示される)
- 4600行まで、5回中3回ぐらい辞書登録に失敗する(compileFST assert next_addr is not None エラーが表示される)
- 8000行あたりから、だいたい辞書登録に失敗する(compileFST assert next_addr is not None エラーが表示される)
- 32bit と同じく後ろ半分だけを辞書登録すると成功する
Janomeのfst.pyにprint文を入れた最後10行分の結果を記します。
num: 33440 i: 0 <janome.fst.State object at 0x05593760> num: 33441 i: 0 r <janome.fst.State object at 0x055937D8> num: 33442 i: 0 a <janome.fst.State object at 0x05593850> num: 33443 i: 0 l <janome.fst.State object at 0x055938C8> num: 33444 i: 0 u <janome.fst.State object at 0x05593940> num: 33445 i: 0 c <janome.fst.State object at 0x055939B8> num: 33446 i: 0 i <janome.fst.State object at 0x05593A30> num: 33447 i: 0 m <janome.fst.State object at 0x05593AA8> num: 33448 i: 0 a <janome.fst.State object at 0x05593B20> num: 33449 i: 0 r <janome.fst.State object at 0x05593B98> num: 33450 i: 0 「 <janome.fst.State object at 0x062BDD78> Traceback (most recent call last): File "janome_make_usrdic_v1.py", line 168, in <module> user_dict = UserDictionary( in_filename, char_code , dic_form , sysdic.conne ctions) File "C:\Python27\lib\site-packages\janome\dic.py", line 393, in __init__ compiledFST, entries = build_method(user_dict, enc) File "C:\Python27\lib\site-packages\janome\dic.py", line 413, in buildipadic compiledFST = compileFST(fst) File "C:\Python27\lib\site-packages\janome\fst.py", line 323, in compileFST assert next_addr is not None AssertionErrorIPA辞書形式のCSVファイルを分割して1つの辞書フォルダーへ保存すると言った回避は可能ですか?
問題が解決できれば、辞書は数千万行以上にする予定です。
理論上はユーザー辞書の行数に上限はありませんが,現実的に数千万件を扱うのは,ビルド時間,実行時の解析時間の両面において厳しいかもしれません。実績があるのは数百万件程度です(そのくらいでも解析時間は遅くなります)。
解析にかかる時間が2週間程度であれば、コンピュータ動かしっぱなしにすればよいので、問題ありません。
遅くなってすみません。10000件程度なら登録できるはずなので,データに依存する不具合かもしれないですね。
公開可能なものであれば手元で再現させてみます。公開不可能なデータであれば対応は難しそうです。遅くなってすみません。10000件程度なら登録できるはずなので,データに依存する不具合かもしれないですね。
公開可能なものであれば手元で再現させてみます。公開不可能なデータであれば対応は難しそうです。関係者に確認を取って、載せても構わないとのことでしたので添付いたします。
あまり広めないでほしいとの要望がありましたので、取り扱いにご注意をお願いいたします。(取得後はオーナー権限で添付を削除しても構いません。)
文字コードはCP932形式で、拡張子はGithubがCSV形式をアップロードできないそうなので、txtにしています。csvに直してから使ってください。一応、mecab-dict-index でユーザー辞書の生成ができることを確認しています。
en:
When I try to create a user dictionary using Janome's API, UserDicitionary (),
I encountered /lib/site-packages/janome/fst.py compileFST assert next_addr is not None error message with The stack trace is output.
Then the user dictionary cannot be created.
How can I generate a dictionary?
The original data to be used as a user dictionary is in IPA dictionary format.
I wrote data check function in same python code.
check function says all the lines has 12 commna . so I think The CSV file in IPA dictionary format is ready.
The CSV file is as follows.
<About 20 characters mixed with numbers, symbols and alphabets>快特,-1,-1,1000,名詞,固有名詞,一般,,,,快特,,*
<About 20 characters mixed with numbers, symbols and alphabets>特快,-1,-1,1000,名詞,固有名詞,一般,,,,特快,,*
About 20,000 words below.
I can register up to about 9,000 words without any problems.
If the problem can be solved, the dictionary will have more than tens of millions of lines.
ja( 日本語 ):
Janome の API 、UserDicitionary() を使用してユーザー辞書を作成しようとすると、
<pythonインストール先>/lib/site-packages/janome/fst.py compileFST assert next_addr is not None と言うスタックトレースが出力されて、ユーザー辞書の作成ができません。
どうすれば、辞書が生成できるでしょうか。
ユーザー辞書にする元データは、IPA辞書形式です。
APIを記載したpythonソースコード内で入力ファイルの,(カンマ)の数を数えると全ての行が12個なので、IPA辞書形式のCSVファイルは出来ているかと思います。
CSVファイルは、以下の要領です。
<数字・記号・アルファベット混じりの20文字ぐらい>快特,-1,-1,1000,名詞,固有名詞,一般,,,,快特,,*
<数字・記号・アルファベット混じりの20文字ぐらい>特快,-1,-1,1000,名詞,固有名詞,一般,,,,特快,,*
以下2万語程度
9千語ぐらいまでは、問題なく登録できます。
問題が解決できれば、辞書は数千万行以上にする予定です。
Environment:
Janome 3.10
python 2.7.18 32bit
Windows 8.1 64bit