Ios 目标C:NSLinguistics Tagger“;“纽约”;vs";“纽约”;
我刚开始玩Ios 目标C:NSLinguistics Tagger“;“纽约”;vs";“纽约”;,ios,objective-c,ios5,Ios,Objective C,Ios5,我刚开始玩nsLinguagistTagger,我的代码基于这个博客: 当我用question=@“纽约周末”运行此程序时,“纽约”被标记为PlaceName,这很好。但是当我用question=@“纽约周末”运行此程序时,“new”被标记为“形容词”,“york”被标记为地名。有没有办法绕过这个问题,使得“纽约”和“纽约”都被标记为地名 我对语言学一无所知。评论中已经提到了这一点,但我还是想指出这一点。语言学家塔格认为,“纽约”和“纽约”是不同的——因为它们是不同的。大写N表示它是一个专有名词
nsLinguagistTagger
,我的代码基于这个博客:
当我用question=@“纽约周末”
运行此程序时,“纽约”
被标记为PlaceName
,这很好。但是当我用question=@“纽约周末”
运行此程序时,“new”
被标记为“形容词”
,“york”
被标记为地名。有没有办法绕过这个问题,使得“纽约”
和“纽约”
都被标记为地名
我对语言学一无所知。评论中已经提到了这一点,但我还是想指出这一点。语言学家塔格认为,“纽约”和“纽约”是不同的——因为它们是不同的。大写N表示它是一个专有名词。据我所知,在NSLinguisticTagger中没有任何东西可以改变这种行为
但是,您可以依靠iOS自动更正。只需确保输入值的文本字段已启用自动更正功能,并应自动将“new york”更正为“new york”,以及类似情况。如果“自动更正”无法捕捉到这一点,那么我将尝试寻找其他用于语言分析的库
iOS中已经包含了追溯自动更正功能(在一定程度上),因此应该足以将“纽约”更正为“纽约”。如果您想将整个句子(即“纽约周末”改为“纽约周末”),您需要自己实现该功能。这应该不会太难,因为只有一些简单的语法规则是你必须遵循的,而且很多东西都会通过自动更正得到
希望这对您有所帮助,如果您需要更多信息,请告诉我。进一步了解此主题名字和姓氏的大小写正确是NSLinguagistTagger识别姓名的一项要求
在经历了几个小时的挫折之后,我决定用大写、小写和大写的单词创建各种测试
在几乎所有的测试中,NSLinguagistTagger的结果都不一样
当NSLinguagistTagger以大写字母分析字符串时,几乎所有名词都标记为personalName。wtf
这非常令人沮丧
我想和大家分享的经验是,NSLanguageTagger可以猜测它放在单词上的标记,但最终它只是对单词的语法评估。评估取决于适当的语言结构,例如单词的位置以及单词是否大写
我仍然觉得它是一门有用的课程,但这篇文章的寓意是“要得体”
在解析文本时,有时我们程序员倾向于使用大写和小写来简化我们的工作。我们仍然可以这样做,但是请记住,单词大小写确实会改变NSLinguagistTagger的结果。“纽约周末”和“纽约周末”实际上有两种不同的含义(纽约也是一个城市)。贴标签的人在使用“纽约周末”时会选择他认为正确的一个。如果可能的话,你最好的办法就是自己更正拼写。这是不可能的,从语法的角度来看,“纽约”和“纽约”是完全不同的。有没有一种方法可以对字符串进行自动更正?例如,如果我在设备上键入“weekend in new york”,当我在“york”后点击空格键时,它会自动更正为“weekend in new york”。在我的设备上,它会自动执行此操作。。截图:,但我想这可能只是在英文键盘上。。也许检查一下“纽约周末”是否有效,如果有效,你可能会通过编程强制所有CAP。请看下面我的回答,我试图总结已经提到的内容,并添加一些我自己的见解。
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); }];