【问题标题】:How do I identify the part of speech of a word within a NSString?如何识别 NSString 中单词的词性?
【发布时间】:2012-02-28 08:30:42
【问题描述】:

我目前正在开发的应用程序要求我确定NSString 中单词的词性。

所以基本上有一个库/数据库/类,您可以在 Objective C 中访问它,它允许检查单个单词(以NSString 的形式)是名词、形容词、副词还是动词?

类似的东西:

NSString *foo="cat";

if ([foo wordIsNoun]) {
    //do something
};

在类似但稍微不相关的注释中,是否可以检查两个包含相同词干但不同时态(ask、asking、asked 等)的动词的NSString 是否具有相同的词干?它也将非常有用。

【问题讨论】:

  • 嗯...哇。数据库已经存在了吗?还是您自己编写语言分析工具?顺便说一句,这是一项艰巨的任务。
  • @Almo 绝对是一项艰巨的任务...除非有人已经为您完成了! :)

标签: iphone objective-c ios linguistics


【解决方案1】:

您可以通过NSLinguisticTagger 来做到这一点!我以前从未使用过,但我一起破解了这个:

NSString *str = @"i have a cat";

NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:[NSArray arrayWithObject:NSLinguisticTagSchemeLexicalClass] options:~NSLinguisticTaggerOmitWords];
[tagger setString:str];
[tagger enumerateTagsInRange:NSMakeRange(0, [str length]) 
                      scheme:NSLinguisticTagSchemeLexicalClass 
                     options:~NSLinguisticTaggerOmitWords 
                  usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
                               NSLog(@"found: %@ (%@)", [str substringWithRange:tokenRange], tag);
                              }];
[tagger release];

当你运行它时,它会记录:

found: i (Pronoun)
found: have (Verb)
found: a (Determiner)
found: cat (Noun)

但请注意,NSLinguisticTagger 仅适用于 iOS 5+(和 Mac OS X 10.7+)。

【讨论】:

  • 哇。谢谢。我敢打赌iOS中不存在这样的事情。我很惊讶。
  • @arnauddel。是的,它很整洁!我还没有找到使用它的充分理由,但也许最终会。
  • 谢谢!这正是我所需要的!
  • @DaveDeLong - 我在“iOS5 by Tutorials”一书中写了关于 NSLinguisticTagger 的章节,让我警告你,在 iOS5 中它只适用于英语(计划德语和法语)。更烦人的是,对于像“我有一只猫”这样的句子,它返回的结果还不错,但是我使用的输入却惨遭失败——所以如果你需要 100% 准确的结果,就不要指望它
  • 您甚至可以使用NSLinguisticTagger语法高亮英文文本。我做了一个open source example that you can use
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多