我想用NLTK检索所有最小频率为5的单词,并将它们存储在变量中以备将来处理。在NLTK书中找不到任何东西。提前谢谢。
编辑:我正在使用此代码,并希望过滤掉不超过5次的单词。
import os
import glob
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
def create():
read_files = glob.glob("D:\\test\\text\\*.txt")
with open("D:\\test\\temp.txt", "wb") as outfile:
for f in read_files:
with open(f, "rb") as infile:
outfile.write(infile.read())
def modify():
tokenizer = RegexpTokenizer("[\w']+")
english_stops = set(stopwords.words('english'))
f = open('D:\\test\\temp.txt')
out = open('D:\\test\\result.txt', 'w')
raw = f.read()
a = tokenizer.tokenize(raw)
a = [word.lower() for word in a if word not in english_stops]
a = list(set(a))
print(a, file=out)
def remove():
os.remove("D:\\test\\temp.txt")
if __name__ == '__main__':
create()
modify()
remove()
答案 0 :(得分:3)
使用函数FreqDist
获取由您的creteria过滤它们的频率:
实验结果的频率分布。一个 频率分布记录每个结果的次数 实验已经发生。例如,频率分布 可用于记录a中每个单词类型的频率 文档。
以下是如何使用它的示例:
>>> import nltk
>>> from nltk import FreqDist
>>> sentence='''This is my sentence is heloo is heloo my my my my'''
>>> tokens = nltk.word_tokenize(sentence)
>>> fdist=FreqDist(tokens)
最后,我们得到了一个包含其频率的单词列表,现在您应该根据条件f(w) >= 5
过滤它们,使用filter
函数:
过滤(功能,可迭代)
从这些元素构造一个迭代器 可迭代的函数返回true。 iterable可以是a 序列,支持迭代的容器或迭代器。
>>> list(filter(lambda x: x[1]>=5,fdist.items()))
[('my', 5)]
答案 1 :(得分:0)
如果不使用NLTK,您可以使用collections
。
>>> from collections import Counter
>>> a = "This is my sentence is heloo is heloo my my my my"
>>> c = Counter(a.split(" "))
>>> [key for key in c.keys() if c.get(key) == 5]
['my']