在 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

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

在 NLTK/Python 中使用电影评论语料库进行分类

使用 python 和 nltk 进行多类文本分类

snownlp和nltk啥关系

使用 Panda 在 Python 中根据名称查找值之间的关系