tutorial new guide example downloads documentacion developer data apple cocoa string core-data levenshtein-distance

cocoa - new - ios frameworks



Coincidencia de una cadena aproximada en una tienda Core Data (3)

Creo que la herramienta que desea usar aquí es SearchKit . Lo digo como si acabara de hacer su trabajo fácil ... no lo he hecho, pero debería tener las herramientas que necesita para tener éxito aquí. LNC todavía ofrece su SearchKit Podcast gratis (muy agradable).

Cada pista sería un documento en este caso, y tendría que encontrar una buena manera de indexarlos con un identificador que pueda usarse para encontrarlos. A continuación, puede cargarlos con metadatos y buscarlos. Tal vez poner el título "en" el documento sería útil aquí para facilitar el uso de la búsqueda de similitud ( kSKSearchOptionFindSimilar ). Eso puede o no funcionar realmente bien.

La pregunta que ha hecho es buena, pero ciertamente no existe un estándar en la industria porque cualquiera que resuelva este problema (es decir, todos los principales motores de búsqueda) mantiene sus algoritmos en secreto. Es este un problema difícil; nadie está listo para dar su respuesta.

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í.

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 unir los títulos de las canciones. Mi título local podría ser el (compuesto) "The French Idealist is in your pensée" y el título de la canción remota podría ser "01 - 10 - French idealist in in you''re pensee, The (dub remix, feat. DJ Objective-C)"

Busco desbordamiento de pila, Google, la documentación de cacao, y no encuentro ninguna respuesta clara sobre cómo hacer una coincidencia difusa 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 funcionará, 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 partidos, pero tengo que hacer esta operación bastante. 100% de precisión no es el objetivo.

Estaba pensando en eliminar las palabras ignoradas, extraer las palabras clave (en este ejemplo, "francés, idealista, pensée"), concatenarlas y luego usar la distancia Levenshtein (las palabras en el 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.


Desea que su búsqueda sea diacrítica e insensible para que coincida con la ''é'' en el pensée y la ''e'' en pensee. Usted obtiene esto agregando el [d] después del atributo. Al igual que:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@)", yourSongSubstring]; La ''c'' en [cd] es para la insensibilidad de mayúsculas y minúsculas.

Como su cadena podría aparecer en cualquier orden en la cadena que está buscando, podría tokenizar su cadena de búsqueda ([... componentsByString: @ ""]) luego crear un predicado como

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@) and (songTitle like[cd] %@)", songToken1, songToken2]; Esa sintaxis para combinar predicados anteriores puede estar desactivada, yendo desde la memoria.


Considere q-grams , que son subcadenas de longitud q ( Gravano et al., 2001 ).

Podría, para dos cadenas s1 y s2, determinar para cada q-gramo de s1 el q-gramo correspondiente de s2 con la menor distancia de edición. Luego agrega todas esas distancias y terminas con una métrica que es muy robusta a la permutación de palabras y caracteres adicionales.

En general, q debe adaptarse a su dominio problemático (experimente con q = 3, 4, 5 ...).