sklearn.feature_extraction.text 是 scikit-learn 库中专门用于文本特征提取的核心模块,它提供了一系列工具将原始文本数据转换为机器学习算法可以处理的数值特征向量。这个转换过程通常称为向量化(Vectorization)或特征提取(Feature Extraction)。
核心功能
适用场景
CountVectorizer 是文本特征提取的基础工具,它实现了词袋模型(Bag of Words, BoW),将文本转换为词频矩阵。
CountVectorizer 的工作流程:
关键参数
参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
input | str | ‘content’ | 输入类型(‘filename’, ‘file’, ‘content’) |
encoding | str | ‘utf-8’ | 文件编码 |
decode_error | str | ‘strict’ | 编码错误处理方式 |
strip_accents | str/None | None | 是否去除重音符号(‘ascii’, ‘unicode’) |
lowercase | bool | True | 是否转换为小写 |
preprocessor | callable/None | None | 预处理器函数 |
tokenizer | callable/None | None | 分词器函数 |
stop_words | str/list/None | None | 停用词列表('english’或自定义列表) |
token_pattern | str | r’(?u)\b\w\w+\b’ | 用于匹配token的正则表达式 |
ngram_range | tuple (min_n, max_n) | (1, 1) | 生成n-gram的范围 |
analyzer | str/callable | ‘word’ | 分析器类型(‘word’, ‘char’, ‘char_wb’, 或自定义函数) |
max_df | float/int | 1.0 | 过滤出现在超过max_df比例文档中的词 |
min_df | float/int | 1 | 过滤出现在少于min_df比例/数量文档中的词 |
max_features | int/None | None | 限制词汇表大小 |
vocabulary | mapping/iterable/None | None | 自定义词汇表 |
binary | bool | False | 是否使用二进制特征(0/1)而非计数 |
dtype | type | int64 | 特征矩阵的数据类型 |
核心方法
方法 | 说明 |
|---|---|
fit(raw_documents) | 学习词汇表 |
transform(raw_documents) | 将文档转换为文档-词项矩阵 |
fit_transform(raw_documents) | 学习词汇表并转换文档 |
get_feature_names_out() | 获取词汇表中的特征名称 |
get_stop_words() | 获取停用词列表 |
3. 程序实现
import jieba
import sklearn
from sklearn.feature_extraction.text import CountVectorizer
text = ["自然语言处理是人工智能处理的一个重要领域。",
"自然语言处理和深度学习有着密切的关系。",
"自然语言处理有很多自然语言相关的应用。",
"深度学习是机器学习的一个分支。",
]
words_list = [jieba.lcut(t) for t in text]
words_seg_str = [" ".join(t) for t in words_list]
print("分词后的文本:",words_list_str)
count_vec = CountVectorizer()
words_count = count_vec.fit_transform(words_seg_str)
print("词袋及其模型特征向量:")
print(count_vec.get_feature_names_out())
print(words_count.toarray())