Tengo un pequeño problema con la aplicación de datos básicos que estoy escribiendo actualmente. Tengo dos modelos diferentes, contextos y tiendas permanentes. Una es para los datos de mi aplicación, la otra es para un sitio web con información relevante para mí.Coincidencia de una cadena aproximada en un almacén de datos centrales
La mayoría de las veces, comparo exactamente un registro de mi aplicación con otro registro de la otra fuente. A veces, sin embargo, tengo que recurrir a la coincidencia de cadenas difusas para vincular los dos registros. Estoy tratando de hacer coincidir los títulos de las canciones. Mi título local podría ser el (compuesta) "The French Idealist is in your pensée"
y el título de la canción remoto podría ser "01 - 10 - French idealist in in you're pensee, The (dub remix, feat. DJ Objective-C)"
que busco desbordamiento de pila, Google, la documentación de cacao, y no puedo encontrar ninguna respuesta clara sobre cómo hacer una coincidencia aproximada en estos casos. Mis cadenas pueden comenzar con cualquier cosa, tener un montón de caracteres especiales, generalmente terminan con caracteres aleatorios o ser ignorados.
Regexp no funciona, ni NSPredica, Soundex no funciona bien con nombres extranjeros, y tal vez el Levenshtein no será suficiente (¿o no?).
Estoy buscando un título en un conjunto de una docena de posibles coincidencias, pero tengo que hacer esta operación bastante. 100% de precisión no es el objetivo.
Estaba pensando en eliminar las palabras ignoradas, extrayendo las palabras clave (en este ejemplo, "french, idealist, pensée"), concatenarlas, y luego usar la distancia Levenshtein (las palabras del título de la canción deben estar en el mismo orden)
En mi caso especial, ¿funcionaría? ¿Cuál es el estándar de la industria con respecto a este problema (no puedo ser el único en el mundo que desea unir nombres de canciones ligeramente diferentes) ¿Pueden ayudarme Core Data, Cocoa u Objective-C?
Muchas gracias.
Bueno, primero probé una variación de esto y cuando analizo datos del mundo real, no funciona del todo. La mayoría de las veces, el problema no es los diacríticos o el caso sino las diferencias sutilmente deletreadas (como en "Backstreet girl" vs. "Back Street Girl"). Esta solución también depende en gran medida del paso anterior, la tokenización, que es realmente difícil para el dominio "palabras que podrían aparecer en el título de una canción" – damdamdam