在iOS上选择MeCab Japanese tokenizer?

ars*_*ius 3 tokenize cjk ios mecab

我在https://github.com/FLCLjp/iPhone-libmecab上找到了用于MeCab的iPhone库.我无法将其标记为所有可能的单词.具体来说,我不能将"吉本兴业"分为两部分"吉本"和"兴业".我可以使用任何选项来解决这个问题吗?iPhone库没有暴露任何东西,但它在objective-c包装器下使用C++.我假设必须有某种设置我可以更改以提供更细粒度的控制,但我不知道从哪里开始.

顺便说一句,如果有人想要标记这可能是合适的'mecab'.我还不允许创建新标签.

更新:iOS库调用libmecab.cpp中定义的mecab_sparse_tonode2().如果有人能指出我在该文件上的一些英文文档,那就足够了.

jog*_*pan 10

这里没有特定于iOS的内容.您使用mecab(可能是ipadic)的词典包含公司名称吉本兴业的条目.虽然名称的两个部分也被列为单独的名词,但mecab强烈希望将复合名称标记为一个单词.

Mecab缺乏一种功能,允许用户选择是否应将化合物分成几部分.请注意,这样的功能通常很难实现,因为不是每个人都同意哪些化合物可以分开哪些化合物不能分开.例如容容者是由容疑和者组成的化合物吗?从纯粹的形态学角度来看也许是的,但对于大多数实际应用可能没有.

如果你有一个你想要分割的化合物列表,快速解决方法是为它们所包含的部分创建用户字典,并使mecab除了使用主字典之外还使用它.

这里是如何做到这一点的日语文档在这里.对于您的特定示例,它将涉及以下步骤.

  1. 制作一个包含两个条目的用户词典,一个用于吉本,另一个用于兴业:

    ??,,,100,??,????,??,?,*,*,????,????,????
    ??,,,100,??,??,*,*,*,*,?????,?????,?????
    
    Run Code Online (Sandbox Code Playgroud)

    我怀疑这两个条目已经存在于默认字典中,但是通过将它们添加到用户字典中并指定相对较低的特异性指标(我用于100两者 - 较低的,更可能被分割),你可以得到mecab倾向于更喜欢整个部分.

  2. 编译用户词典:

    $> $MECAB/libexec/mecab/mecab-dict-index  -d /usr/lib64/mecab/dic/ipadic -u mydic.dic -f utf-8 -t utf-8 ./mydic
    
    Run Code Online (Sandbox Code Playgroud)

    您可能需要调整命令.以上假设:

    1. Mecab是从源头安装的$MECAB.如果您使用由软件包管理器安装的mecab,则可能很难找到该mecab-dict-index工具.从源代码安装最佳.

    2. 默认字典在/usr/lib64/mecab/dict/ipadic.这不是mecab包的一部分; 它是一个单独的包(例如这个),你也可能很难找到它.

    3. mydic是在步骤1中创建的用户词典mydic.dic的名称.您将获得的编译词典的名称作为输出(不需要存在).

    4. 系统字典(-t选项)和用户字典(-f选项)都以UTF-8编码.这可能是错误的,在这种情况下,当您使用mecab时,您将收到错误消息.

  3. 修改mecab配置.在系统范围的安装中,这是一个名为/usr/lib64/mecab/dic/ipadic/dicrc或类似的文件.在您的情况下,它可能位于其他地方.将以下行添加到配置文件的末尾:

    userdic = home/myhome/mydic.dic
    
    Run Code Online (Sandbox Code Playgroud)

    确保上面编译的字典的绝对路径是正确的.

如果你然后针对你的输入运行mecab,它会将化合物分成它的部分(我测试了它,在Linux系统上使用mecab 0.994).

更彻底的解决方法是获取默认字典的源并手动删除要拆分的所有复合名词,然后重新编译字典.作为一般说法,在较长时间内在生产模式下使用CJK标记器进行严肃应用通常需要定期进行一定量的字典维护(添加/删除条目).