我有一个包含几个单词的文件,后跟一个整数(它的权重):
home 10
house 15
village 20
city 50
big 15
small 5
pretty 10
...
等等。
如果它们匹配,我需要使用它的单词和包含在前一个文件中的单词来加权一些短语。
“我住在大城市的房子里”这句话的权重 0 + 0 + 0 + 0 + 15 + 0 + 0 + 10 + 50 = 75
这是我使用 Python 的第一种方法,即使我有使用 C 的良好经验:我遇到的困难是我无法达到所需的性能,因为我无法以正确的方式使用正确的 Python 结构. 我能够正确地加权短语,但使用几个“for”和一个函数调用,就像我使用 C 所做的那样。
def weight_word(word, words_file):
fp = open(words_file)
weight = 0
line = fp.readline()
while line:
# One method I discovered to parse the line where there's
# a word, a tab and its weight
left, tab_char, right = line.partition('\t')
if re.match(re.escape(word), left, re.I):
# The previous re.match didn't guarantee an exact match so I need
# even to control their lenghts...
if len(word) == len(left):
weight = right
break
line = fp.readline()
fp.close
return float(weight)
def main():
my_dict = {"dont parse me":"500", "phrase":"I live in a house in a small city", "dont parse me again":"560"}
my_phrase = my_dict["phrase"].split()
phrase_weight = 0
for word in iter(my_phrase):
phrase_weight = phrase_weight + weight_word(word, sys.argv[1])
print "The weight of phrase is:" + str(phrase_weight)
现在我刚刚发现了一些可能对我的案例有用的东西,但我不知道如何正确使用它:
def word_and_weight(fp):
global words_weight
words_weight = {}
for line in fp:
word, weight = line.split('\t')
words_weight[word] = int(weight)
我怎样才能避免对我的短语的每个单词的前一个 for 和对我的函数的调用,以及如何改用按单词索引的最后一种“数组”?我现在有点困惑。