problema con ejercicio python(archivos)

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

problema con ejercicio python(archivos)

Notapor maier91 » Jue Dic 23, 2010 6:24 pm

tengo que hacer un problema sobre archivos pero como las horas lectivas no nos ha dado tiempo a que nos lo expliquen lo se por donde empezar si pudierais ayudar o recomendarm algo me seria de gran ayuda porque aunque me leido el manual de python lo me aclaro muy. bien.muchas gracias.
aqui os lo dejo:
Se propone construir un programa en Python que acceda a un fichero de texto e imprima la línea
más parecida a un conjunto de términos de búsqueda. Los términos de búsqueda serán especificados
en una única cadena q, utilizando el espacio en blanco como separador. La línea seleccionada podría
contener todos o tan sólo algunos de los términos de búsqueda. El fichero de texto objeto de las
búsquedas (noticias.txt) se adjunta a este enunciado. En todo caso, el programa debería funcionar
sobre cualquier fichero de texto
maier91
 
Mensajes: 6
Registrado: Dom Dic 12, 2010 5:58 pm

Re: problema con ejercicio python(archivos)

Notapor maier91 » Sab Ene 01, 2011 11:30 am

Código: Seleccionar todo
archivo=open('noticias.txt',"r")
lineas=open('noticias.txt').readlines()
a=(input('dime las palabras'))
print(busca(a,f))
def buscar(a,f):
    b=[]
    for linea in archivo:
        for palabra in a:
            puntuaje[lista] +=linea.count(palabra)
            if p in l:
                b.append(l)
    return(b)


pero no funciona bien por ello habia pensado hacer un sistema de "puntajes". Cada línea arranca en 0, y por cada vez que se encuentre cada palabra buscada, se incrementa en 1 su puntaje. Luego simplemente se selecciona la línea cuyo puntaje sea el más alto.

El cálculo puede ser algo así:

Código: Seleccionar todo
for linea in archivo:   
          for palabra in lista_de_palabras_buscadas:   
              puntaje[linea] += linea.count(palabra)

pero no se como:
- cómo inicializar el vector puntaje con todas sus entradas en 0
- cómo seleccionar al final el mayor puntaje y a partir de allí obtener la línea correspondiente
- cómo decicir en caso de empate

se una forma simple puede ser leer el archivo con readlines(), crear el vector puntaje de tamaño len(lineas_del_archivo), pero no se como hacerlo.si me pudierais ayudar.Muchas gracias y feliz año nuevo!!!!!!!!!!!
maier91
 
Mensajes: 6
Registrado: Dom Dic 12, 2010 5:58 pm

Re: problema con ejercicio python(archivos)

Notapor Juanxo » Sab Ene 01, 2011 7:39 pm

Código: Seleccionar todo
archivo=open('noticias.txt',"r")
terminos=(str)(raw_input('dime las palabras: '))

def buscar(a,f):
    mejor = ""
    puntos_mejor = 0
    for linea in archivo:
        puntos_actual = 0
        #contamos el numero de apariciones de cada termino de búsqueda en la linea
        for termino in a:
            puntos_actual += linea.count(termino)
        if puntos_actual > puntos_mejor:
            mejor = linea
            puntos_mejor = puntos_actual
       
    return mejor


print(buscar(terminos, archivo))


Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: problema con ejercicio python(archivos)

Notapor maier91 » Mié Ene 05, 2011 3:10 pm

Juanxo gracias por tu ayuda y siguiendo tus indicaciones he diseñado:
Código: Seleccionar todo

fiche=open('noticias.txt','w')
linea1="la ONU adelantó ayer que la partida económica para ayudar a las víctimas del maremoto en el sur de Asia ascenderá a dos mil millones de dólares una cantidad que intentará atajar la grave situación que se vive en la zona donde los muertos pueden superar los ciento sesenta"
fiche.write(linea1)
linea2="la incertidumbre volvía a cernirse ayer sobre el primer ministro israelí Ariel Sharon que sigue sin lograr formar una coalición de gobierno que le permita llevar a cabo su plan de desconexión de la franja de Gaza"
fiche.write(linea2)
fiche.close()


Código: Seleccionar todo
def buscar(terminos,archivo):
   
    mejor= ""
    puntos_mejor=0
    for linea in archivo:
        puntos_actual=0
        for termino in terminos:
            print('_buscando_',termino,'_en_',linea)
            puntos=linea.count(termino)
            print("_",str(puntos),"_puntos_")
            puntos_actual +=puntos
        if puntos_actual> puntos_mejor:
            mejor=linea
            puntos_mejor=puntos_actual
           
    return(mejor)

archivo=open('noticias.txt','r')
termin=str(input("Introduce el/los termino/s que quieres buscar:"))
terminos=termin.split()
resultado=buscar(terminos,archivo)
print("El resultado es:",resultado)
archivo.close()


pero el problema que tengo es que no consigo que lea las lineas de 1 en 1. es decir si intriduzco como termino a buscar"ayer"(que solo esta en la 1º linea) me devuelve todo el texto tal vez me puedas ayudar a resolverlo.Gracias por tu ayuda!!
maier91
 
Mensajes: 6
Registrado: Dom Dic 12, 2010 5:58 pm

Re: problema con ejercicio python(archivos)

Notapor kaiser » Mié Ene 05, 2011 4:46 pm

Utiliza la función readlines que lee todo el fichero y almacena cada línea en un posición del array.

Código: Seleccionar todo
archivo=open("noticias.txt", "r")   #En realidad no es necesario poner "r" ya que es el modo en que se abre el fichero por defecto.
lineas=archivo.readlines()
archivo.close()

y en la función buscar sustituyes:

def buscar(terminos, lineas):
    mejor= ""
    puntos_mejor=0
    for linea in lineas:
    ...
    ...


Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: problema con ejercicio python(archivos)

Notapor Juanxo » Mié Ene 05, 2011 7:35 pm

creo que el problema se debe a que no introduces el salto de línea en el fichero (prueba a abrir el fichero creado y mira si tiene una o dos líneas). En caso de que este sea el error, se soluciona añadiendo al final de cada string que quieras escribir el salto de línea ( \n ). Ejemplo

linea1 = "Hola" #no hay salto de linea
linea1 = "Hola\n" #hay salto de línea
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron