Objective-C:NSLinguisticTagger"纽约"vs"纽约"

Aya*_*aka 18 objective-c ios ios5

我刚刚开始在NSLinguisticTagger我的博客上使用我的代码:NSLinguisticTagger @ NSHipster.com

NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames;
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes: [NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options];
tagger.string = question;
[tagger enumerateTagsInRange:NSMakeRange(0, [question length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
NSString *token = [question substringWithRange:tokenRange];
NSLog(@"%@: %@", token, tag); }];
Run Code Online (Sandbox Code Playgroud)

当我运行它时question = @"Weekend in New York","New York"标记为PlaceName哪个是伟大的.但是,当我跑这跟question = @"Weekend in new york","new"被标记为"Adjective""york"被标记为PlaceName.有没有办法解决这个问题,"New York"并且"new york"两者都被标记为PlaceName

我对这种语言学事物完全陌生.

fut*_*216 2

评论中已经提到了这一点,但无论如何还是想指出这一点。NSLinguisticTagger 认为“New York”和“new york”是不同的——因为它们本来就是不同的。大写的 N 告诉它它是一个专有名词。据我所知,NSLinguisticTagger 中没有任何内容可以改变这种行为。

但是,您能做的就是依靠 iOS 自动更正。只需确保输入值的文本字段已启用自动更正,并且它应该自动将“纽约”更正为“纽约”,以及类似的情况。如果自动更正没有发现这一点,那么我会尝试寻找其他一些库进行语言分析。

iOS 中已经包含了追溯自动更正功能(在一定程度上),因此应该足以将“new york”更正为“New York”。如果您想将整个句子更正(即“纽约的周末”为“纽约的周末”),您需要自己实现该功能。这应该不是很困难,因为您必须遵循一些简单的语法规则,并且自动更正会拾取许多内容。

希望这有帮助,如果您需要更多信息,请告诉我。