Python NLTK - наивный байесовский классификатор, импортирующий данные Pandas, получающий ошибку распределения вероятности ELE - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть набор рефератов исследований, которые помечены как POS для доступа к медицинской помощи и NEG для доступа к медицинской помощи. У меня буквально есть два поля: (1) аннотация (сводка исследования и (2) класс доступа (то есть POS или NEG). Я работал над примером movie_review с https://www.datacamp.com/community/tutorials/simplifying-sentiment-analysis-python, но хотел начать тестирование точности смой собственный набор данных. Что-то идет не так, как надо. Я получаю эту ошибку, которая, как я полагаю, связана с моим форматом, однако я не уверен, как заставить его соответствовать ... Любая помощь приветствуется.

ValueError: Распределение вероятностей ELE должно иметь хотя бы один бин.

# Load and prepare the dataset
import nltk
from nltk.corpus import movie_reviews
import random
import pandas as pd
from nltk.tokenize import word_tokenize

df = pd.read_excel("accessclasses.xlsx")

a = []

stopwords = nltk.corpus.stopwords.words('english')
aa = df.abstract.tolist()
import re
for each_a in aa:
    each_a = str(each_a)
    each_a = re.sub(r'[^\w\s]','',each_a) 
    words = word_tokenize(each_a)
    filtered_sentence = [w for w in words if not w in stopwords]
    filtered_sentence = ' '.join(filtered_sentence)
    a.append(filtered_sentence)

b = df.accessclass.tolist()

def merge(a, b): 

    merged_list = [(a[i], b[i]) for i in range(0, len(a))] 
    return merged_list 

documents = (merge(a, b))

random.shuffle(documents)

# Define the feature extractor

all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = list(all_words)[:200]

def document_features(document):
    document_words = set(document)
    features = {}
    for word in word_features:
        features['contains({})'.format(word)] = (word in document_words)
    return features

# Train Naive Bayes classifier
featuresets = [(document_features(d), c) for (d,c) in documents]
train_set, test_set = featuresets[50:], featuresets[:50]
classifier = nltk.NaiveBayesClassifier.train(train_set)

# Test the classifier
print(nltk.classify.accuracy(classifier, test_set))

# Show the most important features as interpreted by Naive Bayes
classifier.show_most_informative_features(5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...