Qué estructura de datos usar para almacenar palabras

Preguntado hace 10 meses

Kuu

Kuu

366Distinciones de plata1Distinciones de bronce7

Editada hace 9 meses

Julián Mur
Votos
PositivosNegativosTotal
2 0 2
52 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Hola amigos de Babelias,

Tengo pensada hacer una pequeña aplicación en Java que básicamente lee textos y almacena cada palabra contando el número de veces que aparece en un texto. La duda es que estructura de datos utilizar para almacenar estos valores e ir montando una "tabla" de palabra-número de apariciones.

Como no sé cuantas palabras distintitas puede tener un texto cualquiera, necesito una estructura dinámica, y posteriormente va a ser consultada necesitando que sea un acceso rápido.

Una tabla hash me parece limitada si hay muchas palabras. El caso es que de las opciones que se me habían ocurrido creo que la mejor sería un árbol, tipo arbol B+, o una base de datos pero esta última me parece demasiado pues no voy a relacionar esa información y preferiría algo más cercano al código.

¿Qué ideas se os ocurren?¿Qué usariais vosotros?¿Alguna librería ya implementada o me pongo a desarrollarla yo?

Gracias por la ayuda!

Un saludo.

Actualizando datos
Hola, Kuu, añadí estructura-datos como etiqueta. Saludos. Julián Mur hace 9 meses

1 Respuesta

Hace 9 meses

Javier Suero
Editada hace 9 meses
Votos
PositivosNegativosTotal
101

Hola, Kuu,

no soy un experto en java. Pero intento darte mi punto de vista por si te puede ayudar.

Creo que todo va a depender del número de palabras que vayas a usar. Si son pocas una lista ordenada con la clave como palabra y el número de apariciones como valor sería suficiente.

Supongo que esto lo preguntas porque no van a ser pocas palabras ;)

Una forma que se me ocurre es simular una estructura de árbol en java. Podrías tener una lista ordenada cuya clave sea la inicial y el valor una lista ordenada cuya clave sea la palabra (que empieza por esa inicial) y el valor el número de apariciones. Si el número de palabras es aún muy grande puedes añadir más ramas al árbol, por ejemplo, el valor de la lista inicial sería otra lista de letras, que serían la segunda letra de la palabra.

Algo así (igual no es un java muy correcto, pero creo que la idea se ve):

     TreeMap<String, TreeMap<String, Integer> > listaRaiz = new TreeMap();
     listaRaiz.put("a",new TreeMap<String, Integer>());
     listaRaiz.get("a").put("abracadabra", 1);

Como curiosidad, ¿qué haces con palabras como "programas" y "programa", son 2 palabras o una? ¿y "programó" con "programaba"? Porque según lo que estés haciendo deberías hacer algo que identifique lexemas (igual ya lo tienes :).

Un abrazo, Javi.

Cerrar

Gracias Javi, es una buena idea, pero si tengo muchas palabras tendría que hacer varios niveles... Voy a ver si me dan más ideas también! En cuanto a lo de los lexemas, es un problema bastante grande sobre todo en español, en inglés es algo más sencillo porque eliminando el final normalmente basta, pero sí, es algo que tendré que tener en cuenta, aunque en el primer prototipo lo obviaré... Un saludo! Kuu hace 9 meses

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres