NSLinguisticTagger enumerateTagsInRange 在具有 NSLinguisticTagSchemeNameTypeOrLexicalClass 的设备上不起作用

Posted

技术标签:

【中文标题】NSLinguisticTagger enumerateTagsInRange 在具有 NSLinguisticTagSchemeNameTypeOrLexicalClass 的设备上不起作用【英文标题】:NSLinguisticTagger enumerateTagsInRange doesn't work on device with NSLinguisticTagSchemeNameTypeOrLexicalClass 【发布时间】:2018-04-01 21:12:00 【问题描述】:

这是我正在使用的代码,无论我在设备上使用什么句子,它都不会打印任何内容。在模拟器上运行良好!

- (NSMutableArray *)getTagEntries:(NSString *)sentence 
  NSArray<NSLinguisticTagScheme> *tagSchemes = [NSLinguisticTagger availableTagSchemesForLanguage:@"en"];
  NSLinguisticTaggerOptions options = NSLinguisticTaggerJoinNames | NSLinguisticTaggerOmitWhitespace;
  NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagSchemes options:options];

  linguisticTagger.string = sentence;

  __block NSMutableArray *tagEntries = [@[] mutableCopy];
  [linguisticTagger enumerateTagsInRange:NSMakeRange(0, sentence.length) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSLinguisticTag tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) 
    NSString *token = [sentence substringWithRange:tokenRange];
    NSLog(@"%@ -> %@", token, tag);
    [tagEntries addObject:@@"token":token, @"tag":tag];
  ];
  return tagEntries;

当我尝试在我的 iPhone 上打印出可用的方案时,Lexical 不是一个选项。怎么会!?

NSArray<NSLinguisticTagScheme> *availSchemes = [NSLinguisticTagger availableTagSchemesForLanguage:@"en"];
for (NSLinguisticTagScheme scheme in availSchemes) 
  NSLog(@"Tag scheme %@", scheme);

// output:
// Tag scheme Language
// Tag scheme Script
// Tag scheme TokenType

ios 11 上使用 iPhone 6+。

【问题讨论】:

您有没有找到解决方案在它失败的设备上完成这项工作?我发现了同样的问题 【参考方案1】:

不幸的是,答案是更换设备。我的 iPhone X 没有这个问题。这可能是因为 6s 和更新的手机都有专用的 ML 芯片。

【讨论】:

很奇怪,因为这门课已经存在多年了; 2012 年为我工作。 @AlbertRenshaw 我有同样的问题..关于为什么这些方案在物理设备上不“存在”的任何想法? (iPhone 6s iOS 11.2)

以上是关于NSLinguisticTagger enumerateTagsInRange 在具有 NSLinguisticTagSchemeNameTypeOrLexicalClass 的设备上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C:用于识别命名实体的 NSLinguisticTagger

我们如何在 iOS 中制作自定义的 NSLinguisticTagger tagSchemes?

NSLinguisticTagger enumerateTagsInRange 在具有 NSLinguisticTagSchemeNameTypeOrLexicalClass 的设备上不起作用

iOS NSLinguisticTagger 在获取引理词干时总是返回 null

如何在 Mac OSX 上更正 NSLinguisticTagger 函数并出现错误“Type 'String' has no member 'tokenType'”(该函数适用于 iOS)?

enum怎么用?