Scikit-learn 中,sklearn.feature_extraction.text.CountVectorizer 函数的作用与使用方法的完整攻略
1. 简介
CountVectorizer
是 scikit-learn
中一个非常实用的文本特征提取函数,主要将文本数据转换成词频矩阵,统计每一个文档中每个词语出现的次数,以此构建矩阵。
2. 使用方法
2.1 导入库和数据
先导入相关的第三方库和需要处理的数据:
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
# 假设我们有以下两个文本数据:
doc1 = "Hi, I'm Jack. I like playing games."
doc2 = "I'm interested in playing strategy games like chess."
document_list = [doc1, doc2]
导入库后,我们需要处理的数据为两个文本数据。
2.2 实例1:基本用法
下面是 CountVectorizer
的基本用法,将文本转化成词频矩阵。
# 初始化CountVectorizer模型,将文本转化成词频矩阵
count = CountVectorizer()
bow = count.fit_transform(document_list)
# 输出文本数据中出现的所有单词
print(count.get_feature_names())
# 输出对应的词频矩阵
print(bow.toarray())
该代码段的运行效果如下:
['chess', 'games', 'hi', 'in', 'interested', 'jack', 'like', 'playing', 'strategy']
[[0 1 1 0 0 1 1 1 0]
[1 1 0 1 1 0 0 1 1]]
在下面的结果中:
- 第一行是
document_list
中所有文本中出现的单词。 - 词频矩阵表明每个单词在每个文档中出现的次数。
参数解释
在上面的例子中,我们使用 CountVectorizer
类初始化了一个对象,然后给文本建立了一个词袋模型(Bag of Words,bow)。在 fit_transform()
方法中传入一个文本列表,将这些文本转换成了一个表示文本的词频矩阵,方便进行模型训练和分类。
此外,CountVectorizer
类可以接受许多参数,这里是一些常用参数的解释:
input
:可以传入各种待处理的文本数据,包括列表、字符串、文件路径等。tokenizer
: 用来进行分词的函数。默认使用word_tokenize()
函数。stop_words
: 用来移除停用词的列表或者字符串。ngram_range
: 输入参数是元组,包含两个整数,表示一元语法的单个单词以及多元语法(n-gram)的组合,比如(1,2)表示既包括单个词也包括两个连续的单词组合。max_df
: 在特定条件下忽略高频词的阈值。比如max_df=0.3
,表示出现频率在 30% 以上的单词不能被当做特征词。min_df
: 在特定条件下忽略低频词的阈值。比如min_df=2
,表示只有在至少出现了两次才能当做特征词。
2.3 实例2:添加自定义 stop words
我们可以通过添加自定义的停用词,来进一步清洗数据,提高模型表现:
# 添加停用词表
stopwords = ['I', 'am', 'in', 'like']
# 初始化CountVectorizer模型,并指定停用词表
count = CountVectorizer(stop_words=stopwords)
bow = count.fit_transform(document_list)
# 输出文本数据中出现的所有单词
print(count.get_feature_names())
# 输出对应的词频矩阵
print(bow.toarray())
该代码段的运行效果如下:
['chess', 'games', 'hi', 'interested', 'jack', 'playing', 'strategy']
[[0 1 1 0 1 1 0]
[1 1 0 1 0 1 1]]
在下面的结果中:
- 我们可以观察到,停用词表中的单词不再出现在词袋模型中。
2.4 可视化
最后,我们可以通过 pandas
库将词频矩阵转化为 DataFrame
格式,并进行可视化展示。
# 基于词频矩阵,创建DataFrame对象,然后可视化展示
df_bow = pd.DataFrame(bow.toarray(), columns=count.get_feature_names())
print(df_bow)
该代码段的运行效果如下:
chess games hi interested jack playing strategy
0 0 1 1 0 1 1 0
1 1 1 0 1 0 1 1
在上面的结果中,我们可以观察到通过转换后的词频矩阵成功构建了一个 DataFrame
对象,并得以可视化展示。
3. 总结
在 scikit-learn
中,CountVectorizer
是非常实用的文本特征提取函数,通过它我们可以轻松地将文本数据转换成词频矩阵,以此进行模型训练和分类。在上文中,我们介绍了基本的用法和添加自定义停用词表,同时还通过可视化展示了词频矩阵构建成功后的 DataFrame
格式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 feature_extraction.text.CountVectorizer函数:文本特征提取器 - Python技术站