我刚开始根据这个博客的代码来研究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); }];

当我使用question = @"Weekend in New York"运行它时,"New York"被标记为PlaceName,这很棒。但是,当我使用question = @"Weekend in new york"运行它时,"new"被标记为"Adjective",而"york"被标记为PlaceName。有什么办法可以解决这个问题,使得"New York""new york"都被标记为PlaceName

我对这种语言学是完全陌生的。

最佳答案

使这个话题更进一步。 名字和姓氏的正确大写是NSLinguisticTagger标识名称的要求。

经过数小时的挫折,我决定使用大写,小写和大写字母来创建各种测试。

NSLinguisticTagger在几乎所有测试中都有不同的结果

当NSLinguisticTagger以大写形式解析字符串时,几乎所有名词都被标记为personalName 。 wtf?

真令人沮丧。

我想分享的教训是,NSL语言标记器可以猜测它放置在单词上的标记,但最终,它只是单词的语法评估。评估取决于适当的语言结构,例如单词放置以及单词是否大写。

我仍然发现它是一个有用的类,但是这篇文章的主题是“Be Proper”

有时,在解析文本时,我们的程序员倾向于使用大写和小写来简化我们的工作。我们仍然可以执行此操作,但是请记住,单词大小写确实会更改NSLinguisticTagger结果

关于ios - Objective-C:NSLinguisticTagger “new york”和 “New York”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14938867/

10-12 14:32