Advertisement
oleh_korkh

Untitled

Jan 5th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.64 KB | None | 0 0
  1. import string
  2. strip_symbols = string.punctuation + string.whitespace
  3. """ Читаючи всі слова з файлу і кидаючи їх у множину ми втрачаємо можливість
  4. взнати те в оригінальному файлі вони використовувалися. Крім того, ми прибираємо
  5. таким чином дублікати. Тобто, результат роботи програми не буде містити необхідну
  6. корисну інформацію для користувача.
  7. """
  8. with open('input.txt') as input:
  9.     words_from_text = set((word.rstrip(strip_symbols+'-').lower() for word in input.read().split() if len(word) > 2))
  10. with open('words.txt') as vocabulary:
  11.     words_from_vocabulary = [word.rstrip().lower() for word in vocabulary.readlines()]
  12.  
  13. """ Подібне використання словника не є логічним, бо його ідея полягає в тому
  14. щоб мати можливість доступу до значень по ключу. В даному ж випадку це буде
  15. неможливим.
  16. """
  17. list_of_letters = {"BFPV": "1", "CGJKQSXZ":"2", "DT":"3", "L":"4", "MN":"5", "R":"6", "AEIOUHWY":"^"}
  18. def soundex(name):
  19.     name = name.upper()
  20.     """ Хоча явного конфлікту імен у даному випадку не відбувається,
  21.    тим не менш, не потрібно в тілі функції використовувати змінні
  22.    з назвою ідентичною назві самої функції.
  23.    """
  24.     soundex = ""
  25.     for char in name:
  26.         """ Далі йде набір з вкладених циклів для реалізації виборки даних
  27.        зі словника. Подібна складність вказує на некоректне використання
  28.        структури даних dict.
  29.        """
  30.         for key in list_of_letters.keys():
  31.             if char in key:
  32.                 code = list_of_letters[key]
  33.                 if len(soundex)==0:
  34.                     if code != '^':
  35.                         soundex += code
  36.                     else:
  37.                         soundex += '_'
  38.                 elif code != soundex[-1]:
  39.                     soundex += code
  40.     soundex = soundex.replace("^", "")
  41.     if len(soundex) < 4:
  42.         soundex = soundex + '00'
  43.     return name[0] + soundex[1:4]
  44.  
  45. suggestions = []
  46. for w in words_from_text:
  47.         for wc in words_from_vocabulary:
  48.                 if soundex(w) == soundex(wc):
  49.                     if w == wc:
  50.                         """ Немає сенсу так писати. В таких ситуаціях необхідно записувати
  51.                        зворотню умову:
  52.  
  53.                            if w != wc:
  54.                                ...
  55.  
  56.                        і відповідно, блок else буде непотрібний
  57.                        """
  58.                         pass
  59.                     else:
  60.                         suggestions.append(wc)
  61.         """ Наступна умова спрацює навіть якщо слово написано правильно. Адже, якщо воно
  62.        написано правильно, значить воно представлене у words.txt, а значить воно
  63.        буде додано у suggestions.
  64.        """
  65.         if len(suggestions)>0:
  66.             print('May be there is something wrong with:',w.upper(),'suggestions:',','.join(suggestions))
  67.             suggestions.clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement