2013-02-18 66 views
18

我剛開始NSLinguisticTagger玩弄在此基礎上博客我的代碼:NSLinguisticTagger @ NSHipster.com的Objective-C:NSLinguisticTagger「紐約」與「紐約」

NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; 
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes: [NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options]; 
tagger.string = question; 
[tagger enumerateTagsInRange:NSMakeRange(0, [question length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
NSString *token = [question substringWithRange:tokenRange]; 
NSLog(@"%@: %@", token, tag); }]; 

當我跑這跟question = @"Weekend in New York""New York"被標記爲PlaceName這很棒。但是當我運行question = @"Weekend in new york"時,"new"被標記爲"Adjective""york"被標記爲PlaceName。有沒有什麼辦法可以解決這個問題:"New York""new york"都被標記爲PlaceName

我完全不懂這個語言學的東西。

+0

「紐約週末」和「紐約週末」實際上有兩個不同的含義(約克也是一座城市)。 Tagger在使用「紐約週末」時挑選他認爲合適的人。可能你最好的選擇是自己糾正拼寫,如果可能的話。 – Daniel 2013-02-18 16:09:19

+2

這是不可能的,從語法的角度來看「紐約」和「紐約」是完全不同的 – tkanzakic 2013-02-18 16:09:53

+0

有沒有辦法將自動更正追溯到字符串?例如,如果我在設備上鍵入「紐約週末」,一旦在「約克」之後點擊空格鍵,它將自動更正爲「紐約週末」。 – 2013-02-18 17:33:23

回答

2

這已經在評論中提到過,但仍想指出這一點。 NSLinguisticTagger認爲「紐約」和「紐約」是不同的 - 因爲它們是。首都N告訴它它是一個專有名詞。據我所知,在NSLinguisticTagger中沒有任何東西可以改變這種行爲。

但是,你可以做的是依靠iOS自動更正。只要確保輸入值的文本字段已啓用自動更正,並且它應自動將「紐約」更正爲「紐約」以及類似事件。如果自動更正無法解決這個問題,那麼我會嘗試爲語言分析找到其他一些庫。

追溯自動更正已包含在iOS中(在某種程度上),所以應該足以將「紐約」更正爲「紐約」。如果您想更正整句(即「紐約週末」到「紐約週末」),您需要自行實施該功能。這不應該是非常困難的,因爲您必須遵循一些簡單的語法規則,並且很多東西都會被自動更正。

希望這可以幫助,讓我知道如果你需要更多的信息。

3

讓這個話題更進一步。 對於NSLinguisticTagger來標識名稱,正確的名字和姓氏大寫是要求

幾個小時的挫折後,我決定創建一個大寫,小寫和大寫情況的話各種測試。

的NSLinguisticTagger曾在幾乎所有的測試

當NSLinguisticTagger解析在資本情況的字符串幾乎所有的名詞被標記爲personalName不同的結果。跆拳道?

這是非常令人沮喪的。

我想分享的一點是,NSLinguistic標記器可以猜測它放置在單詞上的標籤,但最終它只是對單詞的語法評估。評估依賴於正確的語言結構,如單詞放置和單詞是否大寫。

我仍然覺得它是一個有用的類,但這篇文章的道德是「是適當的」

解析文本時,有時我們程序員傾向於使用大寫和小寫來簡化我們的工作。我們仍然可以做到這一點,但只是要記住,文字套管確實會改變NSLinguisticTagger結果