首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用UniDic 2.3.0构建MeCab 0.996用户字典时,如何确定左右上下文ID应该是什么?

在使用UniDic 2.3.0构建MeCab 0.996用户字典时,如何确定左右上下文ID应该是什么?
EN

Stack Overflow用户
提问于 2021-02-21 12:01:11
回答 1查看 127关注 0票数 1

我正在尝试构建一个MeCab 0.996用户字典UniDic CWJ 2.3.0在Ubuntu 20.10上使用以下终端命令:

代码语言:javascript
运行
复制
$ /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是:

代码语言:javascript
运行
复制
ダイバーシティ,,,-200,名詞,普通名詞,一般,*,*,*,ダイバーシティ,ダイバーシティ-diversity,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,外,*,*,*,*,*,*,体,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,,,,,

但是我得到了这个错误:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
$ /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文档

代码语言:javascript
运行
复制
/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是:

代码语言:javascript
运行
复制
令和,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应该是什么?有什么解释吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-22 17:44:41

我能在下面找到答案这篇奇塔文章

要确定左侧和右侧上下文ID,请执行以下操作:

分别查看left-id.def和right-id.def文件:

代码语言:javascript
运行
复制
$ 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)的常规外来词名词(例如,ダイバーシティ),值为:

代码语言:javascript
运行
复制
left-id: 15917 名詞,普通名詞,一般,*,*,*,*,*,外,*,*,*,*,*,*

    right-id: 17160 名詞,普通名詞,一般,*,*,*,*,*,外,*,*,*,*,*,*

因此,foo.csv应该是:

代码语言:javascript
运行
复制
ダイバーシティ,15917,17160,-200,名詞,普通名詞,一般,*,*,*,ダイバーシティ,ダイバーシティ-diversity,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,外,*,*,*,*,*,*,体,ダイバーシティ,ダイバーシティ,ダイバーシティ,ダイバーシティ,*,*,*,*,*

使用foo.csv中的UniDic CWJ 2.3.0编译MeCab字典时,不会出现"left- or right-id.def may be broken“:

代码语言:javascript
运行
复制
$ /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值的详细说明,请参见这篇日文堆栈溢出帖子

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66299029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档