Objective c 如何将CFStringTokenizer与中文和日文一起使用?

Objective c 如何将CFStringTokenizer与中文和日文一起使用?,objective-c,iphone,tokenize,cjk,text-segmentation,Objective C,Iphone,Tokenize,Cjk,Text Segmentation,我正在使用代码将文本拆分为单个单词,它对我尝试过的所有语言都非常有效,除了日语和汉语 有没有一种方法可以调整代码以正确地标记日语和汉语?文档中说这些语言是受支持的,但它似乎没有在适当的地方破坏单词。例如,当它标记为“新しい" 它把它分成两个词“新し“和”い“什么时候应该是一个词(我不会说日语,所以我不知道这是否真的正确,但我的样本说这些词应该都是一个词)。其他时候它会跳过单词 在使用kCFStringTokenizerUnitWordBoundary时,我确实尝试过创建中文和日文语言环境。结果有

我正在使用代码将文本拆分为单个单词,它对我尝试过的所有语言都非常有效,除了日语和汉语

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

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

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


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

如果您知道正在解析特定语言,您应该创建
cfstringtoknzier
使用正确的
CFLocale
(或者至少是从
CFStringTokenizerCopyBestStringLanguage
中猜测)并使用
kCFStringTokenizerUnitWordBoundary


不幸的是,中文和日语文本的完美分词仍然是一个开放而复杂的问题,因此您使用的任何分词库都会有一些缺陷。对于日语,
CFStringTokenizer
在内部和外部使用该库(仅当使用
kCFStringTokenizerUnitWordBoundary
时,这就是为什么您与新しい“没有它)。

还可以看看NSLinguistics Tagger。 但它本身不会给你更多

说实话,这两种语言(以及其他一些语言)很难在编程上准确地标记

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

你想做的事情很难。仅仅找到单词的边界并不能给你足够的上下文来传达准确的意思。它需要查看上下文,还需要识别不应该被单词打断的习语和短语。(更不用说语法形式了)

在此之后,请再次查看可用的库,然后阅读一本关于Python NLTK的书,了解您真正需要了解的关于NLP的内容,以了解您到底有多希望实现这一点

更大的文本本身会产生更好的结果。没有考虑到拼写错误和糟糕的语法。在分析中,很多上下文需要驱动逻辑,而不是直接以单词形式编写。你需要建立规则并训练内容

日语是一门特别难学的语言,许多在日本以外开发的图书馆都离得不近。你需要掌握某种语言的知识才能知道分析是否有效。即使是日本本土的人,如果没有适当的上下文,也很难进行自然分析。在一些常见的情况下,这种语言会相互呈现两种语言清晰正确的单词边界


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

谢谢你的回答,123。正如我在原始问题中提到的,我确实尝试过这样设置区域设置,并使用kCFStringTokenizerUnitWordBoundary,但结果还不可接受。我正在根据返回的内容检查我的结果我们的服务器在python下实际使用mecab,这让我感到很困惑。我希望我可以调整一些进一步的选项。你有什么“尚不可接受”的例子吗“?
CFStringTokenizer
不公开任何底层MeCab/ICU API,因此您最好将其编译并与应用程序捆绑。以下是一个示例:”歩き 続けて いく うち に" 从服务器返回为“歩き" "続けて" "いく" "うち" "に,但使用CFStringTokenizer続けて“更改为”続け“和”て昨天我开始考虑只使用MeCab本身。我可能没有其他选择。