Как получить частоту смысла словосочетания в NLTK?
В соответствии с документацией, я могу загрузить корпус с тегами смысла в nltk как таковой:
>>> from nltk.corpus import wordnet_ic
>>> brown_ic = wordnet_ic.ic('ic-brown.dat')
>>> semcor_ic = wordnet_ic.ic('ic-semcor.dat')
Я также могу получить definition
, pos
, offset
, examples
в качестве таких:
>>> wn.synset('dog.n.01').examples
>>> wn.synset('dog.n.01').definition
Но как можно получить частоту синтаксиса из корпуса? Чтобы разбить вопрос:
- во-первых, как много раз считать, произошел ли синтаксис с помеченным смыслом корпусом?
- затем следующим шагом является деление на счетчик на общее количество счетчиков для всех вхождений синтаксиса с учетом конкретной леммы.
1 ответ
Решение
Мне удалось сделать это таким образом.
from nltk.corpus import wordnet as wn
word = "dog"
synsets = wn.synsets(word)
sense2freq = {}
for s in synsets:
freq = 0
for lemma in s.lemmas:
freq+=lemma.count()
sense2freq[s.offset+"-"+s.pos] = freq
for s in sense2freq:
print s, sense2freq[s]
Если вам нужно только знать, какое слово наиболее часто встречается, вы можете сделать wn.synsets(word)[0]
поскольку WordNet обычно ранжирует их от самых частых до наименее частых.
(источник: обработка речи и языка Даниила Джурафски, 2-е издание)