2012-02-06 16 views
20

Aplikacja, nad którą aktualnie pracuję, wymaga ode mnie określenia części mowy słowa w NSString.Jak rozpoznać część słowa w słowie NSString?

Więc w zasadzie istnieje biblioteka/baza danych/klasa, do której można uzyskać dostęp w Objective C, który pozwala sprawdzić, czy pojedyncze słowo (w postaci NSString) jest rzeczownikiem, przymiotnikiem, przysłówkiem lub czasownikiem ?

Coś wzdłuż linii:

NSString *foo="cat"; 

if ([foo wordIsNoun]) { 
    //do something 
}; 

na podobnym ale nieco niepowiązanych uwaga, to jest możliwe, aby sprawdzić, czy dwa NSString zawierające czasowniki tej samej łodydze, ale różni się napięta (zapytać, prosząc, poprosił, etc) mają ten sam rdzeń? Byłoby to również bardzo przydatne.

+2

um ... woa. Czy baza danych już tam jest? Czy sam piszesz narzędzie do analizy języka? To potworne zadanie, BTW. – Almo

+4

@Almo zdecydowanie jest potwornym zadaniem ... chyba, że ​​ktoś już to zrobił! :) –

Odpowiedz

61

Możesz to zrobić z NSLinguisticTagger! Nigdy nie używany jeden wcześniej, ale tym razem hacked:

NSString *str = @"i have a cat"; 

NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:[NSArray arrayWithObject:NSLinguisticTagSchemeLexicalClass] options:~NSLinguisticTaggerOmitWords]; 
[tagger setString:str]; 
[tagger enumerateTagsInRange:NSMakeRange(0, [str length]) 
         scheme:NSLinguisticTagSchemeLexicalClass 
        options:~NSLinguisticTaggerOmitWords 
        usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
           NSLog(@"found: %@ (%@)", [str substringWithRange:tokenRange], tag); 
           }]; 
[tagger release]; 

Po uruchomieniu tego, że kłody:

found: i (Pronoun) 
found: have (Verb) 
found: a (Determiner) 
found: cat (Noun) 

Należy jednak pamiętać, że NSLinguisticTagger jest dostępna tylko na iOS 5+ (i Mac OS X 10.7+).

+1

Woah. Dzięki. Założę się, że takie rzeczy nie istniały w iOS. Jestem zaskoczony. –

+0

@arnauddel. tak, jest całkiem schludny! Nie znalazłem dobrego powodu, aby go jeszcze użyć, ale może w końcu. –

+0

Woa, spoko. pięć – Almo

Powiązane problemy