TFIDF Vectorizer 给出错误

Posted

技术标签:

【中文标题】TFIDF Vectorizer 给出错误【英文标题】:TFIDF Vectorizer giving error 【发布时间】:2015-03-22 03:26:07 【问题描述】:

我正在尝试使用 TFIDF 和 SVM 对某些文件进行文本分类。特征将一次选择 3 个单词。 我的数据文件已经是这样的格式:天使之眼有,每个人都有自己的。 没有停用词,也不能做 lemming 或 stemming。 我希望特征被选为:天使眼有... 我写的代码如下:

import os
import sys
import numpy
from sklearn.svm import LinearSVC
from sklearn.metrics import confusion_matrix
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn import metrics
from sklearn.datasets import load_files
from sklearn.cross_validation import train_test_split

dt=load_files('C:/test4',load_content=True)
d= len(dt)
print dt.target_names
X, y = dt.data, dt.target
print y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
print y_train
vectorizer = CountVectorizer()
z= vectorizer.fit_transform(X_train)
tfidf_vect= TfidfVectorizer(lowercase= True, tokenizer=',', max_df=1.0, min_df=1, max_features=None, norm=u'l2', use_idf=True, smooth_idf=True, sublinear_tf=False)


X_train_tfidf = tfidf_vect.fit_transform(z)

print tfidf_vect.get_feature_names()
svm_classifier = LinearSVC().fit(X_train_tfidf, y_train)

不幸的是,我在“X_train_tfidf = tfidf_vect.fit_transform(z)”处遇到错误: AttributeError:未找到下层。 如果我修改代码来做

tfidf_vect= TfidfVectorizer( tokenizer=',', use_idf=True, smooth_idf=True, sublinear_tf=False)
print "okay2"
#X_train_tfidf = tfidf_transformer.fit_transform(z)
X_train_tfidf = tfidf_vect.fit_transform(X_train)
print X_train_tfidf.getfeature_names()

我收到错误:TypeError: 'str' object is not callable 谁能告诉我哪里出错了

【问题讨论】:

如果您删除 tokenizer 参数会发生什么? 【参考方案1】:

tokenizer 参数的输入是可调用的。尝试定义一个函数来适当地标记您的数据。如果是逗号分隔则:

def tokens(x):
return x.split(',')

应该可以。

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect= TfidfVectorizer( tokenizer=tokens ,use_idf=True, smooth_idf=True, sublinear_tf=False)

创建一个由,分隔的随机字符串

 a=['cat on the,angel eyes has,blue red angel,one two blue,blue whales eat,hot tin roof']

tfidf_vect.fit_transform(a)
tfidf_vect.get_feature_names()

返回

Out[73]:

[u'angel eyes has',
 u'blue red angel',
 u'blue whales eat',
 u'cat on the',
 u'hot tin roof',
 u'one two blue']

【讨论】:

非常感谢。有效。但是我不明白为什么设置标记器时它不起作用。我只是为了知识而问 当您将字符串 ',' 直接传递给它试图调用该字符串的标记器时。您需要传递一个对数据进行标记的函数。这是你的意思吗?

以上是关于TFIDF Vectorizer 给出错误的主要内容,如果未能解决你的问题,请参考以下文章

获取选定的特征名称 TFIDF Vectorizer

再次加载时存储的 Tfidf-Vectorizer ValueError

如何从管道中的 sklearn TFIDF Vectorizer 返回数据帧?

Sklearn中的T-SNE给出NaN或Inf数据错误

将 Sklearn TFIDF 与其他数据相结合

Vectorizer Python中的单词组合