我的问题:为什么我必须对代码进行两次评估才能使其真正起作用?我只想过滤高于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
。