Я пытаюсь создать пользовательский словарь MeCab 0.996 с UniDic CWJ 2.3.0 в Ubuntu 20.10, используя следующую команду терминала:
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/unidic/unidic-cwj-2.3.0 -u ~/foo/bar/foo.dic -f utf8 -t utf8 ~/foo/bar/foo.csv
где foo.csv:
ダイバーシティ,,,-200,名詞,普通名詞,一般,*,*,*,ダイバーシティ,ダイバーシティ-diversity,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,外,*,*,*,*,*,*,体,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,,,,,
Но я получаю такую ошибку:
dictionary.cpp(355) [cid->left_size() == matrix.left_size() && cid->right_size() == matrix.right_size()] Context ID files(/usr/local/lib/unidic/unidic-cwj-2.3.0/left-id.def or /usr/local/lib/unidic/unidic-cwj-2.3.0/right-id.def may be broken
Это сообщение о нерешенной проблеме GitHub, похоже, связано, но выходит у меня из головы: https://github.com/taku910/mecab/issues/42
Я могу создать пользовательский словарь MeCab с помощью более старого unidic-mecab-2.1.2 а>:
$ /usr/local/libexec/mecab/mecab-dict-index -d ~/mecab/unidic-mecab-2.1.2_src/ -u ~/foo/bar/foo.dic -f utf8 -t utf8 ~/foo/bar/foo.csv
./pos-id.def is not found. minimum setting is used
emitting double-array: 100% |###########################################|
done!
Я также могу создать пользовательский словарь, используя reiwa.33.csv из документация unidic-py:
/usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/unidic/unidic-cwj-2.3.0 -u ~/foo/bar/reiwa33.dic -f utf8 -t utf8 ~/foo/bar/reiwa.33.csv
/usr/local/lib/unidic/unidic-cwj-2.3.0/pos-id.def is not found. minimum setting is used
reading /home/foo/bar/reiwa.33.csv ... 3
emitting double-array: 100% |###########################################|
done!
Reiwa.33.csv:
令和,4786,4786,8205,名詞,固有名詞,一般,*,*,*,レイワ,令和,令和,レーワ,令和,レーワ,固,*,*,*,*,*,*,*,レイワ,レイワ,レイワ,レイワ,"1,0",*,*,*,*
㋿,5969,5969,2588,補助記号,一般,*,*,*,*,,㋿,㋿,,㋿,,記号,*,*,*,*,*,*,*,,,,,*,*,*,*,999999
㋿,4786,4786,3992,名詞,固有名詞,一般,*,*,*,レイワ,令和,㋿,レーワ,㋿,レーワ,固,*,*,*,*,*,*,*,レイワ,レイワ,レイワ,レイワ,"1,0",*,*,*,*
Таким образом, разница между двумя CSV-файлами заключается в том, что идентификаторы левого и правого контекста указываются для каждой формы поверхности (а также aType и lemma_id для некоторых, но не для всех записей) в reiwa.33.csv, но не в foo. csv.
Согласно инструкциям для MeCab, mecab-dict-index автоматически назначит левую и правильные идентификаторы, и это похоже на unidic-mecab-2.1.2, но не на UniDic 2.3.0.
Итак, я думаю, возникает вопрос: как определить, какими должны быть идентификаторы левого и правого контекста? Есть где-нибудь объяснение?