自学内容网 自学内容网

《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)

CountVectorizer方法介绍

  • CountVectorizer 是 scikit-learn 库中的一个工具,它主要用于将文本数据转换为词频矩阵,而不是传统意义上的词向量转换,但可以作为词向量转换的一种基础形式。
  • 用于将文本数据转换为词频矩阵,它是文本特征提取的重要方法之一。

用法

  • 分词:将输入的文本分割成单词或 n-gram 序列。
  • 构建词汇表:统计文本中出现的所有唯一的词,并为每个词分配一个唯一的索引。
  • 生成词频矩阵:对于每一个输入的文本,根据词汇表统计每个词出现的次数,生成一个稀疏矩阵,矩阵的行表示文档,列表示词汇表中的词,元素表示该词在相应文档中的出现频率。

CountVectorizer

在这里插入图片描述

主要参数

  • input=‘content’:输入数据的类型,可以是 ‘content’(字符串)、‘filename’ 或 ‘file’。
  • encoding=‘utf-8’:文本的编码方式。
  • decode_error=‘strict’:解码错误时的处理方式,如 ‘strict’、‘ignore’、‘replace’ 等。
  • strip_accents=None:去除重音字符,可设置为 ‘ascii’ 或 unicode。
  • lowercase=True:将所有字符转换为小写。
  • preprocessor=None:预处理器,用于在分词前对文本进行处理。
  • tokenizer=None:自定义分词器,默认为 None,使用 CountVectorizer 自带的分词器。
  • stop_words=None:停用词列表,可以是 ‘english’ 或自定义的停用词列表。
  • token_pattern=‘(?u)\b\w\w+\b’:用于分词的正则表达式模式。
  • ngram_range=(1, 1):提取 n 元语法的范围,默认为一元语法。
  • analyzer=‘word’:分析器,可以是 ‘word’(单词级)或 ‘char’(字符级)。
  • max_df=1.0:词汇表中一个单词在文档中出现的最大频率,可设置为浮点数(比例)或整数(绝对次数)。
  • min_df=1:词汇表中一个单词在文档中出现的最小频率,可设置为浮点数(比例)或整数(绝对次数)。
  • max_features=None:词汇表的最大大小,限制词汇表中的单词数量。

CountVectorizer例子

from sklearn.feature_extraction.text import CountVectorizer

texts = ["dog cat fish","dog cat cat","fish bird","bird"]
cont = []
# 实例化一个模型
cv = CountVectorizer(ngram_range=(1,3)) 
# 这里实例化了一个 CountVectorizer 对象 cv,ngram_range=(1,3) 表示要考虑的 n-gram 的范围是从 1 个词到 3 个词的组合。
# 例如,对于 "dog cat fish",会考虑 "dog"、"cat"、"fish"、"dog cat"、"cat fish" 和 "dog cat fish" 等。

# 训练此模型
cv_fit = cv.fit_transform(texts) 
# 使用 fit_transform 方法对输入的文本列表 texts 进行训练和转换。
# 它会先对文本进行分词处理,然后统计每个词(或 n-gram)在每个文本中出现的频率。

print(cv.get_feature_names_out())
# 调用 get_feature_names_out 方法,将返回一个包含所有不同的词(或 n-gram)的数组。
# 这些词是在对输入的文本进行处理后得到的词汇表,会根据输入文本中出现的不同词汇以及 n-gram 组合形成。

print(cv_fit)
# 打印 cv_fit,它是一个稀疏矩阵对象,存储了词频信息。由于文本数据通常是稀疏的(大部分元素为 0),
# 所以使用稀疏矩阵来存储可以节省空间和提高计算效率。

# 打印出每个语句的词向量
print(cv_fit.toarray())
# 调用 toarray 方法将稀疏矩阵 cv_fit 转换为密集数组。
# 这样可以更直观地看到每个语句中各个词汇或 n-gram 的出现次数,行代表输入的不同文本,列代表词汇表中的词汇或 n-gram。

# 打印出所有数据求和结果
print(cv_fit.toarray().sum(axis=0))
# 对 cv_fit.toarray() 得到的数组按列求和,即计算每个词汇或 n-gram 在所有文本中出现的总次数。
# axis=0 表示按列进行求和操作。

结果:
在这里插入图片描述


原文地址:https://blog.csdn.net/lou0720/article/details/145102266

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!