Gente Hellow Stack Overflow. Me gustaría recibir algunas sugerencias sobre el siguiente problema. Estoy usando Java.Subcadenas a juego de un diccionario a otra cadena: ¿sugerencias?
Tengo una matriz n. ° 1 con varias cadenas. Por ejemplo, dos de las cadenas podrían ser: "Una manzana cayó sobre la cabeza de Newton" y "Las manzanas crecen en los árboles".
Por otro lado, tengo otro array # 2 con términos como (Fruits => Apple, Orange, Peach; Items => Pen, Book; ...). Yo llamaría a esta matriz mi "diccionario".
Al comparar elementos de una matriz a la otra, necesito ver en qué "categoría" caen los elementos del # 1 de # 2. P.ej. Ambos del # 1 caerían bajo "Fruits".
Mi consideración más importante es la velocidad. Necesito hacer esas operaciones rápido. Una estructura que permita la recuperación de tiempo constante sería buena.
Consideré un Hashset con el método contains(), pero no permite subcadenas. También he intentado correr como expresiones regulares (manzana | naranja | melocotón | ... etc) con la caja de la bandera insensible, pero leí que no va a ser rápido cuando los términos aumentan en número (mínimo 200 es de esperar). Finalmente, busqué y estoy considerando usar una ArrayList con indexOf() pero no sé sobre su rendimiento. También necesito saber cuál de los términos realmente coincide, por lo que en este caso, sería "Apple".
Proporcione sus opiniones, ideas y sugerencias sobre este problema.
Vi el algoritmo Aho-Corasick, pero es muy probable que las palabras clave/términos cambien con frecuencia. Entonces no creo que pueda usar eso. Oh, no soy un experto en minería de textos y matemática, así que por favor elabore conceptos complejos.
¡Gracias, gente de Stack Overflow, por su tiempo! :)
He comprobado el árbol de sufijos. Parece similar a la estructura Trie que utiliza Aho-Corasick algo. Mi preocupación es que tengo muchas categorías diferentes y muchos términos por categoría. Construir un árbol para cada categoría me parece ineficiente. Gracias Matt! –
En realidad, no creo que necesite construir un árbol para cada categoría. Debería poder insertar varias cadenas en un solo árbol de sufijos y agregar una referencia a un objeto de categoría en el punto de terminación en el árbol de cada cadena válida. – MattK
¡Esa idea es interesante! Pero no entiendo la parte "agregar referencia a un objeto de categoría" de su respuesta. ¿Cómo puedo hacer eso? –