Python Sklearn:向CountVectorizer添加lemmatizer

Python Sklearn:向CountVectorizer添加lemmatizer,python,scikit-learn,lemmatization,countvectorizer,Python,Scikit Learn,Lemmatization,Countvectorizer,我将柠檬化添加到我的countvectorizer中,如本文所述 然而,当使用fit\u transform创建dtm时,我得到了下面的错误(我无法理解)。在将柠檬化添加到我的矢量器之前,dtm代码总是有效的。我深入阅读了手册,尝试了一些代码方面的东西,但找不到任何解决方案 dtm_tf = tf_vectorizer.fit_transform(articles) 更新: 在遵循下面@MaxU的建议后,代码运行时没有错误,但是我的输出中没有输入数字和标点符号。我运行单独的测试来查看Lemma

我将柠檬化添加到我的countvectorizer中,如本文所述

然而,当使用
fit\u transform
创建dtm时,我得到了下面的错误(我无法理解)。在将柠檬化添加到我的矢量器之前,dtm代码总是有效的。我深入阅读了手册,尝试了一些代码方面的东西,但找不到任何解决方案

dtm_tf = tf_vectorizer.fit_transform(articles)
更新:

在遵循下面@MaxU的建议后,代码运行时没有错误,但是我的输出中没有输入数字和标点符号。我运行单独的测试来查看
LemmaTokenizer()
之后的其他函数中的哪一个起作用和不起作用。结果如下:

strip_accents = 'unicode', # works
stop_words = 'english', # works
lowercase = True, # works
token_pattern = r'\b[a-zA-Z]{3,}\b', # does not work
max_df = 0.5, # works
min_df = 10 # works
显然,它只是
token\u模式
变得不活动。以下是更新后的代码,没有
token\u模式
(我只需要先安装'punkt'和'wordnet'软件包):

对于那些想要删除少于3个字符的数字、标点符号和单词(但不知道如何删除)的人,这里有一种方法可以在使用Pandas dataframe时为我做到这一点

# when working from Pandas dataframe

df['TEXT'] = df['TEXT'].str.replace('\d+', '') # for digits
df['TEXT'] = df['TEXT'].str.replace(r'(\b\w{1,2}\b)', '') # for words
df['TEXT'] = df['TEXT'].str.replace('[^\w\s]', '') # for punctuation 
应该是:

tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer(),
# NOTE:                        ---------------------->  ^^
而不是:

tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer,

感谢您的建议,代码运行时确实没有错误。但是,
LemmaTokenizer()
之后的函数不再工作。最重要的是,
token\u pattern=r'\b[a-zA-Z]{3,}\b'
变得不活跃(因此我的主题充满了数字和标点符号)。是否可以在一个步骤中集成所有内容?还是我把两者分开?(并事先删除数字和标点)。@Rens,请打开一个新问题,提供一个小的(3-5行)可复制的样本数据集和您的代码。我不知道这个问题的答案。但是,sklearn的例子似乎有些草率。lemmatizer需要词性标记才能正常工作。这通常是在标记化之前使用pos_tag nltk函数推断出来的。
tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer(),
# NOTE:                        ---------------------->  ^^
tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer,