kjcvbnlbk

Páginas: 5 (1095 palabras) Publicado: 19 de abril de 2013
Ejercicio propuesto: búsqueda de texto
1.

Objetivo

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 losté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.

2.

Criterios de similitud

No se tendrá en cuenta el orden en que aparezcan los términos de búsqueda en q. Así, la cadena
’crisis Irlanda rescate’ será equivalente a la cadena ’rescate Irlanda crisis’. Engeneral, una línea de
texto x será tanto más parecida a una cadena q cuantos más términos de q aparezcan en x. Aún bajo
este criterio general, pueden definirse distintas funciones de similitud. A continuación se proponen
algunas.
Sea n el número de palabras que aparecen en la línea de texto x = {x1 , . . . , xn }, m el número de
términos de búsqueda que aparecen en la cadena q = {q1 , . . . , qm },tf(qi , x) el número de veces que
aparece el término de búsqueda qi en x y k(q, x) ∈ [0, m] el número de términos de búsqueda de q
que aparecen en x.
Función 1: suma del número de apariciones de los términos de búsqueda:
m

(1)

tf(qi , x)

f 1(x, q) =
i=1

Función 2: suma de las frecuencias de los términos de búsqueda:
m

f 2(x, q) =
i=1

tf(qi , x)
n

(2)

Función 3:producto del número de apariciones de los términos de búsqueda:
m

(3)

tf(qi , x)

f 3(x, q) =
i=1

Función 4: producto de la frecuencia de los términos de búsqueda:
m

f 4(x, q) =

tf(qi , x)
n
i=1

(4)

Función 5: suma normalizada del número de apariciones de los términos de búsqueda:
f 5(x, q) =

1
(m − k(q, x) + 1)2

m

tf(qi , x)

(5)

i=1

Función 6: sumanormalizada de la frecuencia de los términos de búsqueda:
f 6(x, q) =

1
(m − k(q, x) + 1)2

1

m

i=1

tf(qi , x)
n

(6)

Se sugiere definir en Python las funciones tf(qi , x) y k(q, x), y utilizar éstas en la definición de las
funciones de similitud que acaban de proponerse, o de otras que puedan proponer los alumnos. Se
valorará la creatividad en la definición de nuevas funcionesde similitud.

3.

Esquema general del programa

El programa deberá solicitar al usuario el nombre de un fichero de texto y una cadena q con los
términos de búsqueda, e imprimir la línea del fichero de texto más parecida a q, o si no se encuentra
ninguna, un mensaje indicando tal circunstancia. Los pasos a seguir son:
1. Inicialmente la máxima similitud será 0.
2. Se deberá definir un cicloque recorra todas las líneas del fichero de texto, calcule la similitud
de cada una de ellas con respecto a q, según alguna de las ecuaciones (1–6) u otra que se
proponga, y actualice (si fuera necesario) las variables que almacenan el valor de máxima
similitud y la línea más parecida a q.
3. Finalmente, se imprimirá la línea más parecida a q, salvo que la máxima similitud sea 0, en
cuyo casose presentará un mensaje indicando que no se han encontrado líneas relacionadas
con q.

4.
4.1.

Lo que necesitamos saber de cadenas y ficheros
De cadenas

En Python una cadena es una secuencia de caracteres. Su única limitación es que una vez creada
no puede ser modificada. Es posible comparar cadenas mediante los operadores relacionales ==, , etc. Así, si queremos saber si dos cadenasson iguales, basta con hacer:
if cad1 == cad2:


Es posible iterar sobre cadenas mediante un ciclo for, lo que permite recorrer uno a uno todos los
caracteres de una cadena. Por ejemplo:
>>> s=’Simbad’
>>> for c in s:
print(c)
S
i
m
b
a
d
>>>

Python ofrece una serie de métodos específicos para las cadenas de caracteres. Un método es similar
a una función, pero se maneja de forma...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS