在 Python 中使用 NLTK 和 Pandas 解压的值太多
Posted
技术标签:
【中文标题】在 Python 中使用 NLTK 和 Pandas 解压的值太多【英文标题】:Too many values to unpack using NLTK and Pandas in Python 【发布时间】:2015-01-17 16:33:30 【问题描述】:我正在尝试不同的方法来使 NLTK 的朴素贝叶斯使用 NLTK 和 Pandas 模块工作,但我收到“太多值无法解包”错误。
import pandas as pd
from pandas import DataFrame, Series
import numpy as np
import re
import nltk
### Remove cases with missing name or missing ethnicity information
def read_file():
data = pd.read_csv("C:\sample.csv", encoding="utf-8")
frame = DataFrame(data)
frame.columns = ["Name", "Gender"]
return frame
#read_file()
def gender_features(word):
return 'last_letter': word[-1]
#gender_features()
frame = read_file()
featuresets = [(gender_features(n), gender) for (n, gender) in frame]
train_set, test_set = features[500:], featuresets[:500]
classifier = nltkNaiveBayesClassifier.train(train_set)
【问题讨论】:
您在哪一行得到错误?您能否从您的sample.csv
中提供两条示例行?
顺便说一句,在没有人回答您的旧问题后,您因重复问题而被抓到。
您的代码也无法编译和运行...
谢谢,我对 Pandas 和 nltk 都很陌生,我将代码搁置了几天,并认为我正在尝试一些新的东西,这两个帖子是不同的,因为我正在尝试一些示例数据集和我自己的数据集,但回想起来它们不应该是两个不同的帖子,我已经删除了之前的帖子,希望它从公众视野中删除。
【参考方案1】:
我怀疑您在使用 panadas.DataFrame
时尝试做比名称分类更大的事情,因为 DataFrame
对象通常在您的 RAM 有限并且想要在您遍历数据以提取特征时利用磁盘空间时使用:
一个二维标记的数据结构,其列可能是 不同种类。你可以把它想象成一个电子表格或 SQL 表, 或 Series 对象的字典。一般是最常用的 熊猫对象。与 Series 一样,DataFrame 接受许多不同类型的 输入:
一维 ndarray、列表、字典或系列的字典 二维 numpy.ndarray 结构化或记录ndarray 系列 另一个数据帧
我建议你先通过pandas
教程来了解这个库:http://pandas.pydata.org/pandas-docs/dev/tutorials.html
然后从http://www.nltk.org/book/ch06.html了解NLTK分类
首先,访问pandas.DataFrame
对象的方式有几个问题。
要遍历数据框的行,您应该这样做:
# Read file into pandas dataframe
df = DataFrame(pd.read_csv('sample.csv'))
df.columns = ['name', 'gender']
for index, row in df.iterrows():
print row['name'], row['gender']
接下来要训练分类器,您应该这样做:
import numpy as np
import pandas as pd
from pandas import DataFrame, Series
from nltk.corpus import names
from nltk.classify import NaiveBayesClassifier as nbc
# Create a sample.csv file
male_names = [','.join([i,'m']) for i in names.words('male.txt')]
female_names = [','.join([i,'m']) for i in names.words('female.txt')]
with open('sample.csv', 'w') as fout:
fout.write('\n'.join(male_names+female_names))
# Feature extractor function.
def gender_features(word):
return 'last_letter': word[-1]
# Read file into pandas dataframe
df = DataFrame(pd.read_csv('sample.csv'))
df.columns = ['name', 'gender']
# Extract features.
featuresets = [(gender_features(name), gender) for index, (name, gender) in df.iterrows()]
# Split train and test set
train_set, test_set = featuresets[500:], featuresets[:500]
# Train a classifier
classifier = nbc.train(train_set)
# Test classifier on "Neo"
print classifier.classify(gender_features('Neo'))
[出]:
m
【讨论】:
以上是关于在 Python 中使用 NLTK 和 Pandas 解压的值太多的主要内容,如果未能解决你的问题,请参考以下文章
如何从简历中提取学位/教育和年份?在 python 中使用 NLTK