2013-02-18 7 views
18

Ich habe gerade angefangen zu spielen, um mit NSLinguisticTagger in diesem Blog meinen Code basieren: NSLinguisticTagger @ NSHipster.comObjective-C: NSLinguisticTagger "new york" vs "New York"

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

Als ich diese laufen mit question = @"Weekend in New York", wird "New York" markiert als PlaceName was großartig ist. Aber wenn ich dies mit question = @"Weekend in new york", "new" wird getags als "Adjective" und "york" wird als PlaceName getaggt. Gibt es eine Möglichkeit, dies zu umgehen, so dass "New York" und "new york" beide als PlaceName getaggt werden?

Ich bin völlig neu in dieser linguistischen Sache.

+0

"Wochenende in New York" und "Wochenende in New York" hat eigentlich zwei verschiedene Bedeutungen (York ist auch eine Stadt). Der Tagger wählt den aus, den er für richtig hält, wenn er "Weekend in New York" benutzt. Wahrscheinlich ist Ihre beste Wette, die Rechtschreibung selbst zu korrigieren, wenn das möglich ist. – Daniel

+2

dies ist nicht möglich, aus einer grammatikalischen Sicht "New York" und "New York" sind völlig anders – tkanzakic

+0

Gibt es eine Möglichkeit, Autokorrektur rückwirkend auf eine Zeichenfolge anwenden? Wenn ich zum Beispiel "weekend in new york" auf einem Gerät tippe, wird automatisch "Wochenende in New York" angezeigt, sobald ich nach "york" die Leertaste drücke. –

Antwort

2

Dies wurde bereits in den Kommentaren erwähnt, wollte aber trotzdem darauf hinweisen. NSLinguisticTagger glaubt, dass "New York" und "New York" anders sind - weil sie es sind. Die Hauptstadt N sagt ihm, dass es ein Eigenname ist. Nach meinem Wissen gibt es in NSLinguisticTagger nichts, was dieses Verhalten ändern könnte.

Aber was Sie tun können, ist auf iOS Autokorrektur verlassen. Stellen Sie nur sicher, dass im Textfeld, in dem der Wert eingegeben wird, die Autokorrektur aktiviert ist und "New York" automatisch nach "New York" und ähnlichen Vorkommen korrigiert wird. Wenn die Autokorrektur dies nicht erfasst, würde ich versuchen, eine andere Bibliothek für die linguistische Analyse zu finden.

Die rückwirkende Autokorrektur ist in iOS (bis zu einem gewissen Grad) bereits enthalten, also sollte das gut genug sein, um "New York" nach "New York" zu korrigieren. Wenn Sie den ganzen Satz (d. H. "Wochenende in New York" bis "Wochenende in New York") korrigieren möchten, müssen Sie diese Funktionalität selbst implementieren. Dies sollte nicht sehr schwierig sein, da es nur ein paar einfache Grammatikregeln gibt, denen Sie folgen müssen, und viele Dinge werden von Autokorrektur aufgegriffen.

Ich hoffe, dies hilft, lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

3

Dieses Thema ein wenig weiter gehen. Korrekte Großschreibung von Vor- und Nachname ist eine Voraussetzung für den NSLinguisticTagger Namen zu identifizieren.

Nach mehreren Stunden der Frustration, entschied ich mich, verschiedene Tests mit Großbuchstaben, Kleinbuchstaben und Großbuchstaben zu erstellen.

Die NSLinguisticTagger hatten unterschiedliche Ergebnisse in fast allen Tests

Wenn die NSLinguisticTagger eine Zeichenfolge in aktivierungs-Fall parst fast alle Substantive als personal Tags versehen sind. wtf?

Es war sehr frustrierend.

Die Lektion, die ich teilen möchte, ist, dass der NSLinguistische Tagger die Tags erraten kann, die er auf Wörter setzt, aber am Ende ist es nur eine grammatische Auswertung von Wörtern. Die Auswertung hängt von richtigen Sprachkonstrukten wie der Wortplatzierung und davon ab, ob das Wort großgeschrieben wird oder nicht.

Ich finde es immer noch eine nützliche Klasse, aber die Moral dieser Post ist "Be Proper".

Beim Parsen von Text neigen wir Programmierer dazu, mit Groß- und Kleinbuchstaben zu spielen, um unsere Arbeit zu vereinfachen. Wir können dies immer noch tun, aber nur daran erinnern, dass Wortgehäuse ändert die NSLinguisticTagger Ergebnisse.