0

我有一个文本文件,指示频率,如“阅读 1 迪克 1 约翰 1 本书 1 阅读 1 个不同的 1 a 1 个不同的 1”我也有一个为这些词定义的字典 dict={'a':1,'book':2 }

我想用它们的字典值替换单词。谁能让我知道这是怎么做的?

4

4 回答 4

4
text = # your text here
dictionary = # your dictionary here (don't call it dict!)
' '.join(str(dictionary.get(word, word)) for word in text.split(' '))
于 2012-05-31T04:30:05.647 回答
1

这很容易:

text = # your text here
for word in dictionary:
    text = text.replace(word, str(dictionary[word]))

编辑

对于子字符串的问题,可以使用正则表达式:

import re
text = # your text here
for word in dictionary:
    text = re.sub('^|\s' + word + '\s|$', str(dictionary[word]) + ' ', text)
于 2012-05-31T04:26:19.293 回答
1
import re
text = # your text here
dictionary = # your dictionary here (don't call it dict!)
re.sub("\\b.+?\\b", lambda x: str(dictionary.get(*[x.group()]*2)), text)
于 2012-05-31T04:38:16.983 回答
0

您也可以使用re.sub,但提供一个函数作为替换参数

import re

frequencies = {'a': 1, 'book': 2}

input_string = "read 1 dick 1 john 1 book 1 read 1 different 1 a 1 different 1 "

def replace_if_found(m):
    word = m.group(1)
    return str(frequencies.get(word, word)) + m.group(2)

print re.sub(r'(\w+)( \d+)', replace_if_found, input_string)

...它为您提供输出:

read 1 dick 1 john 1 2 1 read 1 different 1 1 1 different 1

这样做的好处是它只替换你有一个或多个单词字符后跟一个或多个数字的地方。

于 2012-05-31T04:39:27.883 回答