2013-02-18 7 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

「ニューヨークの週末」と「ニューヨークの週末」は、実際には2つの異なる意味を持ちます(ヨークも都市です)。 Taggerは、 "New Yorkの週末"を使うときに正しいと思うものを選びます。おそらく、可能ならば、あなた自身のスペルを訂正することが最善の方法でしょう。 – Daniel

+2

これはできません。文法的には「ニューヨーク」と「ニューヨーク」はまったく異なります – tkanzakic

+0

文字列に自動修正を遡及的に適用する方法はありますか?たとえば、デバイスに「weekend in new york」と入力すると、「york」の後にスペースバーが表示されたら、「Weekend in New York」に自動修正されます。 –

答えて

2

これは既にコメントで言及されていますが、とにかくこれを指摘したいと思います。 NSLinguisticTaggerは、「ニューヨーク」と「ニューヨーク」は異なっていると考えています。首都Nはそれが固有名詞であることを伝えます。私の知る限り、NSLinguisticTaggerにはこの動作を変更するものはありません。

しかし、あなたができることは、iOSの自動修正に依存しています。値が入力されているテキストフィールドに自動修正機能が有効になっていることを確認し、自動的に "New York"を "New York"に修正する必要があります。自動修正がこれをキャッチしない場合、私は言語分析のために他のライブラリを探します。

遡及的自動修正は、iOSに(特定の拡張まで)既に含まれているため、「ニューヨーク」を「ニューヨーク」に修正するのに十分なはずです。文章全体(ニューヨークの週末からニューヨークの週末まで)を修正したい場合は、その機能を自分で実装する必要があります。あなたが従わなければならない簡単な文法規則がいくつかあり、多くのことが自動修正によって拾われるので、これは非常に難しいことではありません。

希望する場合は、詳細が必要な場合はお知らせください。

3

このトピックをもう少し詳しく検討してください。 NSLinguisticTaggerが名前を識別するためには、姓と名義の正確な大文字と小文字の間違いが必要です。

私は数時間の不満の後、を大文字、小文字、大文字と小文字の単語で作成することにしました。

NSLinguisticTaggerは、ほとんどすべてのテストNSLinguisticTaggerはほぼすべての名詞はpersonalNameとしてタグ付けされた大文字の場合に文字列を解析

で異なる結果が得られました。 wtf?

非常にイライラしました。

私が教えてくれるレッスンは、NSLinguisticタグが単語に付けるタグを推測できることですが、最終的には単語の文法上の評価に過ぎません。評価は、単語の配置や単語が大文字であるかどうかなどの適切な言語構成に依存します。

私はまだそれを有用なクラスとしていますが、この投稿の道徳は"Be Proper"です。

テキストを解析するとき、私たちのプログラマーは時々、大文字と小文字を使用して作業を単純化する傾向があります。私たちはまだこれを行うことができますが、というのは、NSHinguisticTaggerの結果を変更するのはです。