为什么我的列表理解代码不会立即排序?

时间:2014-03-11 18:13:41

标签: python nltk

我的问题:为什么我必须两次评估代码才能实际工作?我想过滤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),

1 个答案:

答案 0 :(得分:2)

> 之后定义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