Ich habe ein kleines Problem mit der Kerndatenanwendung, die ich gerade schreibe. Ich habe zwei verschiedene Modelle, Kontexte und permanente Speicher. Einer ist für meine App-Daten, der andere ist für eine Website mit relevanten Infos zu mir.Übereinstimmen einer ungefähren Zeichenfolge in einem Core Data Store
Die meiste Zeit, ich genau einen Datensatz von meiner App zu einem anderen Datensatz aus der anderen Quelle übereinstimmen. Manchmal muss ich jedoch auf einen unscharfen String-Abgleich zurückgreifen, um die beiden Datensätze zu verknüpfen. Ich versuche Titel zu finden. Mein lokaler Titel könnte die (aus) sein "The French Idealist is in your pensée"
und der Remote-Songtitel "01 - 10 - French idealist in in you're pensee, The (dub remix, feat. DJ Objective-C)"
Ich suche Stack-Überlauf sein könnte, Google, die Kakao-Dokumentation, und ich keine klare Antwort, wie man ein Fuzzy Matching zu tun finden in diesen Fällen. Meine Strings können mit allem beginnen, haben eine Reihe von Sonderzeichen, enden normalerweise mit zufälligen oder ignorierten Zeichen.
Regexp wird nicht tun, noch NSPredicates, Soundex funktioniert nicht gut mit fremden Namen, und vielleicht wird der Levenshtein nicht genug sein (oder wird es?).
Ich bin auf der Suche nach einem Titel in einem Satz von etwa einem Dutzend möglicher Übereinstimmungen, aber ich muss diese Operation ziemlich viel tun. 100% Genauigkeit ist nicht das Ziel.
Ich dachte daran, die ignorierten Wörter zu entfernen, die Schlüsselwörter (in diesem Beispiel "französisch, idealistisch, pensée") zu extrahieren, sie zu verketten und dann die Levenshtein-Distanz zu verwenden (Wörter in Songtitel sollten in der gleichen Reihenfolge sein)).
In meinem speziellen Fall würde es funktionieren? Was ist der Industriestandard in Bezug auf dieses Problem (ich kann nicht der Einzige auf der Welt sein, der etwas andere Songnamen abgleichen möchte) Können Core Data, Cocoa oder Objective-C mir helfen?
Vielen Dank.
Nun, ich habe zuerst versucht, eine Variation von diesem und wenn ich reale Daten analysieren, funktioniert es nicht ganz. Die meiste Zeit ist das Problem nicht die Diakritika oder der Fall, sondern in subtil buchstabierten Unterschieden (wie in "Backstreet Girl" vs "Back Street Girl"). Diese Lösung hängt auch stark von dem vorherigen Schritt, der Tokenisierung, ab, die für die Domain "Wörter, die in einem Liedtitel erscheinen könnten" – damdamdam