2015-07-30 5 views
1

У меня есть следующий код, который оценивает вероятность того, что строка текста принадлежит определенному классу (положительному или отрицательному).Оценка вероятности вероятности NLTK с n-граммами

import pickle 
from nltk.util import ngrams 
classifier0 = open("C:/Users/ned/Desktop/gherkin.pickle","rb") 
classifier = pickle.load(classifier0) 
words = ['boring', 'and', 'stupid', 'movie'] 
feats = dict([(word, True) for word in words]) 
classifier.classify(feats) 
probs = classifier.prob_classify(feats) 
for sample in ('neg', 'pos'): 
    print('%s probability: %s' % (sample, probs.prob(sample))) 

Это приводит к следующему:

neg probability: 0.944 
pos probability: 0.055 
[Finished in 24.7s] 

маринованный классификатор, который я загрузка уже использует п-грамм.

Мой вопрос:

Как я могу изменить этот код так, что п-граммы включены в оценку вероятности?

ответ

0

В зависимости от классификатора N-Gram (с использованием n, используемого для обучения) вы можете сгенерировать n-граммы и классифицировать их с помощью классификатора, получив эти вероятности.

Чтобы создать новые экземпляры, используйте этот пример: (только для двухграмм и трехграмм).

import nltk 
words = nltk.word_tokenize(text) # or your list 
bigrams = nltk.bigrams(words) 
trigrams = nltk.trigrams(words) 
2

Добавьте ngrams в свой художественный Словаре ...

import pickle                                                
from nltk.util import ngrams                                             
fin = open("C:/Users/ned/Desktop/gherkin.pickle","rb")                                       
classifier = pickle.load(fin)                                             
words = ['boring', 'and', 'stupid', 'movie']                                         
ngram_list = words + list(ngrams(words, 2)) + list(ngrams(words, 3))                                   
feats = dict([(word, True) for word in ngram_list])                                       
dist = classifier.prob_classify(feats)                                           
for sample in dist.samples():                                             
    print("%s probability: %f" % (sample, dist.prob(sample))) 

Пример вывода ...

$ python movie-classifer-example.py 
neg probability: 0.999138 
pos probability: 0.000862 
Смежные вопросы