我有一个列表理解,一旦我添加'not of stop'方法,就不会排序。基本上,当我在此NLTK中包含停止字时,我之前拥有的排序功能现在丢失了。谁能指出我做错了什么?
我现在将所有内容都包含在代码中以供更好的参考。
编辑:
from nltk import word_tokenize
from nltk.corpus import stopwords
import string
stop = stopwords.words('english') + list(string.punctuation)
f = open('review_text_all.txt', encoding="utf-8")
raw = f.read().lower().replace("'", "").replace("\", "").replace(",",
"").replace("ufeff", "")
tokens = nltk.word_tokenize(raw)
bgs = nltk.bigrams(tokens)
fdist = nltk.FreqDist(bgs)
for (k,v) in sorted(fdist.items(), key=lambda x: (x[1] not in stop),
reverse=True):
print(k,v)
这是我的结果,'不停止'
('or', 'irish') 3
('put', 'one') 1
('was', 'repealed') 1
('please', '?') 6
('contact', 'your') 2
('wear', 'sweats') 1
没有"不停止"
('white', 'people') 4362
('.', 'i') 3734
('in', 'the') 2880
('of', 'the') 2634
('to', 'be') 2217
('all', 'white') 1778
您可以看到分类的作品,但是只有我删除"不停止"
排序方法的 key
参数是一个函数,可以让您告诉python to python of哪个键(与列表的项目相关的属性/值)进行分类。
在您的情况下,您的函数将返回真或错。
编辑:
据我了解您要实现的目标,您需要在(或之后)从列表中删除"停止单词"列表中的项目之前(或之后)添加。
类似的东西:
for (k,v) in sorted(filter(lambda x: (x[1] not in stop), fdist.items()), key=lambda x: x[1], reverse=True):
print(k,v)