[?] Python - String Matching

Iniciado por h0oke, 8 Noviembre 2009, 21:25 PM

0 Miembros y 1 Visitante están viendo este tema.

h0oke

Qué métodos conocen en python para búsquedas de strings, se que existe "find e index" pero estos solo encuentran la primera ocurrencia. Quisiera saber si es que existen otros métodos.

Novlucker

Básicamente son esas, pero eso ocurre en casi todos los lenguajes, la función find te devuelve la primera coincidencia (también esta rfind), para obtener un array (lista) con las coincidencias debes de hacerlo de manera recursiva o con un loop .. buscas .. encuentras .. y vuelves a buscar tomando como inicio la coincidencia anterior, esto hasta que ya no encuentres nada  :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

h0oke

Gracias, no conocía esa función, y creo que me sirve para encontrar luego de ello la máxima coincidencia y la mínima.

Un saludo!

h0oke

Hola Novlucker, una librería muy útil : "re module" "Regular Expression Operations".

Un saludo!

Novlucker

Claro que si ... pero es que para algo tan sencillo como buscar una misma palabra en una cadena me es "demasiado" hacer uso del modulo re, diferente sería si necesitas buscar palabras cuya "estructura" sea "X", donde el valor de "X" no es constante, lo que tu búscas se soluciona con una función simple

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

h0oke

Mmm, te explico lo que necesito hacer, te doy un ejemplo:

Cadena1 = "HOLA PEREZ JUAN"
Cadena2 = "ADIOS HOL ADIOS ADIOS"

La función  debería devolver, (6,4). Es decir que necesecito encontrar la máxima coincidencia posible entre dos cadenas, pero siendo que en la cadena1 lo debo tener en cuenta desde el inicio, es decir desde la posición "0".

Tu como lo implementarías?

Lo que intento hacer es evadir la búsqueda por complejidad de n², que sería una búsqueda lineal, quiero tratar de hacerlo lo más eficiente posible.

Novlucker

Pero es que así como lo tienes solo se me ocurre de manera líneal, además de que debes de comparar caracteres y no fragmentos de texto, dado que tu en la Cadena1 tienes un texto dado, pero comparas ese texto dado teniendo en cuenta espacios en medio .. lo que se me ocurre es con un loop ignorando espacios (pero seguro que esto también se te ha ocurrido), salvo que estes buscando un espacio

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

h0oke

Exacto, eso último es lo que se me había ocurrido. Entonces al parecer no hay otra manera, aunque alguna vez me recomendaron suffix trix, pero todavía no llego a interpretar cual era su fin dentro de esto. También me recomendaron utilizar diccionarios, en esto último me encuentro.

Gracias  ::)

Novlucker

Justamente tiene que ver con la búsqueda de cadenas ...

Mirate aquí
:http://marknelson.us/1996/08/01/suffix-trees/

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

h0oke