2016-07-27 5 views
1

В NLTK, вы можете легко вычислить счетчики для слов в тексте, скажем, делаяNLTK FreqDist, рассчитайте нормализованные значения?

from nltk.probability import FreqDist 
fd = FreqDist([word for word in text.split()]) 

где текст представляет собой строку. Теперь вы можете построить распределение как

fd.plot() 

и что даст вам хороший линейный график с подсчетами для каждого слова. В docs нет упоминания о способе построения фактических частот вместо этого, который вы можете увидеть в fd.freq(x).

Любой простой способ построения нормализованных счетчиков, без учета данных в других структурах данных, нормализации и печати отдельно?

ответ

1

Вы можете обновить FD [слово] с дескриптором [слово]/всего

from nltk.probability import FreqDist 

text = "This is an example . This is test . example is for freq dist ." 
fd = FreqDist([word for word in text.split()]) 

total = fd.N() 
for word in fd: 
    fd[word] /= float(total) 

fd.plot() 

ПРИМЕЧАНИЕ. Вы потеряете оригинальные значения FreqDist.

0

Простите, что документация отсутствует. В nltk, FreqDist предоставляет вам необработанные отсчеты (то есть частоты слов) в тексте, но ProbDist предоставляет вам вероятности слова с учетом текста.

Для получения дополнительной информации, вы должны сделать некоторый код чтение: https://github.com/nltk/nltk/blob/develop/nltk/probability.py

конкретные строки, которые нормализация приходит образует https://github.com/nltk/nltk/blob/develop/nltk/probability.py#L598

Таким образом, чтобы получить нормированный ProbDist, вы можете сделать следующее:

>>> from nltk.corpus import brown 
>>> from nltk.probability import FreqDist 
>>> from nltk.probability import DictionaryProbDist 
>>> brown_freqdist = FreqDist(brown.words()) 
# Cast the frequency distribution into probabilities 
>>> brown_probdist = DictionaryProbDist(brown_freqdist) 
# Something strange in NLTK to note though 
# When asking for probabilities in a ProbDist without 
# normalization, it looks it returns the count instead... 
>>> brown_freqdist['said'] 
1943 
>>> brown_probdist.prob('said') 
1943 
>>> brown_probdist.logprob('said') 
10.924070185585345 
>>> brown_probdist = DictionaryProbDist(brown_freqdist, normalize=True) 
>>> brown_probdist.logprob('said') 
-9.223104921442907 
>>> brown_probdist.prob('said') 
0.0016732805599763002 
+0

Спасибо. Слишком плохо, что у него нет метода plot(), чтобы показать сюжет, как это делает FreqDist. Кроме того, FreqDist уже имеет метод «freq», который нормализуется, но это не решает мою проблему построения графика непосредственно из объекта. –

+0

Может показаться маловероятным рассчитать вероятности, каковы ваши оси x и y в этом случае? – alvas

+0

Вместо графа я хочу частоту появления, вот и все. Имеет смысл, я хочу знать, какова доля слова в корпусе. Я понимаю, что слово «частота» в лингвистике используется для обозначения подсчетов, но мне нужно соотношение. –

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