我的问题:为什么我必须对代码进行两次评估才能使其真正起作用?我只想过滤高于20的分数。我不知道为什么我必须对其进行两次评估才能真正起作用。 cp似乎没有意识到我已经更改了要使用的文档(doclist [3]与doclist [4]),这是一个滞后。如果我对doclist [4]进行了此类更改,则代码最初将根据doclist [3]输出结果。我必须再次对其进行评估,以获取doclist [4]的结果

fw_2 = filterwords(doclist[3])
scored = finder.score_ngrams(bgm.likelihood_ratio)
finder = BigramCollocationFinder.from_words(fw_2)
# only bigrams that appear 3+ times
finder.apply_freq_filter(2)

fw_2 = [i for i in scored[0:20] if i[1] > 15]


示例输出。

[(('social', 'entrepreneurship'), 127.45178656939063),
 (('business', 'school'), 99.39518918596669),
 (('skoll', 'foundation'), 89.99535318543879),
 (('skoll', 'centre'), 79.35035637864716),
 (('said', 'business'), 75.04493764654694),
 (('silicon', 'valley'), 67.94234171558752),
 (('world', 'forum'), 54.48210837540238),
 (('issues', 'schools'), 48.55122043259024),

最佳答案

将过滤器应用于scored后,定义finder

finder = BigramCollocationFinder.from_words(fw_2)
# only bigrams that appear 3+ times
finder.apply_freq_filter(2)
scored = finder.score_ngrams(bgm.likelihood_ratio)
fw_2 = [i for i in scored[0:20] if i[1] > 15]


您必须运行两次代码,因为在定义finder之后对scored所做的更改不会影响scored

09-28 09:24