替换错误拼写的单词,python

时间:2014-02-13 13:11:38

标签: python replace tuples func

我有一组格式

的元组
ref_set = [(a1,b1),(a2,b2),(a3,b3)...]   

等等。我需要比较句子列表中的单词并检查它是否等于a1a2a3 ..如果word == a1,请将其替换为b1 }。如果是word == a2,请替换为b2,依此类推。

这是我的代码:

def replace_words(x): #function
    for line in x: #iterate over lines in list
        for word in line.split(): #iterate over words in list
            for i,j in ref_set: #iterate over each tuple
                if word == i: #if word is equal to first element
                   word = j  #replace it with 2nd one.  

结果我得到了None;我知道我需要回复一些东西。

1 个答案:

答案 0 :(得分:4)

不要使用元组列表。使用字典:

ref_map = dict(ref_set)

for line in x:
    line = ' '.join([ref_map.get(word, word) for word in line.split()])

否则你有一个NxM循环;对于文本中的每个额外字词,或者在ref_set加倍您需要执行的迭代次数。

您的代码仅重新绑定word,而不是替换line中的字词;上面的列表推导产生了一个新的line值。这不会替换x中的行,但是你需要另一个列表理解:

x = [' '.join([ref_map.get(word, word) for word in line.split()]) for line in x]

从评论中可以看出x不是句子列表,而是一个句子。在这种情况下,您只使用一行处理一个列表理解,如上面x上的循环迭代:

def corrected(line):
    return ' '.join([ref_map.get(word, word) for word in line.split()])