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