4

我在这里使用代码将文本拆分为单个单词,它适用于我尝试过的所有语言,除了日语和中文。

有没有办法可以调整代码以正确标记日语和中文?文档说支持这些语言,但它似乎并没有在适当的地方破坏单词。例如,当它标记“新しい”时,它将它分成两个词“新し”和“い”,而应该是一个(我不会说日语,所以我不知道这是否真的正确,但是样本我说过这些都应该是一个词)。其他时候它会跳过单词。

我确实在使用 kCFStringTokenizerUnitWordBoundary 时尝试创建中文和日文语言环境。结果有所改善,但对于我正在做的事情仍然不够好(向词汇添加超链接)。

我知道其他一些可用的标记器,但如果我能坚持核心基础,我宁愿避免使用它们。

[更新]一段时间以来,我们最终使用 mecab 和特定的日语用户词典,现在已经转移到仅在服务器端完成所有这些工作。那里可能并不完美,但我们在所有平台上都有一致的结果。

4

2 回答 2

3

如果你知道你正在解析一种特定的语言,你应该CFStringTokenzier用正确的CFLocale(或者至少是来自 的猜测CFStringTokenizerCopyBestStringLanguage)来创建你的,并使用kCFStringTokenizerUnitWordBoundary.

不幸的是,中文和日文文本的完美分词仍然是一个开放而复杂的问题,因此您使用的任何分词库都会有一些失败。对于日语,在内部CFStringTokenizer使用MeCab库和ICU 的边界分析(仅在使用时kCFStringTokenizerUnitWordBoundary,这就是为什么你会在没有它的情况下使用“新しい”得到一个有趣的休息)。

于 2011-11-27T11:28:20.437 回答
2

也看看 NSLinguisticTagger。但它本身不会给你更多。

说实话,这两种语言(以及其他一些语言)真的很难以编程方式准确地标记化。

您还应该看到 LSM 上的 WWDC 视频。潜在语义映射。它们涵盖了词干和引理的主题。这是更准确地确定如何有意义地标记化的艺术和科学。

你想做的事很难。仅寻找单词边界并不能为您提供足够的上下文来传达准确的含义。它需要查看上下文并识别不应该被单词破坏的习语和短语。(更不用说语法形式了)

之后再次查看可用的库,然后买一本关于 Python NLTK 的书,了解你真正需要了解的有关 NLP 的知识,从而了解你真正想要追求的程度。

较大的文本本身会产生更好的结果。没有对错别字和语法错误的解释。在分析隐含上下文中驱动逻辑所需的大部分上下文不是直接写成一个词。你可以建立规则并训练它。

日语特别难学,许多在日本以外开发的图书馆都跟不上。您需要一些语言知识才能知道分析是否有效。如果没有适当的背景,即使是日本本土人也很难进行自然分析。在常见的场景中,该语言呈现出两个可相互理解的正确单词边界。

打个比方,这就像在正则表达式中进行大量的向前看和向后看。

于 2014-09-09T04:32:07.997 回答