нужна помощь в программировании поиска слов в Python - PullRequest
0 голосов
/ 20 сентября 2011

привет, у меня вопрос о питоне, который я новичок по адресу:

У меня есть текстовый файл, который содержит список слов (около 23000) в алфавитном порядке, как небольшой словарь каждая строка - это слово в этом текстовом файле

Я должен создать программу, которая запрашивает у пользователя девять букв, а затем программа должна переставить эти буквы и найти все слова в текстовом файле, которые соответствуют этому набору из девяти букв

Я застрял в коде этой программы, и мне нужна помощь, пожалуйста

это то, что я сделал

Nian = raw_input ("Type in nine letters :")

filename = "dictionary.txt"
fil = open(filename, "r")

lines = fil.read()

tx4 = lines.strip()

a = Nian[0]    
b = Nian[1]      
c = Nian[2]       
d = Nian[3]       
e = Nian[4]    
f = Nian[5]      
g = Nian[6]    
h = Nian[7]     
i = Nian[8]

for w in lines[0:23005]:
       if a or b or c or d or e or f or g or h or i in lines:
       print w 

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Так что, если это точное совпадение этих 9 букв, мы можем быть немного хитрыми здесь. Вместо того, чтобы создавать все эти перестановки и проверять каждую, просто отсортируйте слова в алфавитном порядке, используя встроенную в Python функцию sorted ( doc ), и сравните результат.

"Уловка" здесь в том, что вы ищете анаграмму для этих 9 букв. Например, 'terse' и 'reset' - анаграммы друг друга, но если вы их отсортируете, они оба превратятся в 'eerst'.

Даже если вы не ищете точных совпадений, вы можете использовать этот трюк для оптимизации.

Что касается остальной части программы, если вы ищете некоторые базовые учебные пособия по чтению текстового файла с Python, я уверен, что вы сможете пройти через остальную часть. Удачи!

0 голосов
/ 21 сентября 2011

Первое, что приходит мне в голову, - это наборы.

Это может быть не идеальное решение, но оно должно работать:

match_letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}
for line in file:
    line = line.strip()
    line_letters = set(line)
    # test whether any letter from match_letters is in line_letters
    if line_letters & match_letters:
        print(line)

ИЛИ , если я неправильно понял, и вы ищете слова, которые содержат ВСЕ девять букв:

    if line_letters >= match_letters:
        print(line)

ИЛИ , если вы ищете слова, содержащие ТОЛЬКО эти девять букв:

    if line_letters <= match_letters:
        print(line)
0 голосов
/ 20 сентября 2011

Вот как это сделать:

  1. считайте файл в объект set (), не забудьте удалить '\n' в конце строк, если вы используете метод readlines() объекта file.
  2. итерируйте по всем перестановкам, используя http://docs.python.org/library/itertools.html#itertools.permutations, и проверьте, входит ли одна из этих перестановок в ваш набор. Возможно, вам нужно сопоставить кортеж со строкой, для этого полезно использовать метод join из str.

Вы знаете, что есть 9! = 362880 перестановок?

...