Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SlayerBur en 11 Abril 2021, 16:34 pm



Título: Mostrar una fase donde este X palabras
Publicado por: SlayerBur 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


Título: Re: Mostrar una fase donde este X palabras
Publicado por: WHK 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.


Título: Re: Mostrar una fase donde este X palabras
Publicado por: Serapis 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.


Título: Re: Mostrar una fase donde este X palabras
Publicado por: SlayerBur 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...


Título: Re: Mostrar una fase donde este X palabras
Publicado por: Serapis 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.


Título: Re: Mostrar una fase donde este X palabras
Publicado por: Panic0 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.


Título: Re: Mostrar una fase donde este X palabras
Publicado por: Danielㅤ 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