编辑:错误修正
我们的想法是从文件中读取文本,清理文本,然后配对连续的单词(不是permations):
file = f.read()
words = [word.strip(string.punctuation).lower() for word in file.split()]
pairs = [(words[i]+" " + words[i+1]).split() for i in range(len(words)-1)]
然后,对于每对,创建一个列表,列出在整个文本中可以跟随该对的所有可能的单个单词。 dict看起来像
[ConsecWordPair]:[listOfFollowers]
因此,引用给定对的字典将返回可以跟随该对的所有单词。 E.g。
wordsThatFollow[('she', 'was')]
>> ['alone', 'happy', 'not']
我实现此目标的算法涉及 defaultdict(list) ...
wordsThatFollow = defaultdict(list)
for i in range(len(words)-1):
try:
# pairs overlap, want second word of next pair
# wordsThatFollow[tuple(pairs[i])] = pairs[i+1][1]
EDIT: wordsThatFollow[tuple(pairs[i])].update(pairs[i+1][1][0]
except Exception:
pass
我并不担心我必须避免的价值错误“尝试 - 除了' (除非我应该)。问题是算法只能成功返回其中一个关注者:
wordsThatFollow[('she', 'was')]
>> ['not']
很抱歉,如果这篇文章对社区不利,我会在我去的时候搞清楚事情^^
答案 0 :(得分:1)
您的问题是,当您真的要扩展时,您总是会覆盖该值:
# Instead of this
wordsThatFollow[tuple(pairs[i])] = pairs[i+1][1]
# Do this
wordsThatFollow[tuple(pairs[i])].append(pairs[i+1][1])