Python - igualar palabras en un texto con cadenas en memoria

   
Vista:

igualar palabras en un texto con cadenas en memoria

Publicado por Roberto (1 intervención) el 10/05/2014 06:01:48
Hola, estoy haciendo una aplicación a la que le ingreses una cadena de caracteres, haga todas las permutaciónes posibles y elimine repetidos.

Las palabras obtenidas de las permutaciónes se deben comparar línea por línea hasta encontrar una línea igual a la permutación, y repetir el proceso con las permutaciones restantes.

El archivo contiene esta información:
manila
maria
ana
marta

o también:
https://www.dropbox.com/s/v1s5rg0szz2mzs2/espanol.dic

Aquí anexo un poco de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from __future__ import print_function
import os, re, itertools
 
new_dic_file = "espanol.dic"
 
def uniq(lst):
    # Eliminar repetidos
    key = dict.fromkeys(lst).keys()
    lst = list(key)
    return lst
 
def match(chars, num_chars):
    # Obtener las permutaciones de la cadena ingresada
    combs = itertools.permutations(chars, num_chars)
    result = []
    for combo in combs:
        result.append("".join(combo))
 
    # Iterar con el diccionario español y comparar con las combinaciones de la cadena ingresada
    dic = open(new_dic_file)
    aux = dic.readlines()
    del dic
    aux = uniq(aux)
 
    for word in result:
        for word_dic in aux:
            print()
            print(word, word_dic, end="")
            print(type(word), type(word_dic), end="")
            if word == word_dic:
                print(word)
                print("########## Encontrado!! ##########")

Estuve imprimiendo el tipo de "word" y de "word_dic", y las 2 son tipo str, por lo tanto debería funcionar, cosa que no hace...

Estoy probando con esto:

1
match("aan", 3)

y su resultado es este:

https://www.dropbox.com/s/5xe40kiigbw0cre/dic.png

El cuál debería ser:

ana
########## Encontrado!! ##########

Alguna duda acerca de lo que quiero hacer, por favor diganme...

De antemano, gracias.


https://www.dropbox.com/s/x0fkgrk2uju5gf0/test.py
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

igualar palabras en un texto con cadenas en memoria

Publicado por xve (1229 intervenciones) el 11/05/2014 10:29:49
Hola Roberto, el problema lo tienes, en que las cadenas no son iguales, ya que tiene un espacio en blanco al finalizar la misma...
Utilizando la instrucción strip() funciona!!!

Te he marcado en negrita lo que he añadido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env python
# coding=utf-8
'''
Created on 05/05/2014

@author: roberto
'''
 
from __future__ import print_function
import os, re, itertools
 
dic_file = "espanol.txt"
new_dic_file = "espanol.dic"
spanish_letters = "abcdefghijklmnopqrstuvwxyzñ"
letters_pos = []
diacritic = "áéíóú"
lst = []
 
def quit_diacritic(word):
    word = word.replace("á", "a")
    word = word.replace("é", "e")
    word = word.replace("í", "i")
    word = word.replace("ó", "o")
    word = word.replace("ú", "u")
 
    return word
 
def process_dic(lst):
    for word in file(dic_file):
        ban = False
        for letter in diacritic:
            if letter in word:
                word = quit_diacritic(word)
                lst.append(word)
                ban = True
                break
        if not ban:
            lst.append(word)
    return lst
 
def uniq(lst):
    # Eliminar repetidos
    key = dict.fromkeys(lst).keys()
    lst = list(key)
    return lst
 
def create_dic(lst):
    global new_dic_file
 
    file_dic = open(new_dic_file, "a")
    for word in lst:
        file_dic.write(word.lower())
 
def find(lst, value):
    if value in lst:
        return True
    return False
 
def match(chars, num_chars):
    # Obtener las permutaciones de la cadena ingresada
    combs = itertools.permutations(chars, num_chars)
 
    result = []
    for combo in combs:
        result.append("".join(combo))
 
    # Iterar con el diccionario español y comparar con las combinaciones de la cadena ingresada
    dic = open(new_dic_file)
    aux = dic.readlines()
    del dic
    aux = uniq(aux)
 
    for word in result:
        for word_dic in aux:
            #print()
            #print(word, word_dic, end="")
            #print(type(word), type(word_dic), end="")
            if word.strip() == word_dic.strip():
                print(word)
                print("########## Encontrado!! ##########")
                return
 
def main():
    global lst
    if not os.path.exists(new_dic_file):
        lst = process_dic(lst)
        lst = uniq(lst)
        lst.sort()
        create_dic(lst)
 
    match("aan", 3)
 
"""
# Esta parte de codigo funciona
chida = "aamri"
a = "sasdbimariaiasdna"
combos = itertools.permutations(a,5)
 
result = []
 
for combo in combos:
    result.append("".join(combo))
 
for word in result:
    if word == chida:
        print(word)
    print(word)
 """
 
if __name__ == "__main__":
    main()

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar