Python TFIDF矢量器管道上具有不同ngram范围的字和字符ngram

Python TFIDF矢量器管道上具有不同ngram范围的字和字符ngram,python,scikit-learn,text-mining,tf-idf,grid-search,Python,Scikit Learn,Text Mining,Tf Idf,Grid Search,我正在尝试运行一个包含3到5个字符n-gram和1到2个单词n-gram的管道,使用管道和GridSearch,但是我得到了一些错误。以下是完整的代码: def prediction(dataFrame): allText = [] for index, row in dataFrame.iterrows(): allText.append(res) pipeline = Pipeline([ ('vect', TfidfVect

我正在尝试运行一个包含3到5个字符n-gram和1到2个单词n-gram的管道,使用管道和GridSearch,但是我得到了一些错误。以下是完整的代码:

def prediction(dataFrame):
     allText = []
     for index, row in dataFrame.iterrows():
        allText.append(res)

    pipeline = Pipeline([
          ('vect', TfidfVectorizer(min_df=2,analyzer="char",sublinear_tf=True,max_df=0.01,ngram_range=(3,5))),
          ('vec', TfidfVectorizer(min_df=2,sublinear_tf=True,analyzer="word",max_df=0.01,ngram_range=(1,2))),
          ('clf', LinearSVC()),
     ])
     parameters = [{
          'clf__C': [0.1, 0.5, 1, 1.5, 5]
     }]
     grid_search = GridSearchCV(pipeline, parameters,scoring="accuracy",cv=5)
     grid_search.fit(allText,dataFrame.gender)
     print("Best parameter (CV score=%0.3f):" % grid_search.best_score_)
我在FeatureExtraction上得到了一些像“AttributeError:lower not found”这样的EROR,而且所有的文本看起来都是正确的


这种情况下有什么问题?

使用
管道
,可以链接两个
TfidfVectorizer
矢量器,这样在第一个矢量器之后就可以获得数字特征,然后这些特征被传递到第二个矢量器中。但您的目标是连接两个不同的
TfidfVectorizer
特征矩阵。管道按顺序应用变换器(以及最终估计器,如果给定),同时单独运行所有变换器,并将结果连接到单个特征空间中

解决方案:

从sklearn.feature\u extraction.text导入TfidfVectorizer
从sklearn.pipeline导入功能联合,管道
从sklearn.svm导入LinearSVC
#将管道替换为以下内容:
char\u tfidf=tfidf矢量器(analyzer='char',ngram\u范围=(3,5))
word\u tfidf=tfidf矢量器(analyzer='word',ngram\u范围=(1,2))
tfidf=FeatureUnion([('char',char\u tfidf),('word',word\u tfidf)])
管道=管道([('tfidf',tfidf),('clf',LinearSVC())]

它可以工作!谢谢