2

NSLinguisticTagger を使用して文中の動詞を分離しようとしていますが、コードが iOS プログラムと MacOS プログラムのどちらで実行されるかによって出力が異なるという問題に遭遇しました。

私のコードは次のとおりです。

NSString* text = @"The person is a 50 year old gentleman with a book who presents us with a conundrum.";
NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames;
NSLinguisticTagger* tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[NSLinguisticTagSchemeNameTypeOrLexicalClass]
                                                                    options:options];
tagger.string = text;
[tagger enumerateTagsInRange:NSMakeRange(0, [tagger.string length])
                      scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass
                     options:options
                  usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
                      NSString *token = [text substringWithRange:tokenRange];
                      NSLog(@"%@: %@", token, tag);
                  }];

このコード スニペットをOSXプログラムで実行すると、次の出力が正しく得られます ( 「presents」は動詞として正しく識別されます)。

[                    AppDelegate (0x101b0bcb0)]: The: Determiner
[                    AppDelegate (0x101b0bcb0)]: person: Noun
[                    AppDelegate (0x101b0bcb0)]: is: Verb
[                    AppDelegate (0x101b0bcb0)]: a: Determiner
[                    AppDelegate (0x101b0bcb0)]: 50: Number
[                    AppDelegate (0x101b0bcb0)]: year: Noun
[                    AppDelegate (0x101b0bcb0)]: old: Adjective
[                    AppDelegate (0x101b0bcb0)]: gentleman: Noun
[                    AppDelegate (0x101b0bcb0)]: with: Preposition
[                    AppDelegate (0x101b0bcb0)]: a: Determiner
[                    AppDelegate (0x101b0bcb0)]: book: Noun
[                    AppDelegate (0x101b0bcb0)]: who: Pronoun
[                    AppDelegate (0x101b0bcb0)]: presents: Verb
[                    AppDelegate (0x101b0bcb0)]: us: Pronoun
[                    AppDelegate (0x101b0bcb0)]: with: Preposition
[                    AppDelegate (0x101b0bcb0)]: a: Determiner
[                    AppDelegate (0x101b0bcb0)]: conundrum: Noun

ただし、iOSプログラムでまったく同じコード ブロックを実行すると、次の出力が得られます ( 「presents」は名詞として誤って識別されます)。

[                      AppDelegate (0x8d2f000)]: The: Determiner
[                      AppDelegate (0x8d2f000)]: person: Noun
[                      AppDelegate (0x8d2f000)]: is: Verb
[                      AppDelegate (0x8d2f000)]: a: Determiner
[                      AppDelegate (0x8d2f000)]: 50: Number
[                      AppDelegate (0x8d2f000)]: year: Noun
[                      AppDelegate (0x8d2f000)]: old: Adjective
[                      AppDelegate (0x8d2f000)]: gentleman: Noun
[                      AppDelegate (0x8d2f000)]: with: Preposition
[                      AppDelegate (0x8d2f000)]: a: Determiner
[                      AppDelegate (0x8d2f000)]: book: Noun
[                      AppDelegate (0x8d2f000)]: who: Pronoun
[                      AppDelegate (0x8d2f000)]: presents: Noun
[                      AppDelegate (0x8d2f000)]: us: Pronoun
[                      AppDelegate (0x8d2f000)]: with: Preposition
[                      AppDelegate (0x8d2f000)]: a: Determiner
[                      AppDelegate (0x8d2f000)]: conundrum: Noun

さまざまな出力が得られる理由と、iOSプログラムがプレゼントを動詞として正しく識別する方法を知っている人はいますか?

4

1 に答える 1

2

タガーは確率論的です。つまり、常にエラーを起こします。iOS デバイスのリソースが限られているため、基礎となる言語モデルは OS X バージョンよりも正確ではありません。より高い精度が必要な場合は、ルールベースのパーサーを使用してください。ただし、あいまいさに対処する必要があります。

于 2013-12-28T15:15:20.000 に答える