Подтвердить что ты не робот

FreqDist с NLTK

NLTK в Python имеет функцию FreqDist, которая дает вам частоту слов в тексте. Я пытаюсь передать свой текст в качестве аргумента, но результат имеет вид:

[' ', 'e', 'a', 'o', 'n', 'i', 't', 'r', 's', 'l', 'd', 'h', 'c', 'y', 'b', 'u', 'g', '\n', 'm', 'p', 'w', 'f', ',', 'v', '.', "'", 'k', 'B', '"', 'M', 'H', '9', 'C', '-', 'N', 'S', '1', 'A', 'G', 'P', 'T', 'W', '[', ']', '(', ')', '0', '7', 'E', 'J', 'O', 'R', 'j', 'x']

тогда как в примере на сайте НЛТК результатом были целые слова, а не только буквы. Я делаю это так:

file_y = open(fileurl)
p = file_y.read()
fdist = FreqDist(p)
vocab = fdist.keys()
vocab[:100]

Знаете ли вы, что я неправильно, пожалуйста? Спасибо!

4b9b3361

Ответ 1

FreqDist ожидает итератор токенов. Строка итерируется --- итератор выводит каждый символ.

Сначала передайте текст в токенизатор и передайте токены на FreqDist.

Ответ 2

FreqDist работает с массивом токенов. Вы отправляете ему массив символов (строку), где вы должны сначала ввести токены:

words = nltk.tokenize.word_tokenize(p)
fdist = FreqDist(words)

Ответ 3

NLTK FreqDist принимает любую итерацию. Поскольку строка повторяется символ за символом, она разделяет вещи так, как вы их испытываете.

Для того, чтобы подсчитывать слова, вам нужно кормить слова FreqDist. Как ты это делаешь? Что ж, вы можете подумать (как другие предлагали в ответе на ваш вопрос) nltk.tokenize.word_tokenize весь файл в nltk.tokenize.word_tokenize.

>>> # first, let import the dependencies
>>> import nltk
>>> from nltk.probability import FreqDist

>>> # wrong :(
>>> words = nltk.tokenize.word_tokenize(p)
>>> fdist = FreqDist(words)

word_tokenize строит модели слов из предложений. Его нужно кормить каждым предложением по одному. Это сделает относительно плохую работу, если дать целые параграфы или даже документы.

Так что делать? Легко, добавьте в предложение токенизатор!

>>> fdist = FreqDist()
>>> for sentence in nltk.tokenize.sent_tokenize(p):
...     for word in nltk.tokenize.word_tokenize(sentence):
>>>         fdist[word] += 1

Следует иметь в виду, что существует множество способов токенизации текста. Модули nltk.tokenize.sent_tokenize и nltk.tokenize.word_tokenize просто выбирают разумные значения по умолчанию для относительно чистого английского текста. Есть несколько других вариантов на выбор, о которых вы можете прочитать в документации по API.

Ответ 4

Вы просто должны использовать это так:

import nltk
from nltk.probability import FreqDist

sentence='''This is my sentence'''
tokens = nltk.tokenize.word_tokenize(sentence)
fdist=FreqDist(tokens)

Переменная fdist имеет тип "class 'nltk.probability.FreqDist" и содержит частотное распределение слов.

Ответ 5

Если вы не хотите зависеть от nltk tokenizer, вы можете просто использовать разделение строк.

sentence = "This is some text"
print(sentence.split(' '))