![]() |
| |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
| | LinkBack | Herramientas | Desplegado |
| |||
| Hola necesito hacer en C un sistema de texto predictivo, es el sistema que utilizan los celulares para escribir mensajes de texto. Tengo un diccionario con 85200 palabras mas o menos y lo que necesitaria es poder realizar el sistema pero sin levantar el diccionario a memoria, ni leer secuencialmente mas de una vez, pero si puedo crear varios archivos auxiliares ya que puede que alguna palabra que escriba no este en el diccionario, todavia no se me ocurre, si alguno tiene alguna idea sera bienvenida... Muchas Gracias. Y perdon por las molestias..... |
| | ||||
| ||||
| |
| |||
| On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >Hola necesito hacer en C un sistema de texto predictivo, es el sistema >que utilizan los celulares para escribir mensajes de texto. >Tengo un diccionario con 85200 palabras mas o menos y lo que >necesitaria es poder realizar el sistema pero sin levantar el >diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >puedo crear varios archivos auxiliares ya que puede que alguna palabra >que escriba no este en el diccionario, >todavia no se me ocurre, si alguno tiene alguna idea sera >bienvenida... A mi "me se" ha ocurrido una idea porque no es la primera vez que respondo esta pregunta, aunque yo nunca lo he hecho. Puedes generar una lista ordenada en un fichero aparte, de modo que para buscar una palabra tengas que acceder pocas veces al fichero, haciendo una busqueda dicotómica o binaria (como se diga), en 17 accesos tienes que encontrar cualquier palabra (para menos de 128000 palabras) Entonces cada vez que el usuario pulsa una tecla buscas la primera palabra y la ultima que comienzan por las letras que ya tienes y con eso rellenas una lista. Saludos :-) -Pedro- http://www.maicas.net/ e-mail en www.maicas.net |
| |||
| On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >Hola necesito hacer en C un sistema de texto predictivo, es el sistema >que utilizan los celulares para escribir mensajes de texto. >Tengo un diccionario con 85200 palabras mas o menos y lo que >necesitaria es poder realizar el sistema pero sin levantar el >diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >puedo crear varios archivos auxiliares ya que puede que alguna palabra >que escriba no este en el diccionario, >todavia no se me ocurre, si alguno tiene alguna idea sera >bienvenida... A mi "me se" ha ocurrido una idea porque no es la primera vez que respondo esta pregunta, aunque yo nunca lo he hecho. Puedes generar una lista ordenada en un fichero aparte, de modo que para buscar una palabra tengas que acceder pocas veces al fichero, haciendo una busqueda dicotómica o binaria (como se diga), en 17 accesos tienes que encontrar cualquier palabra (para menos de 128000 palabras) Entonces cada vez que el usuario pulsa una tecla buscas la primera palabra y la ultima que comienzan por las letras que ya tienes y con eso rellenas una lista. Saludos :-) -Pedro- http://www.maicas.net/ e-mail en www.maicas.net |
| |||
| On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >Hola necesito hacer en C un sistema de texto predictivo, es el sistema >que utilizan los celulares para escribir mensajes de texto. >Tengo un diccionario con 85200 palabras mas o menos y lo que >necesitaria es poder realizar el sistema pero sin levantar el >diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >puedo crear varios archivos auxiliares ya que puede que alguna palabra >que escriba no este en el diccionario, >todavia no se me ocurre, si alguno tiene alguna idea sera >bienvenida... A mi "me se" ha ocurrido una idea porque no es la primera vez que respondo esta pregunta, aunque yo nunca lo he hecho. Puedes generar una lista ordenada en un fichero aparte, de modo que para buscar una palabra tengas que acceder pocas veces al fichero, haciendo una busqueda dicotómica o binaria (como se diga), en 17 accesos tienes que encontrar cualquier palabra (para menos de 128000 palabras) Entonces cada vez que el usuario pulsa una tecla buscas la primera palabra y la ultima que comienzan por las letras que ya tienes y con eso rellenas una lista. Saludos :-) -Pedro- http://www.maicas.net/ e-mail en www.maicas.net |
| |||
| On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >Hola necesito hacer en C un sistema de texto predictivo, es el sistema >que utilizan los celulares para escribir mensajes de texto. >Tengo un diccionario con 85200 palabras mas o menos y lo que >necesitaria es poder realizar el sistema pero sin levantar el >diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >puedo crear varios archivos auxiliares ya que puede que alguna palabra >que escriba no este en el diccionario, >todavia no se me ocurre, si alguno tiene alguna idea sera >bienvenida... A mi "me se" ha ocurrido una idea porque no es la primera vez que respondo esta pregunta, aunque yo nunca lo he hecho. Puedes generar una lista ordenada en un fichero aparte, de modo que para buscar una palabra tengas que acceder pocas veces al fichero, haciendo una busqueda dicotómica o binaria (como se diga), en 17 accesos tienes que encontrar cualquier palabra (para menos de 128000 palabras) Entonces cada vez que el usuario pulsa una tecla buscas la primera palabra y la ultima que comienzan por las letras que ya tienes y con eso rellenas una lista. Saludos :-) -Pedro- http://www.maicas.net/ e-mail en www.maicas.net |
| |||
| Pedro Maicas escribió: > On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >> Hola necesito hacer en C un sistema de texto predictivo, es el sistema >> que utilizan los celulares para escribir mensajes de texto. >> Tengo un diccionario con 85200 palabras mas o menos y lo que >> necesitaria es poder realizar el sistema pero sin levantar el >> diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >> puedo crear varios archivos auxiliares ya que puede que alguna palabra >> que escriba no este en el diccionario, >> todavia no se me ocurre, si alguno tiene alguna idea sera >> bienvenida... > > A mi "me se" ha ocurrido una idea porque no es > la primera vez que respondo esta pregunta, aunque yo > nunca lo he hecho. > > Puedes generar una lista ordenada en un fichero aparte, > de modo que para buscar una palabra tengas que acceder > pocas veces al fichero, haciendo una busqueda dicotómica > o binaria (como se diga), en 17 accesos tienes que encontrar > cualquier palabra (para menos de 128000 palabras) > > Entonces cada vez que el usuario pulsa una tecla buscas > la primera palabra y la ultima que comienzan por > las letras que ya tienes y con eso rellenas una lista. A mí "se me" ha ocurrido otra idea mejor. Teniendo en cuenta que has dicho que puedes generar archivos auxiliares yo te propondría el siguiente esquema: 1.- Convertir el texto tecleado a "teclado numérico". Por ejemplo "casa" se convertiría en "2272" y "emprendedor" en "36773633367". 2.- Acceder al directorio o archivo en el que se almacenan las palabras que empiezan por la raiz tecleada. Por ejemplo, si hemos tecleado "emprend" (3677363) accedemos al archivo ./3/6/7/7/3/6/3/palabras.txt o ../36/77/36/3.palabras.txt o simplemente ./3677363.palabras.txt. En él habremos almacenado las palabras que comienzan por dicha combinación. 3.- Cuando agreguemos una palabra nueva al diccionario deberemos agregarlo al archivo de cada una de sus raices. Ejemplos con "emprendedor": * Usando directorios de un nivel: ../3/palabras.txt ../3/6/palabras.txt ../3/6/7/palabras.txt ../3/6/7/7/palabras.txt ../3/6/7/7/3/palabras.txt ../3/6/7/7/3/6/palabras.txt ../3/6/7/7/3/6/3/palabras.txt etc... * Usando directorios de dos niveles: ../3.palabras.txt ../36/palabras.txt ../36/7.palabras.txt ../36/77/palabras.txt ../36/77/3.palabras.txt ../36/77/36/palabras.txt ../36/77/36/3.palabras.txt etc... * Archivos en un mismo directorio: ../3.palabras.txt ../36.palabras.txt ../367.palabras.txt ../3677.palabras.txt ../36773.palabras.txt ../367736.palabras.txt ../3677363.palabras.txt etc... Con este sistema cada vez que teclees algo tendrás acceso inmediato al archivo que contiene las palabras exactas, ni más ni menos. Espero que te sea de utilidad la idea. Un saludo. -- Óscar Javier García Baudet LinaresDigital |
| |||
| Pedro Maicas escribió: > On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >> Hola necesito hacer en C un sistema de texto predictivo, es el sistema >> que utilizan los celulares para escribir mensajes de texto. >> Tengo un diccionario con 85200 palabras mas o menos y lo que >> necesitaria es poder realizar el sistema pero sin levantar el >> diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >> puedo crear varios archivos auxiliares ya que puede que alguna palabra >> que escriba no este en el diccionario, >> todavia no se me ocurre, si alguno tiene alguna idea sera >> bienvenida... > > A mi "me se" ha ocurrido una idea porque no es > la primera vez que respondo esta pregunta, aunque yo > nunca lo he hecho. > > Puedes generar una lista ordenada en un fichero aparte, > de modo que para buscar una palabra tengas que acceder > pocas veces al fichero, haciendo una busqueda dicotómica > o binaria (como se diga), en 17 accesos tienes que encontrar > cualquier palabra (para menos de 128000 palabras) > > Entonces cada vez que el usuario pulsa una tecla buscas > la primera palabra y la ultima que comienzan por > las letras que ya tienes y con eso rellenas una lista. A mí "se me" ha ocurrido otra idea mejor. Teniendo en cuenta que has dicho que puedes generar archivos auxiliares yo te propondría el siguiente esquema: 1.- Convertir el texto tecleado a "teclado numérico". Por ejemplo "casa" se convertiría en "2272" y "emprendedor" en "36773633367". 2.- Acceder al directorio o archivo en el que se almacenan las palabras que empiezan por la raiz tecleada. Por ejemplo, si hemos tecleado "emprend" (3677363) accedemos al archivo ./3/6/7/7/3/6/3/palabras.txt o ../36/77/36/3.palabras.txt o simplemente ./3677363.palabras.txt. En él habremos almacenado las palabras que comienzan por dicha combinación. 3.- Cuando agreguemos una palabra nueva al diccionario deberemos agregarlo al archivo de cada una de sus raices. Ejemplos con "emprendedor": * Usando directorios de un nivel: ../3/palabras.txt ../3/6/palabras.txt ../3/6/7/palabras.txt ../3/6/7/7/palabras.txt ../3/6/7/7/3/palabras.txt ../3/6/7/7/3/6/palabras.txt ../3/6/7/7/3/6/3/palabras.txt etc... * Usando directorios de dos niveles: ../3.palabras.txt ../36/palabras.txt ../36/7.palabras.txt ../36/77/palabras.txt ../36/77/3.palabras.txt ../36/77/36/palabras.txt ../36/77/36/3.palabras.txt etc... * Archivos en un mismo directorio: ../3.palabras.txt ../36.palabras.txt ../367.palabras.txt ../3677.palabras.txt ../36773.palabras.txt ../367736.palabras.txt ../3677363.palabras.txt etc... Con este sistema cada vez que teclees algo tendrás acceso inmediato al archivo que contiene las palabras exactas, ni más ni menos. Espero que te sea de utilidad la idea. Un saludo. -- Óscar Javier García Baudet LinaresDigital |
| |||
| Pedro Maicas escribió: > On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >> Hola necesito hacer en C un sistema de texto predictivo, es el sistema >> que utilizan los celulares para escribir mensajes de texto. >> Tengo un diccionario con 85200 palabras mas o menos y lo que >> necesitaria es poder realizar el sistema pero sin levantar el >> diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >> puedo crear varios archivos auxiliares ya que puede que alguna palabra >> que escriba no este en el diccionario, >> todavia no se me ocurre, si alguno tiene alguna idea sera >> bienvenida... > > A mi "me se" ha ocurrido una idea porque no es > la primera vez que respondo esta pregunta, aunque yo > nunca lo he hecho. > > Puedes generar una lista ordenada en un fichero aparte, > de modo que para buscar una palabra tengas que acceder > pocas veces al fichero, haciendo una busqueda dicotómica > o binaria (como se diga), en 17 accesos tienes que encontrar > cualquier palabra (para menos de 128000 palabras) > > Entonces cada vez que el usuario pulsa una tecla buscas > la primera palabra y la ultima que comienzan por > las letras que ya tienes y con eso rellenas una lista. A mí "se me" ha ocurrido otra idea mejor. Teniendo en cuenta que has dicho que puedes generar archivos auxiliares yo te propondría el siguiente esquema: 1.- Convertir el texto tecleado a "teclado numérico". Por ejemplo "casa" se convertiría en "2272" y "emprendedor" en "36773633367". 2.- Acceder al directorio o archivo en el que se almacenan las palabras que empiezan por la raiz tecleada. Por ejemplo, si hemos tecleado "emprend" (3677363) accedemos al archivo ./3/6/7/7/3/6/3/palabras.txt o ../36/77/36/3.palabras.txt o simplemente ./3677363.palabras.txt. En él habremos almacenado las palabras que comienzan por dicha combinación. 3.- Cuando agreguemos una palabra nueva al diccionario deberemos agregarlo al archivo de cada una de sus raices. Ejemplos con "emprendedor": * Usando directorios de un nivel: ../3/palabras.txt ../3/6/palabras.txt ../3/6/7/palabras.txt ../3/6/7/7/palabras.txt ../3/6/7/7/3/palabras.txt ../3/6/7/7/3/6/palabras.txt ../3/6/7/7/3/6/3/palabras.txt etc... * Usando directorios de dos niveles: ../3.palabras.txt ../36/palabras.txt ../36/7.palabras.txt ../36/77/palabras.txt ../36/77/3.palabras.txt ../36/77/36/palabras.txt ../36/77/36/3.palabras.txt etc... * Archivos en un mismo directorio: ../3.palabras.txt ../36.palabras.txt ../367.palabras.txt ../3677.palabras.txt ../36773.palabras.txt ../367736.palabras.txt ../3677363.palabras.txt etc... Con este sistema cada vez que teclees algo tendrás acceso inmediato al archivo que contiene las palabras exactas, ni más ni menos. Espero que te sea de utilidad la idea. Un saludo. -- Óscar Javier García Baudet LinaresDigital |
| |||
| Pedro Maicas escribió: > On Thu, 30 Aug 2007 21:43:51 -0700, daniel_arv <daniel_arv***hotmail.com> wrote: >> Hola necesito hacer en C un sistema de texto predictivo, es el sistema >> que utilizan los celulares para escribir mensajes de texto. >> Tengo un diccionario con 85200 palabras mas o menos y lo que >> necesitaria es poder realizar el sistema pero sin levantar el >> diccionario a memoria, ni leer secuencialmente mas de una vez, pero si >> puedo crear varios archivos auxiliares ya que puede que alguna palabra >> que escriba no este en el diccionario, >> todavia no se me ocurre, si alguno tiene alguna idea sera >> bienvenida... > > A mi "me se" ha ocurrido una idea porque no es > la primera vez que respondo esta pregunta, aunque yo > nunca lo he hecho. > > Puedes generar una lista ordenada en un fichero aparte, > de modo que para buscar una palabra tengas que acceder > pocas veces al fichero, haciendo una busqueda dicotómica > o binaria (como se diga), en 17 accesos tienes que encontrar > cualquier palabra (para menos de 128000 palabras) > > Entonces cada vez que el usuario pulsa una tecla buscas > la primera palabra y la ultima que comienzan por > las letras que ya tienes y con eso rellenas una lista. A mí "se me" ha ocurrido otra idea mejor. Teniendo en cuenta que has dicho que puedes generar archivos auxiliares yo te propondría el siguiente esquema: 1.- Convertir el texto tecleado a "teclado numérico". Por ejemplo "casa" se convertiría en "2272" y "emprendedor" en "36773633367". 2.- Acceder al directorio o archivo en el que se almacenan las palabras que empiezan por la raiz tecleada. Por ejemplo, si hemos tecleado "emprend" (3677363) accedemos al archivo ./3/6/7/7/3/6/3/palabras.txt o ../36/77/36/3.palabras.txt o simplemente ./3677363.palabras.txt. En él habremos almacenado las palabras que comienzan por dicha combinación. 3.- Cuando agreguemos una palabra nueva al diccionario deberemos agregarlo al archivo de cada una de sus raices. Ejemplos con "emprendedor": * Usando directorios de un nivel: ../3/palabras.txt ../3/6/palabras.txt ../3/6/7/palabras.txt ../3/6/7/7/palabras.txt ../3/6/7/7/3/palabras.txt ../3/6/7/7/3/6/palabras.txt ../3/6/7/7/3/6/3/palabras.txt etc... * Usando directorios de dos niveles: ../3.palabras.txt ../36/palabras.txt ../36/7.palabras.txt ../36/77/palabras.txt ../36/77/3.palabras.txt ../36/77/36/palabras.txt ../36/77/36/3.palabras.txt etc... * Archivos en un mismo directorio: ../3.palabras.txt ../36.palabras.txt ../367.palabras.txt ../3677.palabras.txt ../36773.palabras.txt ../367736.palabras.txt ../3677363.palabras.txt etc... Con este sistema cada vez que teclees algo tendrás acceso inmediato al archivo que contiene las palabras exactas, ni más ni menos. Espero que te sea de utilidad la idea. Un saludo. -- Óscar Javier García Baudet LinaresDigital |
| |||
| On Sat, 01 Sep 2007 15:24:45 +0200, Oscar Garcia <redstarQUITARSPAM23***terra.es> wrote: >Con este sistema cada vez que teclees algo tendrás acceso inmediato al >archivo que contiene las palabras exactas, ni más ni menos. Mmmmmmmmmmm no estoy de acerdo en casi nada de lo dices en este mensaje. No veo el "acceso inmediato", lo que tu no hagas lo tendrá que hacer el sistema operativo y nadie te garantiza que sea mas eficiente que si implementas la busqueda tu mismo, y raro sería que el sistema operativo implemente un sistema de busqueda que no se pueda mejorar, si fuera una base de datos probablemente si, pero el sistema operativo no creo. Lo de los numeros no le veo la necesidad, con poner a cada directorio el nombre de la primera palabra almacenada en esa rama sería lo mismo, y te permitiría balancear el tamaño de los ficheros, aunque insisto en que un solo fichero es más eficiente. Si piensas que las primeras busquedas van a ser muy repetitivas y que por eso ahorras tiempo haciendolo así, ten en cuenta que un programa buscando sobre un solo fichero tambien puede mantener una cache del arbol de índices. Además haciendolo tu todo en tu programa, puedes hacer una búsqueda anticipada, para cada pulsacion buscas las palabras en los dos extremos , presentas los resultados, y hasta la proxima pulsacion puedes ir explorando las ramas que cuelgan de esta parte y cargandolas en memoria. (me refiero a los índices, no a las palabras) Por otro lado, al final vas a tener que buscar en un fichero con muchas palabras (no creo que propongas llegar a un fichero por palabra), por lo que tendrás que indexar ese ultimo fichero igualmente. Y si quieres disminuir el numero de busquedas puedes recurrir a un arbol con más ramas en cada nodo, aunque con dos ramas todo es más facil. Saludos :-) -Pedro- http://www.maicas.net/ e-mail en www.maicas.net |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Cambiar a un numero a formato texto y añadirle otro texto. | antoni | Newsgroup microsoft.public.es.excel | 5 | 24-11-2007 08:37:59 |
| Convertir Cuadro de Texto a Solo Texto | Cristhian Nunez | Newsgroup microsoft.public.es.powerpoint | 2 | 29-08-2007 11:04:01 |
| Texto Fecha y "se pega el sistema". | Enrique | Newsgroup microsoft.public.es.vfoxpro.datos | 12 | 21-07-2007 15:44:22 |
| No puedo teclear en los campos de texto del explorer ni en el campo de texto de los mensajes aki ni en ningun campo de texto, ayuda | vorpatril | Newsgroup es.comp.infosistemas.internet | 4 | 24-04-2005 18:19:24 |
| autocompletar o texto predictivo | Remedios Iranzo | Newsgroup microsoft.public.es.works | 0 | 16-01-2004 17:52:24 |