2015-03-27 18 views
7

Używałem zdań ze zdaniami i spotkałem się z dziwnym problemem, takim jak "Jestem głodny" lub "Jestem pijany". Chociaż można by się spodziewać, że "ja" będzie oznaczane jako zaimek, "am" jako czasownik i "głodny" jako przymiotnik, nie są. Raczej wszystkie są oznaczone jako OtherWord.Lingwistyczny tagger niepoprawnie oznaczony jako "OtherWord"

Czy jest coś, co robię nieprawidłowo?

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); 
}]; 

a wyjście jest:

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

Bardzo dziwne, bawię się ze zdaniem - wstawienie "bardzo" powoduje prawidłowe zdanie, wstawienie "nie" nie powoduje wstawienia "niezbyt", ale będzie ... yeiks ... I próbowałem dla języka niemieckiego: niektóre zdania z dwoma słowami nie działają, słowa wydają się działać. (ale czasami nie tak doskonałe, jak tego oczekiwano). Ale to zdecydowanie dziwny problem. – luk2302

+0

I 'my jesteśmy głodne' działa,' on jest głodny' działa, po prostu 'jestem głodny' nie:/używanie przymiotnika" spragniony "działa dla wszystkich trzech – luk2302

+0

@ luk2302 Tak, widząc to samo. Wydaje się, że wstawienie przymiotnika/przysłówka powoduje, że jest on poprawnie oznaczony i jakikolwiek inny zaimek również wydaje się w porządku. – Joshua

Odpowiedz

9

Po quite some time in chat okazało się, że problem:

zdanie nie zawiera wystarczających informacji, aby określić jego język.

W tym celu można albo naprawić:

dodać zdanie demo w wybranym języku po aktualnej zdaniu. To powinno zagwarantować wykrycie preferowanego języka.

LUB

Powiedz osobie, która dodała Jakiego języka używać: dodaj linię

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

przed wywołaniem enumerate. W ten sposób wyraźnie poinformujesz taggera, w jakim języku chcesz umieścić tekst, w tym przypadku englisch (en) jako część języka dominującego w języku łacińskim (Latn).

Jeśli nie znasz tego języka na pewno, może być użyteczne użycie jednej z tych metod tylko jako zwrotu, jeśli słowa zostaną oznaczone jako OtherWord, co oznacza, że ​​nie można wykryć języka.

+0

Super, jeszcze raz dziękuję! – Joshua

+1

Nie ma za co, był to zabawny łamigłówka, aby zagłębić się w nowe rzeczy;) – luk2302

+0

Nie mogę uzyskać żadnego z tych rozwiązań, aby rozwiązać problem. Nadal powraca (OtherWord).Próbowałem nawet z domyślnym zdaniem OP –

Powiązane problemy