在iOS上选择MeCab Japanese tokenizer?

时间:2013-02-04 15:35:14

标签: ios tokenize cjk mecab

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

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

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

1 个答案:

答案 0 :(得分:10)

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

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

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

有关于如何执行此操作的日语文档here。对于您的特定示例,它将涉及以下步骤。

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

    吉本,,,100,名詞,固有名詞,人名,名,*,*,よしもと,ヨシモト,ヨシモト
    興業,,,100,名詞,一般,*,*,*,*,こうぎょう,コウギョウ,コウギョウ
    

    我怀疑这两个条目已经存在于默认字典中,但是通过将它们添加到用户字典并指定相对较低的特异性指标(我已经使用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
    

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

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

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

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

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

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

    userdic = home/myhome/mydic.dic
    

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

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

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