如何使用 Python Pandas 从 NLTK 运行朴素贝叶斯?

Posted

技术标签:

【中文标题】如何使用 Python Pandas 从 NLTK 运行朴素贝叶斯?【英文标题】:How to run naive Bayes from NLTK with Python Pandas? 【发布时间】:2015-06-02 23:12:29 【问题描述】:

我有一个带有特征(人名)和标签(人的种族)的 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()

特征集应该是 [(featureset, label)] 的形式,其中特征集变量是 dict(不是 str),标签是特征集的已知类标签。

应该是这样的

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

虽然你没有在你的 sn-p 中包含ethnic_features(),但我希望它返回一个字典。

【讨论】:

以上是关于如何使用 Python Pandas 从 NLTK 运行朴素贝叶斯?的主要内容,如果未能解决你的问题,请参考以下文章

如何从简历中提取学位/教育和年份?在 python 中使用 NLTK

如何使用 nltk 或 python 删除停用词

如何在 Pandas 数据框中应用 NLTK word_tokenize 库以获取 Twitter 数据?

用NLTK/Python生成一串N个随机英文单词

如何在 Python-NLTK 中使用 Gale-Church 算法?

基于NLTK的Python自然语言处理-字符串的操作(切分)