Замените слова, используя Soundex, python
У меня есть список предложений, и в основном моя цель состоит в том, чтобы заменить все вхождения разных предлогов в форме "opp,nr,off,abv,behnd" их правильными написаниями "напротив, рядом, сверху, сзади" и так далее. Код soundex слов одинаков, поэтому мне нужно создать выражение, чтобы перебирать этот список слово за словом, и если soundex одинаков, заменить его на правильное написание.
Пример -
["Джек стоял под деревом",
"Они были все, что он планировал",
"Просто стой против опоры",
"Иди к АЗС"
поэтому мне нужно заменить слова nr, abv, opp и twrds их правильными полными формами. Код soundex дляенных и twrds одинаков, поэтому его следует заменить.
мне нужно перебрать этот список..
Вот алгоритм Soundex:
import string
allChar = string.uppercase + string.lowercase
charToSoundex = string.maketrans(allChar, "91239129922455912623919292" * 2)
def soundex(source):
"convert string to Soundex equivalent"
# Soundex requirements:
# source string must be at least 1 character
# and must consist entirely of letters
if (not source) or (not source.isalpha()):
return "0000"
# Soundex algorithm:
# 1. make first character uppercase
# 2. translate all other characters to Soundex digits
digits = source[0].upper() + source[1:].translate(charToSoundex)
# 3. remove consecutive duplicates
digits2 = digits[0]
for d in digits[1:]:
if digits2[-1] != d:
digits2 += d
# 4. remove all "9"s
# 5. pad end with "0"s to 4 characters
return (digits2.replace('9', '') + '000')[:4]
if __name__ == '__main__':
import sys
if sys.argv[1:]:
print soundex(sys.argv[1])
else:
from timeit import Timer
names = ('Woo', 'Pilgrim', 'Flingjingwaller')
for name in names:
statement = "soundex('%s')" % name
t = Timer(statement, "from __main__ import soundex")
print name.ljust(15), soundex(name), min(t.repeat())
Я новичок, так что если вы могли бы предложить другой подход, это было бы оценено. Спасибо.
1 ответ
Я буду использовать модуль Enchant:
import enchant
d = enchant.Dict("en_US")
phrase = ['Jack was standing nr the tree' ,
'they were abv everything he planned' ,
'Just stand opp the counter' ,
'Go twrds the gas station']
output = []
for section in phrase:
sect = ''
for word in section.split():
if d.check(word):
sect += word + ' '
else:
for correct_word in d.suggest(word):
if soundex(correct_word) == soundex(word):
sect += correct_word + ' '
output.append(sect[:-1])