用另一个列表中的单词替换文本中出现的单词中的单词

时间:2013-06-06 12:31:30

标签: python

position_list = ['front', 'frnt', 'ft', 'back', 'bck', 'behind', 'right', 'rhs']

position = ['down', 'right', 'inner', 'front', 'top', 'back', 'left']

这是我在PYTHON工作的两个列表。 对于给定的文本,如果出现position_list中的任何单词,则必须将其替换为位置中的特定单词。

即文字是:“轮胎和轮胎的轮胎磨损了”

'frnt'和'bck'必须分别用'front'和'back'替换。

我使用的python代码是:

if wrong == 'frnt' or wrong == 'ft':

str = str.replace(错误,'前')

if wrong == 'bck' or wrong == 'behind':

str = str.replace(错误,'回')

但我正在寻找使用这些列表直接替换单词的python代码。

3 个答案:

答案 0 :(得分:1)

我真的没有得到这两个列表结构的标题。目前还不清楚,我认为你不能从中获得适当的算法。

你说:“对于给定的文本,如果出现position_list中的任何单词,则必须用位置中的特定单词替换”,这意味着' front '必须替换为' down ',' frnt 'by' right '和' rhs '没有替代品。这毫无意义!

所以我猜测,从你的其他问题来看,你希望' front '后面的单词被' front '替换,并且“ back ”后面的单词将被“ back ”替换。但是,没有任何信息可以帮助算法知道哪些词是替换词,以及要替换哪些词。

所以唯一的解决方案就是以更加pythonic的方式改变你的结构,从而制作一个简单而优雅的算法。然后,您可能想尝试这样的结构:

position = ['front', 'back']
position_list = [('frnt', 'ft'), ('bck')]

然后算法看起来像:

replaces = zip(position, position_list)
for new_word, old_words in replaces:
    for old_word in old_words:
        str = str.replace(old_word, new_word)

您还可以使用字典:

positions = {'front': ['frnt', 'ft'], 'back': ['bck']}
for new_word, old_words in positions.iteritems():
    for old_word in old_words:
        str = str.replace(old_word, new_word)

换句话说,尝试避免创建最终导致算法处理列表索引的结构......

答案 1 :(得分:0)

您需要在两个列表之间进行某种映射,否则您无法弄清楚要用什么替换。你可以用dict:

t = 'The frnt tyre'

words = {
    'front': ('frnt', 'frt'),
}

for word, repl in words.items():
    for r in repl:
        t = t.replace(r, word)

print t

结果:

The front tyre

答案 2 :(得分:-1)

我认为使用sting.replace()方法,(也许)会替换你不想替换的子字符串@oleg指示

我知道这不是更干净的方法,但也许使用字典和.split()和.join()会有所帮助。

s = 'the frt bck behind'
l = s.split()
new =[]
d ={'frt':'front','behind':'back','bck':'back'}
for word in l:
    if word in d:
        new.append(d[word])
    else:new.append(word)    
print " ".join(new)
>>> the front back back

我认为会出现大写和下标和标点符号的问题,但很容易用一些string.replace()s来解决它