Классифицируйте текст, используя NaiveBayesClassifier - PullRequest
0 голосов
/ 29 мая 2018

У меня есть текстовый файл с предложением в каждой строке: например, "" Вы зарегистрировали свой идентификатор электронной почты на своем банковском счете? "

Я хочу классифицировать его как вопросительный или нет. К вашему сведению, это предложенияс веб-сайтов банков. Я видел этот ответ с этим блоком кода nltk:

import nltk
nltk.download('nps_chat')
posts = nltk.corpus.nps_chat.xml_posts()[:10000]


def dialogue_act_features(post):
    features = {}
    for word in nltk.word_tokenize(post):
        features['contains({})'.format(word.lower())] = True
    return features

featuresets = [(dialogue_act_features(post.text), post.get('class')) for post in posts]
size = int(len(featuresets) * 0.1)
train_set, test_set = featuresets[size:], featuresets[:size]
classifier = nltk.NaiveBayesClassifier.train(train_set)
print(nltk.classify.accuracy(classifier, test_set))

Так что я сделал некоторую предварительную обработку для моего текстового файла, т.е.превратить каждое предложение в пакет слов. Из приведенного выше кода у меня есть обученный классификатор. Как мне реализовать его в моем текстовом файле предложений (необработанных или предварительно обработанных)?

Обновление: здесь пример моего текстового файла.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Делает это для всех строк в текстовом файле:

classifier = nltk.NaiveBayesClassifier.train(featuresets)
print(classifier.classify(dialogue_act_features(line)))
0 голосов
/ 29 мая 2018

Предполагая, что вы предварительно обработали данные документа, как мы обсуждали, вы можете сделать следующее:

import nltk
nltk.download('nps_chat')
posts = nltk.corpus.nps_chat.xml_posts()[:10000]


def dialogue_act_features(post):
    features = {}
    for word in nltk.word_tokenize(post):
        features['contains({})'.format(word.lower())] = True
    return features

featuresets = [(dialogue_act_features(post.text), post.get('class')) for post in posts]
size = int(len(featuresets) * 0.1)
train_set, test_set = featuresets[size:], featuresets[:size]

classifier = nltk.NaiveBayesClassifier.train(featuresets)
print(nltk.classify.accuracy(classifier, test_set))

0.668

Для ваших данных вы можете перебирать свои строки и подгонять, прогнозировать:

classifier = nltk.NaiveBayesClassifier.train(featuresets)
print(classifier.classify(dialogue_act_features(line)))
...