检索最小频率为5的所有单词

时间:2015-12-16 11:25:53

标签: python nltk

我想用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()

2 个答案:

答案 0 :(得分:3)

使用函数FreqDist获取由您的creteria过滤它们的频率:

  

实验结果的频率分布。一个       频率分布记录每个结果的次数       实验已经发生。例如,频率分布       可用于记录a中每个单词类型的频率       文档。

     

ref

以下是如何使用它的示例:

>>> 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   序列,支持迭代的容器或迭代器。

     

ref

>>> 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']