Как запустить наивный байес из НЛТК с Python Pandas?

У меня есть CSV-файл с функцией (имена людей) и меткой (этнические группы людей). Я могу настроить фрейм данных с помощью Python Pandas, но когда я пытаюсь связать его с модулем NLTK для запуска наивного байесовского алгоритма, я получаю следующую ошибку:

Traceback (most recent call last):
  File "C:\Users\Desktop\file.py", line 19, in <module>
classifier = nbc.train(train_set)
  File "E:\Program Files Extra\Python27\lib\site-packages\nltk\classify\naivebayes.py", line 194, in train
for fname, fval in featureset.items():
AttributeError: 'str' object has no attribute 'items'

Вот мои коды:

import pandas as pd
from pandas import DataFrame
import re
import numpy as np
import nltk
from nltk.classify import NaiveBayesClassifier as nbc

data = pd.read_csv("C:\Users\KubiK\Desktop\OddNames_sampleData3.csv")
frame = DataFrame(data)
frame.columns = ["feature", "label"]
feature = frame.feature
label = frame.label

# Extract features. 
featuresets = [(feature, label) for index, (feature, label) in frame.iterrows()]
# Split train and test set
train_set, test_set = featuresets[:400], featuresets[400:]
# Train a classifier
classifier = nbc.train(train_set)
# Test classifier on "Neo"
print classifier.classify(ethnic_features('Silva'))

Пример данных:

Name    Ethnicity
J-b'te Letourneau   Scotish
Jane Mc-earthar French
Li Chen Chinese
Amabil?? Bonneau    English
Emma Lef??c French
C., Akeefe  African
D, James Matheson   English

1 ответ

Эта линия

featuresets = [(feature, label) for index, (feature, label) in frame.iterrows()]

душит nbc.train()

наборы функций должны иметь форму [(набор функций, метка)], где переменная набора функций - это dict (не str), а метка - это известная метка класса для набора функций.

Так и должно быть

featuresets = [(ethnic_features(feature), label) for index, (feature, label) in frame.iterrows()]

Несмотря на то, что вы не включили этнические элементы в свой фрагмент, я надеюсь, что он вернет слово.

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