NLTK словосочетания для конкретных слов
Я знаю, как получить биграммы и триграммы, используя NLTK, и я применяю их к своим собственным корпусам. Код ниже.
Однако я не уверен насчет (1), как получить словосочетания для конкретного слова? (2) имеет ли NLTK метрику коллокации на основе логарифмического отношения правдоподобия?
import nltk
from nltk.collocations import *
from nltk.tokenize import word_tokenize
text = "this is a foo bar bar black sheep foo bar bar black sheep foo bar bar black sheep shep bar bar black sentence"
trigram_measures = nltk.collocations.TrigramAssocMeasures()
finder = TrigramCollocationFinder.from_words(word_tokenize(text))
for i in finder.score_ngrams(trigram_measures.pmi):
print i
3 ответа
Попробуйте этот код:
import nltk
from nltk.collocations import *
bigram_measures = nltk.collocations.BigramAssocMeasures()
trigram_measures = nltk.collocations.TrigramAssocMeasures()
# Ngrams with 'creature' as a member
creature_filter = lambda *w: 'creature' not in w
## Bigrams
finder = BigramCollocationFinder.from_words(
nltk.corpus.genesis.words('english-web.txt'))
# only bigrams that appear 3+ times
finder.apply_freq_filter(3)
# only bigrams that contain 'creature'
finder.apply_ngram_filter(creature_filter)
# return the 10 n-grams with the highest PMI
print finder.nbest(bigram_measures.likelihood_ratio, 10)
## Trigrams
finder = TrigramCollocationFinder.from_words(
nltk.corpus.genesis.words('english-web.txt'))
# only trigrams that appear 3+ times
finder.apply_freq_filter(3)
# only trigrams that contain 'creature'
finder.apply_ngram_filter(creature_filter)
# return the 10 n-grams with the highest PMI
print finder.nbest(trigram_measures.likelihood_ratio, 10)
Он использует меру вероятности, а также отфильтровывает N грамм, которые не содержат слова "существо"
Вопрос 1 - Попробуйте:
target_word = "electronic" # your choice of word
finder.apply_ngram_filter(lambda w1, w2, w3: target_word not in (w1, w2, w3))
for i in finder.score_ngrams(trigram_measures.likelihood_ratio):
print i
Идея состоит в том, чтобы отфильтровать все, что вы не хотите. Этот метод обычно используется для отфильтровывания слов в определенных частях ngram, и вы можете настроить его на свое усмотрение.
Что касается вопроса № 2, да! НЛТК имеет отношение правдоподобия в своей мере ассоциации. Первый вопрос остается без ответа!
http://nltk.org/api/nltk.metrics.html?highlight=likelihood_ratio