gpt4 book ai didi

python - 学习 : adding lemmatizer to CountVectorizer

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:59 24 4
gpt4 key购买 nike

我将词形还原添加到我的计数向量化器中,如 Sklearn page 中所述.

from nltk import word_tokenize          
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self, articles):
return [self.wnl.lemmatize(t) for t in word_tokenize(articles)]

tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer,
strip_accents = 'unicode',
stop_words = 'english',
lowercase = True,
token_pattern = r'\b[a-zA-Z]{3,}\b', # keeps words of 3 or more characters
max_df = 0.5,
min_df = 10)

但是,当使用 fit_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_pattern 变为非事件状态。这是没有 token_pattern 的更新后的工作代码(我只需要先安装“punkt”和“wordnet”包):

from nltk import word_tokenize          
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self, articles):
return [self.wnl.lemmatize(t) for t in word_tokenize(articles)]

tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer(),
strip_accents = 'unicode', # works
stop_words = 'english', # works
lowercase = True, # works
max_df = 0.5, # works
min_df = 10) # works

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

# 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,

关于python - 学习 : adding lemmatizer to CountVectorizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com