2017-10-20 9 views
2

私が使用しているコードは次のとおりです。私はデバイス上でどのような文章を使用しても何も印刷しません。シミュレータ上で正常に動作します!NSLinguisticTagger enumerateTagsInRangeはNSLinguisticTagSchemeNameTypeOrLexicalClassのデバイスでは動作しません

- (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はオプションではありません。どうして!? iOSの11

+0

これは失敗したデバイスでこの作業を行うための解決策を見つけたことがありますか?私は同じ問題を発見しました –

答えて

1

とiPhone 6+を使用して

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 

残念ながら、答えはデバイスを変更しました。私のiPhone Xにはこの問題はありません。それは、6世代以上の携帯電話に専用のMLチップがあることが原因である可能性があります。

+0

このクラスは何年も前からありました。 2012年に私のために働いた。 –

+0

@AlbertRenshaw私は同じ問題を..スキームが物理的なデバイス上に "存在しない"理由についてのアイデアは何ですか? (iPhone 6s iOS 11.2) –

+0

@WillVonUllrichが私のために働いています! –

関連する問題