2015-12-16 2 views
-3

Я хочу получить все слова с минимальной частотой 5 с помощью NLTK и сохранить их в переменной для последующей обработки. В книге NLTK ничего не найти. Заранее спасибо.Извлечь все слова с минимальной частотой 5

Редактировать: Я использую этот код и хочу отфильтровывать слова, которые не отображаются более 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() 
+3

Не все описано в книгах. Попробуйте написать код. –

+0

Я стараюсь, но небольшая помощь будет хорошей. – Masyaf

ответ

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 может быть либо последовательностью , либо контейнером, поддерживающим итерацию, либо итератором.

ref

>>> list(filter(lambda x: x[1]>=5,fdist.items())) 
[('my', 5)] 
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'] 
+0

Я работаю с NLTK, поэтому он должен :( – Masyaf

Смежные вопросы