Python 3 - 正则表达式 - 匹配字典中的单词

时间:2015-02-18 04:37:07

标签: python regex dictionary

我想知道如何尝试查看我所拥有的单词是否在英语词典中。我有一个字典来自我下载的单词文件,还有一个单词,我想看看它是否接近英语词典中的任何单词。所以我有一个改变的话,例如,如果这个词是像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

我希望匹配与更改的字母匹配,并且未更改的字母与要与其余字词匹配的字母匹配。

2 个答案:

答案 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。它为单词设置了一些标准,与其他单词非常相似。因此,例如,单词winterlinter将比wintersplinter更加接近,而与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'}

希望这有帮助!