【问题标题】:Objective-C: NSLinguisticTagger "new york" vs "New York"Objective-C: NSLinguisticTagger "new york" vs "New York"
【发布时间】:2013-02-18 14:43:00
【问题描述】:

我刚刚开始使用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

我对这门语言学的东西完全陌生。

【问题讨论】:

  • “纽约周末”和“纽约周末”实际上有两种不同的含义(约克也是一座城市)。使用“纽约周末”时,Tagger 会选择他认为正确的那个。如果可能的话,最好的办法是自己纠正拼写。
  • 这是不可能的,从语法上看“new york”和“New York”是完全不同的
  • 有没有办法将自动更正追溯应用于字符串?例如,如果我在设备上输入“weekend in new york”,一旦我在“york”后按空格键,它就会自动更正为“Weekend in New York”。
  • 在我的设备上它会自动执行此操作.. 屏幕截图:i.imgur.com/rL2yC6H.png,但我想这可能只是在英文键盘上.. 也许检查“纽约周末”是否有效,如果可以的话可能以编程方式强制全部大写。
  • 请看下面我的回答,我试图总结已经提到的内容并添加一些我自己的见解。

标签: ios objective-c ios5


【解决方案1】:

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

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

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

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

这很令人沮丧。

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

我仍然发现它是一个有用的课程,但这篇文章的寓意是“正确”

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

【讨论】:

    【解决方案2】:

    这在 cmets 中已经提到过,但还是想指出这一点。 NSLinguisticTagger 认为“New York”和“new york”是不同的——因为它们是不同的。大写 N 表示它是专有名词。据我所知,NSLinguisticTagger 中没有任何东西可以改变这种行为。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2020-09-03
      相关资源
      最近更新 更多