2015-03-27 14 views
7

Ich habe NSLinguisticTagger mit Sätzen verwendet und habe ein seltsames Problem mit Sätzen wie "Ich bin hungrig" oder "Ich bin betrunken" konfrontiert. Während man erwarten würde, dass "ich" als Pronomen, "am" als Verb und "hungrig" als Adjektiv gekennzeichnet werden, sind sie es nicht. Sie sind alle als OtherWord markiert.Linguistische Tagger fälschlicherweise als "OtherWord" gekennzeichnet

Gibt es etwas, das ich falsch mache?

NSString *input = @"I am hungry"; 
NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace; 
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:[NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options]; 
tagger.string = input; 

[tagger enumerateTagsInRange:NSMakeRange(0, input.length) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
    NSString *token = [input substringWithRange:tokenRange]; 
    NSString *lemma = [tagger tagAtIndex:tokenRange.location 
            scheme:NSLinguisticTagSchemeLemma 
           tokenRange: NULL 
          sentenceRange:NULL]; 
    NSLog(@"%@ (%@) : %@\n", token, lemma, tag); 
}]; 

Und der Ausgang ist:

I ((null)) : OtherWord 
am ((null)) : OtherWord 
hungry ((null)) : OtherWord 
+0

Sehr seltsam, ich spiele mit dem Satz - Einfügen eines 'sehr' Ergebnisse in einem gültigen Satz, einfügen ein' nicht' nicht, Einfügen 'nicht sehr' noch wird ... yeiks ... Und ich habe es versucht für Deutsch: einige zwei Wörter Sätze arbeiten nicht, Wörter scheinen jedoch zu arbeiten. (manchmal nicht so perfekt wie erwartet). Aber es ist definitiv ein seltsames Problem. – luk2302

+0

Und 'wir sind hungrig' arbeitet,' er ist hungrig' arbeitet, nur 'ich bin hungrig' nicht:/mit dem Adjektiv' durstig' arbeitet für alle drei – luk2302

+0

@ luk2302 Ja, das gleiche zu sehen. Scheint, dass das Einfügen eines Adjektivs/Adverbs dazu führt, dass es korrekt markiert wird, und jedes andere Pronomen scheint auch in Ordnung zu sein. – Joshua

Antwort

9

Nach quite some time in chat wir das Problem gefunden:

Der Satz nicht genügend Informationen enthält, um seine Sprache zu bestimmen.

Um dies zu beheben, können Sie entweder:

einen Demo-Satz in der Sprache Ihrer Wahl nach dem tatsächlichen Satz hinzuzufügen. Das sollte garantieren, dass Ihre bevorzugte Sprache erkannt wird.

ODER

Sagen Sie der Tagger welcher Sprache zu verwenden: fügen Sie die Zeile

[tagger setOrthography:[NSOrthography orthographyWithDominantScript:@"Latn" languageMap:@{@"Latn" : @[@"en"]}] range:NSMakeRange(0, input.length)]; 

vor dem enumerate Anruf. Auf diese Weise teilen Sie dem Tagger explizit mit, in welcher Sprache der Text sein soll, in diesem Fall englisch (en) als Teil der lateinisch dominanten Sprache (Latn).

Wenn Sie die Sprache nicht sicher kennen, kann es nützlich sein, eine dieser Methoden nur als Fallback zu verwenden, wenn die Wörter als OtherWord markiert werden, was bedeutet, dass die Sprache nicht gefunden werden konnte.

+0

Super, danke nochmal! – Joshua

+1

Gern geschehen, war ein Spaß Brain Teaser, um tief in neue Dinge zu schauen;) – luk2302

+0

Ich kann nicht scheinen, eine dieser Lösungen zu bekommen, um das Problem zu beheben. Es kehrt immer noch zurück (OtherWord).Ich habe es sogar mit dem Standardsatz im OP versucht –