Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import string
- strip_symbols = string.punctuation + string.whitespace
- """ Читаючи всі слова з файлу і кидаючи їх у множину ми втрачаємо можливість
- взнати те в оригінальному файлі вони використовувалися. Крім того, ми прибираємо
- таким чином дублікати. Тобто, результат роботи програми не буде містити необхідну
- корисну інформацію для користувача.
- """
- with open('input.txt') as input:
- words_from_text = set((word.rstrip(strip_symbols+'-').lower() for word in input.read().split() if len(word) > 2))
- with open('words.txt') as vocabulary:
- words_from_vocabulary = [word.rstrip().lower() for word in vocabulary.readlines()]
- """ Подібне використання словника не є логічним, бо його ідея полягає в тому
- щоб мати можливість доступу до значень по ключу. В даному ж випадку це буде
- неможливим.
- """
- list_of_letters = {"BFPV": "1", "CGJKQSXZ":"2", "DT":"3", "L":"4", "MN":"5", "R":"6", "AEIOUHWY":"^"}
- def soundex(name):
- name = name.upper()
- """ Хоча явного конфлікту імен у даному випадку не відбувається,
- тим не менш, не потрібно в тілі функції використовувати змінні
- з назвою ідентичною назві самої функції.
- """
- soundex = ""
- for char in name:
- """ Далі йде набір з вкладених циклів для реалізації виборки даних
- зі словника. Подібна складність вказує на некоректне використання
- структури даних dict.
- """
- for key in list_of_letters.keys():
- if char in key:
- code = list_of_letters[key]
- if len(soundex)==0:
- if code != '^':
- soundex += code
- else:
- soundex += '_'
- elif code != soundex[-1]:
- soundex += code
- soundex = soundex.replace("^", "")
- if len(soundex) < 4:
- soundex = soundex + '00'
- return name[0] + soundex[1:4]
- suggestions = []
- for w in words_from_text:
- for wc in words_from_vocabulary:
- if soundex(w) == soundex(wc):
- if w == wc:
- """ Немає сенсу так писати. В таких ситуаціях необхідно записувати
- зворотню умову:
- if w != wc:
- ...
- і відповідно, блок else буде непотрібний
- """
- pass
- else:
- suggestions.append(wc)
- """ Наступна умова спрацює навіть якщо слово написано правильно. Адже, якщо воно
- написано правильно, значить воно представлене у words.txt, а значить воно
- буде додано у suggestions.
- """
- if len(suggestions)>0:
- print('May be there is something wrong with:',w.upper(),'suggestions:',','.join(suggestions))
- suggestions.clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement