Python 使用Scikit learn标记预处理文本

Python 使用Scikit learn标记预处理文本,python,hadoop,scikit-learn,bigdata,Python,Hadoop,Scikit Learn,Bigdata,我最近创建了一个hadoop作业,它接受数千个文本文件并执行一些基本的文本处理。工作完成后,我有两个输出文件,用于训练积极情绪和消极情绪。这两个文件如下所示: word1个出现次数 .. wordN num\u出现次数 我想使用sci工具包学习使用支持向量机进行分类,但我不确定如何进行分类,因为我不确定如何正确标记我的数据集。所有教程都假定您正在将原始文本文件提供给sklearn.feature\u extraction.text.CountVectorizer,并且没有进行任何预处理。我也尝试

我最近创建了一个hadoop作业,它接受数千个文本文件并执行一些基本的文本处理。工作完成后,我有两个输出文件,用于训练积极情绪和消极情绪。这两个文件如下所示:

word1个出现次数
..
wordN num\u出现次数

我想使用sci工具包学习使用支持向量机进行分类,但我不确定如何进行分类,因为我不确定如何正确标记我的数据集。所有教程都假定您正在将原始文本文件提供给
sklearn.feature\u extraction.text.CountVectorizer
,并且没有进行任何预处理。我也尝试过使用
FeatureHasher
,但它不是散列单个单词并创建稀疏矩阵,而是为我传递的每个字符创建散列

也就是说,根据我当前的输出文件,有人对提取特征并将其传递给机器学习算法的最佳方法有什么想法吗?谢谢

看一看

由于您使用的是文本特征,因此将为每个特征(单词)指定一个数字,表示其在文本中的重要性。这种表示在基于文本的分类中非常常见

TfidfTransformer将输出一个矩阵,其中包含文件中使用的所有单词,每行表示一个文档,每行中的每个单元格表示一个功能(单词),单元格中的值表示该功能的重要性

确保以适当的格式(矩阵)将字数数据传递给它,然后使用此TfidfTtransformer的输出可以训练分类器


(到目前为止,我还没有使用它,只使用了矢量器版本,但我看到过它可以实现您想要的功能的场景)。

这可能有助于您开始使用它

import numpy as np
import copy
from numpy import *
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.multiclass import OneVsRestClassifier
from sklearn import preprocessing

x_temp_list = []
y_temp_list = []
y_train_text = []
temp_list = []
another_temp_list = []

with open('newtrain.csv','r') as fp:
    lines = fp.readlines()

for line in lines:
    if len(line.strip()) > 1:
        fields = line.split(',')
        if len(line.split(',')) == 2:
            x_temp_list.append(fields[0].strip())
            y_temp_list.append(fields[1].strip())

X_train = np.array(x_temp_list)
y_train_text = np.array(y_temp_list)

X_test = np.array(['Barista'])

mlb = preprocessing.LabelBinarizer()
Y = mlb.fit_transform(y_train_text)

classifier = Pipeline([
    ('vectorizer', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(LinearSVC()))])

classifier.fit(X_train, Y)
predicted = classifier.predict(X_test)
all_labels = mlb.inverse_transform(predicted)
#all_labels = lb.inverse_transform(predicted)

for item, labels in zip(X_test, all_labels):
    print '%s => %s' % (item, labels)

我不太了解的部分是如何将我拥有的转换为TFIDF转换器的输入。我尝试创建如下数组:
[[word1,count],[word2,count]…]
然后将其传递给fit函数,但没有成功。