我想知道如何尝试查看我所拥有的单词是否在英语词典中。我有一个字典来自我下载的单词文件,还有一个单词,我想看看它是否接近英语词典中的任何单词。所以我有一个改变的话,例如,如果这个词是像EDBGZH' EDBGZH'和对= {' ED':' TE',' BG':' ST'}我会得到一个新的= =' TESTZH'和它匹配的enlish词典中的单词将是TESTER。所以我想知道如何编写正则表达式来获得匹配。
for word in englishDictionary:
re.match('.....', word) #Want it to print the words that it matches with. Sorry Im new to regular expressions and they're very confusing to me
我希望匹配与更改的字母匹配,并且未更改的字母与要与其余字词匹配的字母匹配。
答案 0 :(得分:0)
你可以这样做,
>>> s = 'EDBGZH'
>>> pairs = {'ED':'TE', 'BG':'ST'}
>>> for i in pairs:
s = s.replace(i, pairs[i])
>>> print(s)
TESTZH
答案 1 :(得分:0)
如果你有一个python的dictionary
,我认为你的密钥是唯一的。但是,您可能会使用EDEDBGZH
之类的字词,那么我们是否应该替换所有源字词中出现的内容?
无论如何,我认为@ AvinashRaj的答案是好的,但我会稍微扩展一下。
让我们有一个'替换'字,TESTZH
。如果您想在字典中找到最接近的匹配,您可能希望使用一些字距功能进行搜索。例如,Levenshtein's distance。它为单词设置了一些标准,与其他单词非常相似。因此,例如,单词winter
和linter
将比winter
和splinter
更加接近,而与winter
和{{python
更接近1}}。
以下是Levenshtein距离函数的代码:
def lev(s1, s2, l1 = None, l2 = None):
if l1 == None:
l1 = len(s1)
if l2 == None:
l2 = len(s2)
if l1 == 0:
return l2
elif l2 == 0:
return l1
if (s1[l1 - 1] == s2[l2 - 1]):
cost = 0
else:
cost = 1
return min([
lev(s1, s2, l1 - 1, l2) + 1,
lev(s1, s2, l1, l2 - 1) + 1,
lev(s1, s2, l1 - 1, l2 - 1) + cost
])
还有一些样本:
print("lev(winter, linter) = %d" % lev('winter', 'linter'))
print("lev(winter, splinter) = %d" % lev('winter', 'splinter'))
print("lev(winter, python) = %d" % lev('winter', 'python'))
>>> lev(winter, linter) = 1
>>> lev(winter, splinter) = 3
>>> lev(winter, python) = 6
这是使用Levenshtein的距离函数在字典中搜索的代码:
dictionary = { 'winter': 'zima', 'spring': 'wiosna', 'summer': 'lato', 'autumn': 'jesień', 'Poland': 'Polska' }
search_for = 'wintr'
similars = { k: dictionary[k] for k in filter(lambda x: lev(x, search_for) <= 3, dictionary.keys()) }
示例运行:
>>> words similar to `wintr`: {'winter': 'zima'}
希望这有帮助!