【发布时间】:2021-09-23 17:08:00
【问题描述】:
我正在尝试创建一个返回单词相似度的函数,但循环在仅处理第一个参数后停止!例如,如果我执行example.py hello there,程序会返回:
hello is close to:
held, heel, helpt, hele, Hallo, het, helaas, half, helden, heb, veel, Meld, zelf, heeft, beeld, alle, wel, Rel, Geld, cel, geld, Alle, hoezo,
there is close to:
这是我的代码:
def create_data():
data =defaultdict(int)
value = 0
for line in sys.stdin:
[ident, user, text, terms] = line.rstrip().split('\t')
for word in terms.split():
data[word] = value
return data
def find_closest(word):
data = create_data()
data_with_distance= defaultdict(int)
for key in data:
distance = lev_dist(word, key)
data_with_distance[key] = distance
return {k: v for k, v in sorted(data_with_distance.items(), key=lambda item: item[1])}
def main():
if len(sys.argv) > 1:
for w in sys.argv[1:]:
print("\n",w, "is close to:\n")
closest = find_closest(w)
closest_words = [k for k, v in closest.items() if v < 4]
#minimal_distance = list(closest.values())[0]
for close in closest_words:
print(close, end=", ")
else:
sys.stderr.write("no argument\n")
if __name__ == '__main__':
main()
【问题讨论】:
-
create_data返回什么? -
请提供minimal reproducible example。您提供的代码无法复制。
-
默认字典,以文本中的所有单词为键,0为值。
-
是的,这就是问题所在。它是非幂等的,因为它会在您第一次运行它时消耗整个
stdin流。调用一次,缓存结果,并将其传递给find_closest。 -
create_data产生一个非空序列一次。