Найти - Пользователи
Полная версия: Простые вопросы по использованию функций библиотеки NLTK
Начало » Python для новичков » Простые вопросы по использованию функций библиотеки NLTK
1
Ksenon2611
Всем привет!

Я пишу курсовую, нужно реализовать код на языке Python.
Не могли бы помочь в некоторых вопросах по синтаксису.
Я считал текстовый файл,разбил его на слова с помощью функции tokenize().
Дальше использую функцию FreqDist(),которая выводит мне в порядке убывания наиболее повторяющиеся слова в моём тексте.
fdist = nltk.FreqDist(my_tokenize)

Как мне изменить код чтобы в fdist сохранялись только первые 3 слова с наибольшей частотой повторения в тексте?
пробовал через цикл ,но не получилось, синтаксис плохо знаю)

Заранее спасибо.
doza_and
наверное так?
fdist = nltk.FreqDist(my_tokenize)[:3] 
Но надо добавить обработку ошибок - вдруг там не будет 3 слов.
lavrton
doza_and
Но надо добавить обработку ошибок - вдруг там не будет 3 слов.
Не надо:
In [1]: a=[1]
In [2]: a[:3]
Out[2]: [1]

Nata
lavrton
наверное так?
нет, fdist не лист, а словарь
most_frequent = fdist.keys()[:3]
еще лучше избавиться от знаков пунктуации, а то “.” “,” возможно окажутся самыми многочисленными и убрать заглавные буквы ( а то ‘Кот’ и ‘кот’ будут считаться как разные слова)
no_punkt = [word.lower() for word in my_tokenize if word.isalnum()]
fdist = nltk.FreqDist(no_punkt)
most_frequent = fdist.keys()[:3]
Ksenon2611
Спасибо большое за ответы!)

Ещё одна проблемка.
Программа должна определять тематику(жанр) считанного текста из файла.
Использовал в качестве библиотеки NLTK.
Проблема в последних строчках,видимо в test_docs.туда я заношу самые “популярные” слова из моего текста,и классификатор по ним ищет схожесть с словами из базы Brown.


# Text Classification Demo Version
import nltk      #Connect to library
#nltk.usage(nltk.classify.ClassifierI)
from nltk.corpus import brown
import random
f=open("C:\\Test\check.txt")
text=f.read()
f.close()                
words=nltk.tokenize.word_tokenize(text)            #Split text on words
stopw=open("C:\\Test\stopwords.txt")          #Text including stop words
stop=stopw.read()
stopw.close()
stopwords=nltk.tokenize.word_tokenize(stop)
filteredtext = [t for t in words        #Delete all stop words from input text
                if t.lower() not in stopwords]
filtertext = [word.lower() for word in filteredtext if word.isalnum()]
filttext=nltk.FreqDist(filtertext)
test = filttext.keys()[:3]   #Find 3 most popular words
print test
def word_feats(words):
    return dict([(word,True) for word in words])
train_docs = [(word_feats(brown.words(fileid)),category)
             for category in brown.categories()
             for fileid in brown.fileids(category)]
test_docs = [test]
classifier = nltk.classify.NaiveBayesClassifier.train(train_docs)
print classifier.classify(test_docs)

Выдаётся следующая ошибка:

Traceback (most recent call last):
File “C:\Users\Павел\Desktop\Курсовая\программа\classify_words.py”, line 43, in <module>
print classifier.classify(test_docs)
File “C:\Python27\lib\site-packages\nltk\classify\naivebayes.py”, line 88, in classify
return self.prob_classify(featureset).max()
File “C:\Python27\lib\site-packages\nltk\classify\naivebayes.py”, line 94, in prob_classify
featureset = featureset.copy()
AttributeError: ‘list’ object has no attribute ‘copy’

Первый раз пишу программу на Питоне,был бы благодарен,если бы подсказали,где ошибка .
reclosedev
Ksenon2611
AttributeError: ‘list’ object has no attribute ‘copy’
Видимо, в функцию classify необходимо передавать словарь
...
test_docs = word_feats(test)
Ksenon2611
reclosedev,даааа,Работает!!!
Спасибо большое тебе)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB