- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我将词形还原添加到我的计数向量化器中,如 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/
使用以下代码,CountVectorizer 将“风干肉”分解为 3 个不同的向量。但我想要的是将“风干肉”保留为 1 个向量。我该怎么做? 我运行的代码: from sklearn.feature_
我正在尝试对我拥有的一组推文使用多项式朴素贝叶斯分类。 这是我的代码: import codecs from sklearn.feature_extraction.text import CountV
我正在使用 sklearn python 包,我在使用预先创建的字典创建 CountVectorizer 时遇到问题,其中 CountVectorizer 不会删除以下功能只出现一次或根本不出现。 这
假设我的文本文件包含以下文本: The quick brown fox jumped over the lazy dogs. A stitch in time saves nine. The quic
我已经使用 python 创建了一个文本分类模型。我有 CountVectorizer,它会生成 2034 行和 4063 列(唯一单词)的文档术语矩阵。我保存了用于新测试数据的模型。我的新测试数据
CountVectorizer 忽略大写单词的原因是什么? cv = CountVectorizer(stop_words=None,analyzer='word',token_pattern='.*
有人会尝试向我解释为什么当我尝试 fit_transform 任何短词时 CountVectorizer 会引发此错误吗?即使我使用 stopwords=None 我仍然会得到同样的错误。这是代码 f
我有一个名为 dictionary1 的列表。我使用以下代码获取文本的稀疏计数矩阵: cv1 = sklearn.feature_extraction.text.CountVectorizer(sto
这是我的数据集: anger,happy food food anger,dog food food disgust,food happy food disgust,food dog food neu
我有如下整数列表: mylist = [111,113,114,115,112,115,234,643,565,.....] 我有很多这样的列表,其中包含超过 500 个整数,我想在其上运行 Coun
尝试将字符串转换为数值向量, ### Clean the string def names_to_words(names): print('a') words = re.sub("[^
在我的分类模型中,我需要保留大写字母,但是当我使用 sklearn countVectorizer 构建词汇表时,大写字母转换为小写字母! 为了排除隐式分词,我构建了一个分词器,它只传递文本而无需任何
我是 NLTK 的新人,在创建评论分类器时遇到问题。 当作为输入传递的数据的形状为 (10000,1) 时,我无法理解转换后的数据的形状如何是 1*1 稀疏矩阵我对原始评论数据进行了一些处理。比如删除
我正在尝试从给定的文档中提取一些特征,给定一组预定义的特征。 from sklearn.feature_extraction.text import CountVectorizer features
我已经安装了 python 2.7、numpy 1.9.0、scipy 0.15.1 和 scikit-learn 0.15.2。现在,当我在 python 中执行以下操作时: train_set =
我了解 CountVectorizer 的一般工作原理。它获取单词标记并创建文档(行)和标记计数(列)的稀疏计数矩阵,我们可以将其用于 ML 建模。 但是,它如何处理可能出现在测试数据中但未出现在训练
CountVectorizer 默认标记模式将下划线定义为字母 corpus = ['The rain in spain_stays' ] vectorizer = CountVectorizer(t
我正在尝试将 Lematization 添加到来自 Skit-learn 的 CountVectorizer,如下 import nltk from pattern.es import lemma f
目前,我有一个 CountVectorizer 函数 CountVectorizer(stop_words=stopwords.words('spanish'),token_pattern=r'(?u
我正在清理文本,然后将其传递给 CountVectorizer 函数,以计算每个单词在文本中出现的次数。问题在于它将 10,000x 视为两个单词(10 和 000x)。同样,对于 5.00,它将 5
我是一名优秀的程序员,十分优秀!