我正在尝试构建一个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文件之间的区别在于,为每个表面形式指定了左上下文ID和右上下文ID(以及aType和引理_一些但不是所有条目的id )在reiwa.33.csv中,而不是在foo.csv中。
根据使用说明对于MeCab,mecab-dict-index将自动分配左ID和右ID,这似乎适用于unidic-mecab-2.1.2,但不适用于UniDic 2.3.0。
因此,我猜问题变成了:如何确定左上下文ID和右上下文ID应该是什么?有什么解释吗?
发布于 2021-02-22 17:44:41
我能在下面找到答案这篇奇塔文章。
要确定左侧和右侧上下文ID,请执行以下操作:
分别查看left-id.def和right-id.def文件:
$ gedit /usr/local/lib/unidic/unidic-cwj-2.3.0/left-id.def
$ gedit /usr/local/lib/unidic/unidic-cwj-2.3.0/right-id.def
找到与单词特征匹配的行。
对于没有指定重音类型(aType)或重音更改类型(aConType)的常规外来词名词(例如,ダイバーシティ),值为:
left-id: 15917 名詞,普通名詞,一般,*,*,*,*,*,外,*,*,*,*,*,*
right-id: 17160 名詞,普通名詞,一般,*,*,*,*,*,外,*,*,*,*,*,*
因此,foo.csv应该是:
ダイバーシティ,15917,17160,-200,名詞,普通名詞,一般,*,*,*,ダイバーシティ,ダイバーシティ-diversity,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,外,*,*,*,*,*,*,体,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,*,*,*,*,*
使用foo.csv中的UniDic CWJ 2.3.0编译MeCab字典时,不会出现"left- or right-id.def may be broken“:
$ /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
/usr/local/lib/unidic/unidic-cwj-2.3.0/pos-id.def is not found. minimum setting is used
reading /home/foo/bar/foo.csv ... 1
emitting double-array: 100% |###########################################|
done!
注: reiwa.33.csv中的值似乎是针对UniDic 2.1.2的。
有关发生left/ right -id.def错误的原因以及如何在matrix.def中交换所有left和right值的详细说明,请参见这篇日文堆栈溢出帖子。
https://stackoverflow.com/questions/66299029
复制相似问题