2012-02-06 7 views
20

Ứng dụng tôi hiện đang làm việc yêu cầu tôi xác định phần lời nói của một từ trong số NSString. Vì vậy, về cơ bản là có một thư viện/cơ sở dữ liệu/lớp mà bạn có thể truy cập trong Objective C cho phép một kiểm tra nếu một từ duy nhất (dưới dạng NSString) là danh từ, tính từ, trạng từ hoặc động từ ?Làm cách nào để xác định một phần của lời nói của một từ trong một NSString?

cái gì đó dọc theo dòng:

NSString *foo="cat"; 

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

Trên một lưu ý tương tự nhưng hơi không liên quan, là nó có thể để kiểm tra xem hai NSString động từ có chứa các gốc tương tự nhưng khác nhau căng thẳng (yêu cầu, yêu cầu, hỏi, vv) có cùng gốc không? Nó sẽ rất hữu ích là tốt.

+2

um ... woa. Cơ sở dữ liệu đã có sẵn chưa? Hay bạn đang tự viết công cụ phân tích ngôn ngữ? Đó là một nhiệm vụ quái dị, BTW. – Almo

+4

@Almo chắc chắn là một công việc quái dị ... trừ khi ai đó đã làm nó cho bạn rồi! :) –

Trả lời

61

Bạn có thể thực hiện việc này với NSLinguisticTagger! Tôi chưa bao giờ sử dụng một trước đó, nhưng tôi bị hack này với nhau:

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

Khi bạn chạy này, nó có thể ghi:

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

Lưu ý, tuy nhiên, NSLinguisticTagger chỉ có sẵn trên iOS 5+ (và Mac OS X 10.7+).

+1

Woah. Cảm ơn. Tôi đã đặt cược rằng một thứ như vậy không tồn tại trong iOS. Tôi ngạc nhiên. –

+0

@arnauddel. vâng, nó khá gọn gàng! Tôi chưa tìm được lý do chính đáng để sử dụng nó, nhưng có thể cuối cùng. –

+0

Woa, tuyệt. năm – Almo