elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Mostrar una fase donde este X palabras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mostrar una fase donde este X palabras  (Leído 3,096 veces)
SlayerBur

Desconectado Desconectado

Mensajes: 92



Ver Perfil
Mostrar una fase donde este X palabras
« en: 11 Abril 2021, 16:34 pm »

Buen día.

Sucede que intento hacer un intento de IA (No es mas que segun lo que escribas, te dara X respuesta, al menos por ahora)

Logre que cuando se escribe una pregunta que no existe en su "vocabulario", la guarde en un .txt junto a su respuesta, quedando algo asi:

Código:
       print('¿Cual seria una respuesta a esa pregunta?') #Asigna el contenido a respuesta
        Respuesta = input('') # Premite escribir la respuesta y guardarla en Variable Respuesta
        # Guarda la pregunta y respuesta
        IAPreg = open('preguntas.txt', 'a') #Abre el archivo de texto
        IAPreg.write('Pregunta: ' + Pregunta.lower() + '\n') #Agrega el contenido de Pregunta + salto de linea
        IAPreg.write('Respuesta: ' + Respuesta.lower() + '\n') #Guarda el contenido de respuesta
        IAPreg.close() # Cierra el archivo de  texo
        #
        Pregunta = input('Ingresa tu pregunta: ')
        return IA(Pregunta)

de esta forma estoy guardando Pregunta, y luego de un enter la respuesta, tambien pense en hacerlo todo en una linea para que sea mas facil, ya que luego seria unicamente quitar las palabas que no se utilizarian, y mostrar de Respuesta: hacia delante.

Pero lo unico que logro es mostrar o todo el .txt, o unicamente palabras en especifico.

No se si se entendera correctamente lo que digo


« Última modificación: 17 Abril 2021, 16:12 pm por SlayerBur » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Mostrar una fase donde este X palabras
« Respuesta #1 en: 11 Abril 2021, 19:04 pm »

Hola, realmente leí varias veces tu post y no entendí exactamente cual es tu pregunta o que buscas.

Si tu clase se llama "IAPreg" deduzco que obtienes la palabra comando utilizando expresiones regulares, luego guardas el resultado en un txt y ahi me perdí.

No sale mejor guardar tus datos en una base de datos sqlite de dos columnas?.

Saludos.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Mostrar una fase donde este X palabras
« Respuesta #2 en: 12 Abril 2021, 00:54 am »

Buen día.

Sucede que intento hacer un intento de IA (No es mas que segun lo que escribas, te dara X respuesta, al menos por ahora)

Logre que cuando se escribe una pregunta que no existe en su "vocabulario", la guarde en un .txt junto a su respuesta, quedando algo asi:

....
de esta forma estoy guardando Pregunta, y luego de un enter la respuesta, tambien pense en hacerlo todo en una linea para que sea mas facil, ya que luego seria unicamente quitar las palabas que no se utilizarian, y mostrar de Respuesta: hacia delante.

Pero lo unico que logro es mostrar o todo el .txt, o unicamente palabras en especifico.
Yo si te he entendido.

El problema es que no haces ninguna búsqueda en el fichero.
Se supone que si tu fichero está guardando preguntas y respuestas, lo ideal es que luego al hacer una pregunta, localice la pregunta más similar y arroje la respuesta bajo ella.
Como quiera que es un txt, tu sabrás que formato le estás dando, como mínimo separa pregunta en una sola linea y respuesta en otra línea, así las preguntas ocuparán las lineas pares y las respuestas las lineas impares. Y como mínimo deberías ser capaz de arrojar una sola línea como respuesta.

Como imagino que no va muy allá (la IA), la similitud entre lo que se pregunta y la pregunta a buscar podría estar basado en el numero de coincidencia de palabras (incluso en desorden).
Lo ideal es añadir un analizador semántico (algo más o menos complejo), y que determine con otras preguntas cuya identidad semántica sea similar... de lo contrario si dos preguntas idénticas donde aparece una negando, tendrá una simulitud mayor que otras parecidas pero menos), etc...
Desconozco si tienes capacidad para realizar un analizador sintáctico (asumo que no, dado que no eres capaz de resolver este 'simple problema'), pregunto si al menos eres capaz de crear un analizador sintáctico... sí como los del cole cuando eras (supongo), más pequeño: Sujeto, verbo y predicado, y luego separar cada uno de los elementos hasta sus últimas entidades... al menos por concidiencias podría conseguir algo.

¡Muchos...! cuando no son capaces de lograr una respuesta adecuada, proveen una 'neutral', como tratando de ocultar su pedantería (a la de la IA, me refiero). Cosas del tipo: ¿Tu crees?. "Creo que estás perdiendo el tiempo", y chorrocientas respuestas más programadas...

Si es por entretenimiento, vale, si no es perder el tiempo.
« Última modificación: 12 Abril 2021, 00:59 am por Serapis » En línea

SlayerBur

Desconectado Desconectado

Mensajes: 92



Ver Perfil
Re: Mostrar una fase donde este X palabras
« Respuesta #3 en: 14 Abril 2021, 01:32 am »

Yo si te he entendido.

El problema es que no haces ninguna búsqueda en el fichero.
Se supone que si tu fichero está guardando preguntas y respuestas, lo ideal es que luego al hacer una pregunta, localice la pregunta más similar y arroje la respuesta bajo ella.
Como quiera que es un txt, tu sabrás que formato le estás dando, como mínimo separa pregunta en una sola linea y respuesta en otra línea, así las preguntas ocuparán las lineas pares y las respuestas las lineas impares. Y como mínimo deberías ser capaz de arrojar una sola línea como respuesta.

Como imagino que no va muy allá (la IA), la similitud entre lo que se pregunta y la pregunta a buscar podría estar basado en el numero de coincidencia de palabras (incluso en desorden).
Lo ideal es añadir un analizador semántico (algo más o menos complejo), y que determine con otras preguntas cuya identidad semántica sea similar... de lo contrario si dos preguntas idénticas donde aparece una negando, tendrá una simulitud mayor que otras parecidas pero menos), etc...
Desconozco si tienes capacidad para realizar un analizador sintáctico (asumo que no, dado que no eres capaz de resolver este 'simple problema'), pregunto si al menos eres capaz de crear un analizador sintáctico... sí como los del cole cuando eras (supongo), más pequeño: Sujeto, verbo y predicado, y luego separar cada uno de los elementos hasta sus últimas entidades... al menos por concidiencias podría conseguir algo.

¡Muchos...! cuando no son capaces de lograr una respuesta adecuada, proveen una 'neutral', como tratando de ocultar su pedantería (a la de la IA, me refiero). Cosas del tipo: ¿Tu crees?. "Creo que estás perdiendo el tiempo", y chorrocientas respuestas más programadas...

Si es por entretenimiento, vale, si no es perder el tiempo.

Es mas bien por entretenimiento y aprendizaje del lenguaje Python, tengo un curso básico en .NET, y empecé a estudiar en bachillerato de Programación, pero mientras tanto me gustaría aprender este lenguaje para hacer códigos cortos que puedan facilitar mi día a día en el PC.
Incluyendo que fue lo único que se me ocurrió para hacer un "ejercicio" con Python, otro tipo de cosas no se me ocurren..

PD: Logré solucionar el problema con el siguiente codigo:
Código:
    for line in file:     
        for part in line.split():           
            if str in part:               
                print(line.replace('\n', '').split('!')[-1].split(',')[0])
               # palabra = a.split("/")[-1].split("-")[0]
    return line

Ahora mi único problema con ello es que no se como hacer para que el programa detecte si existe o no dicha palabra/frase, intente con una variable bandera, pero indiferentemente de la respuesta, entra una vez en verdadero y luego regresa a falso al entrar al if.
Aun que estuve pensando que sería mas fácil utilizar una base de datos...
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Mostrar una fase donde este X palabras
« Respuesta #4 en: 14 Abril 2021, 16:48 pm »

Si es simplemente por entretenimiento y práctica en el aprendizaje de un lenguaje, es válido, pués ahí no entran de momento soluciones óptimas, ni siquiera lógicas, solo practicar y seguir aprendiendo. Aunque eligiendo inadecuados ejemplos, tiene el riesgo de caer en malos hábitos de programación.

Una base de datos es una buena opción, pero por lo general para un programador supone un elevado coste aprender a programar una base de datos, aunque a un cierto nivel básico es tolerable.

Sin embargo es mejor opción una tabla hash, por muchas razones, la primera es que bastan un puñado de propiedades y métodos para manejarla, luego el coste de aprendizaje es más que aceptable, en segundo lugar porque es muy eficiente en la busqueda y almacenamiento... No en vano las bases de datos se basan en tablas hash y diferentes tipos de árboles, pero rodeado de todo un ecossitema que lo hace tan complejo que es un 'mundo' dentor d ela programación, por sí mismo.
En línea

Panic0

Desconectado Desconectado

Mensajes: 218



Ver Perfil
Re: Mostrar una fase donde este X palabras
« Respuesta #5 en: 16 Abril 2021, 16:32 pm »

Hola, yo creo que seria mejor usar una base de datos (sql lite por ejemplo),yo creo que es mas fácil de manejar a comparación de ficheros



Seria mas sencillo guardar las repuestas ahí, además las consultas en sql lite son muy simples python con sqllite o mysql  van muy bien de la mano. Y claro, siempre es bueno aprender algo nuevo por mas básico que sea.
En línea

Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
Danielㅤ


Conectado Conectado

Mensajes: 1.675


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Mostrar una fase donde este X palabras
« Respuesta #6 en: 16 Abril 2021, 16:53 pm »

Hola, yo personalmente lo haría así:

Guardaría las preguntas y las respuestas en la misma línea y éstas las separaría con algún caracter delimitador, puede ser algún caracter especial por ejemplo un espacio duro/espacio de no separación o una barra vertical | o algún otro caracter, luego con un Split obtendría las respuestas y las preguntas:

Código
  1. pregResp = linea.split("|")
  2. pregunta = pregResp[0]
  3. respuesta = pregResp[1]
  4.  

Y el lugar para almacenar usaría un archivo de texto, una base de datos me parece muy grande para datos tan simples.


Saludos
« Última modificación: 16 Abril 2021, 16:56 pm por [D]aniel » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sin Palabras!!! O,O este tio es un crack xDDD(COD 5 WOW )
Juegos y Consolas
XXXXXX 3 2,121 Último mensaje 22 Diciembre 2008, 01:45 am
por XXXXXX
Este teléfono transcribe en texto las palabras de tu interlocutor
Noticias
wolfbcn 0 1,178 Último mensaje 13 Junio 2013, 01:17 am
por wolfbcn
Mostrar directorio donde se ejecuta el programa
Programación C/C++
robinson23 0 1,231 Último mensaje 16 Enero 2014, 22:52 pm
por robinson23
Emojli, donde el usuario se comunica sin palabras y sólo con emoticonos
Noticias
wolfbcn 0 1,088 Último mensaje 6 Julio 2014, 02:34 am
por wolfbcn
Palabras Acentuadas problema al mostrar !
PHP
Diabliyo 9 5,263 Último mensaje 14 Noviembre 2014, 22:52 pm
por R2100
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines