Как получить частоту смысла словосочетания в 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. во-первых, как много раз считать, произошел ли синтаксис с помеченным смыслом корпусом?
  2. затем следующим шагом является деление на счетчик на общее количество счетчиков для всех вхождений синтаксиса с учетом конкретной леммы.

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-е издание)

Другие вопросы по тегам