Sklearn文本特征提取

Sklearn文本特征提取

      • 1、TF-IDF矢量化器
      • 2、英文文档计算TF-IDF
      • 3、中文文档计算TF-IDF




1、TF-IDF矢量化器


Sklearn提供了计算TF-IDF(详见:传送门)值的API:TfidfVectorizer(TF-IDF矢量化器)

class sklearn.feature_extraction.text.TfidfVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, analyzer='word', stop_words=None, token_pattern='(?u)\\b\\w\\w+\\b', ngram_range=(1, 1), max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.float64'>, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)

官方对该API的描述如下:

TfidfVectorizer将原始文档集合转换为TF-IDF特征矩阵。相当于CountVectorizer后接TfidfTransformer。CountVectorizer将文本文档集合转换为词频/字符频数矩阵;TfidfTransformer将词频/字符频数矩阵转换为标准化的TF或TF-IDF矩阵

官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html

API参数及说明如下:

参数说明
inputcontent(默认):输入为字符串或字节类型的文本内容;filename:输入为可序列化的文件名;file:输入为内存中的文件流对象
encoding对给定字节或文件的解码的编码,默认为utf-8
decode_error指定不是encoding编码时,如何做,默认为strict,直接抛出UnicodeDecodeError错误。其他参数:ignore(忽略错误);replace:使用占位符?替换非法字符
strip_accents使用asciiunicode编码在预处理步骤中删除原始文本中的重音符号(accents),重音符号指的是加粗、单引号等,默认为None,不执行此操作
lowercase是否在分词前将所有字符转换为小写,默认为True
preprocessor在分词和生成n-grams时,覆盖预处理阶段,即指定预处理步骤。该参数只在analyzer未设置可调用对象时使用,默认为None
tokenizer在预处理和生成n-grams时,覆盖分词步骤。该参数只在analyzerword时使用
analyzer指定特征向量是基于单词还是n-grams的字符形式。word(默认):特征由单词组成;char:特征由字符组成;char_wb:特征由字符组成(以n-gram为边界,n-gram用空格填充)
stop_words指定停用词,默认为None,不使用停用词,但当max_df参数在[0.7,1.0]时,可以自动检测并根据语料库过滤停用词。其他参数有:english(使用内置默认的英文停用词);list(指定停用词列表,只有在analyzerword时才起作用)
token_pattern分词方式(按正则表达式)。默认筛选长度大于等于2的字母和数字混合字符(标点符号被当作分隔符),仅在analyzerword时使用
ngram_range要提取的n-grams中n值范围的上限和下限,取(min_n,max_n)区间的全部值,元组类型,默认为(1,1)
max_df在构建词汇表时,忽略文档中频率高于该阈值的词条,默认为1.0。float类型应介于[0.0,1.0],表示词条在文档中出现的比例阈值;int类型时,表示词条在文档中出现的频数阈值
min_df在构建词汇表时,忽略文档中频率低于该阈值的词条,默认为1。float类型应介于[0.0,1.0],表示词条在文档中出现的比例阈值;int类型时,表示词条在文档中出现的频数阈值
max_features最大的特征词条数,默认为None,表示词条有多少算多少,这时要注意维度爆炸
vocabulary指定词表的映射,字典类型,key是词条,value是列索引值,默认为None,生成默认词条列索引
binary一个关键词在一个文档中可能出现n次,如果设置为True,非零的n将全部置为1,这对需要布尔值输入的离散概率模型有用。默认为False
dtypefit_transform()transform()函数返回的矩阵元素的数据类型
norm输出结果是否标准化/归一化。l2(默认):向量元素的平方和为1,当应用l2范数时,两个向量之间的余弦相似度是它们的点积;l1:向量元素的绝对值之和为1;None:不使用标准化/归一化
use_idf是否计算IDF,默认为True。设置为False时,IDF=1
smooth_idf是否在文档频率上加1来平滑IDF,避免分母为0,默认为True
sublinear_tf是否应用亚线性tf缩放,即将tf替换为1+log(tf),默认为False

API常用属性及说明如下:

属性说明
vocabulary_特征单词与列索引的映射

API常用方法及说明如下:

方法说明
fit(raw_documents)拟合模型,学习文档词汇和IDF
transform(raw_documents)将文档词汇转成TF-IDF特征矩阵返回
fit_transform(raw_documents)学习文档词汇和IDF,返回TF-IDF特征矩阵,相当于拟合后变换
get_feature_names_out()获取用于转换的不重复的特征词汇
get_stop_words()获取有效的停用词列表

TfidfVectorizer(TF-IDF矢量化器)的一般使用步骤如下:

# 1)定义TF-IDF矢量化器
vectorizer = TfidfVectorizer()
# 2)使用fit_transform拟合转换训练集
train_matrix = vectorizer.fit_transform(X_train)
# 3)使用transform转换测试集
test_matrix = vectorizer.transform(X_test)

以下是TfidfVectorizer(TF-IDF矢量化器)分别在英文文档和中文文档处理中的应用

2、英文文档计算TF-IDF


TfidfVectorizer将原始文本转化为TF-IDF特征矩阵,从而为后续的文本相似度计算奠定基础。以下是一个示例:

1)定义文档

# 定义3个文档
docs = ['I am a student.','I live in Beijing.','I love China.',
]

2)计算TF-IDF值

from sklearn.feature_extraction.text import TfidfVectorizer# TF-IDF矢量化器
vectorizer = TfidfVectorizer()
# 拟合模型
tfidf_matrix = vectorizer.fit_transform(docs)
# 获取所有不重复的特征词汇
print(vectorizer.get_feature_names_out())  # ['am' 'beijing' 'china' 'in' 'live' 'love' 'student']

不知道你有没有发现,这些特征词汇中不包含ia,你能解释这是为什么吗?

# 获取特征词汇的TF-IDF矩阵值
print(tfidf_matrix.todense())
print(tfidf_matrix.toarray())
'''
[[0.70710678 0.         0.         0.         0.         0.0.70710678][0.         0.57735027 0.         0.57735027 0.57735027 0.0.        ][0.         0.         0.70710678 0.         0.         0.707106780.        ]]
'''
# 获取特征词汇与列的对应关系
print(vectorizer.vocabulary_)  # {'am': 0, 'student': 6, 'live': 4, 'in': 3, 'beijing': 1, 'love': 5, 'china': 2}

3、中文文档计算TF-IDF


与英文文档不同,中文文档的词汇之间没有像英文那样的自然空格分割,因此,需要额外处理,要将中文文档转换为类似英文文档中自然空格分割的格式。以下是一个示例:

1)定义文档

# 定义3个文档
docs = ["我是一名学生。","我居住在北京。","我爱中国。"
]

2)中文文档预处理

import jieba# 使用中文分词库jieba进行分词
doc_words = [jieba.lcut(doc) for doc in docs]
new_docs = [' '.join(words) for words in doc_words]
print(new_docs)  # ['我 是 一名 学生 。', '我 居住 在 北京 。', '我 爱 中国 。']

3)计算TF-IDF值

# TF-IDF矢量化器
vectorizer = TfidfVectorizer()
# 拟合模型
tfidf_matrix = vectorizer.fit_transform(new_docs)
# 获取所有不重复的特征词汇
print(vectorizer.get_feature_names_out())  # ['一名' '中国' '北京' '学生' '居住']

同样,这些特征词汇中不包含“我”、“是”、“在”和“爱”,你能解释这是为什么吗?

# 获取特征词汇的TF-IDF矩阵值
print(tfidf_matrix.todense())
print(tfidf_matrix.toarray())
'''
[[0.70710678 0.         0.         0.70710678 0.        ][0.         0.         0.70710678 0.         0.70710678][0.         1.         0.         0.         0.        ]]
'''
# 获取特征词汇与列的对应关系
print(vectorizer.vocabulary_)  # {'一名': 0, '学生': 3, '居住': 4, '北京': 2, '中国': 1}

通过对比,我们发现,在计算中文文档TF-IDF时,需要先对文档进行特别处理,将文档处理成类似英文的自然空格分割形式,以方便应用TF-IDF矢量化器


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BioVendor—Surfactant Protein D Human ELISA

人表面活性剂蛋白D是糖蛋白和钙依赖凝集素胶原亚家族的一员。SP-D是一种同源三聚体蛋白&#xff0c;由三个43kDa单元组成&#xff0c;这些单元在它们的中间结合。大多数SP-D主要含有十二聚体(四个三聚体亚单位)&#xff0c;但也观察到更高的多聚体。每个单元由至少四个离散的结…

格式刷不能跨工作薄使用,VBA自建公式快速获取 单元格背景色RGB值

查看视频效果请点击 文章目录 前言1.数字转字母代码:2.获取单元格背景颜色RGB值代码:前言 格式刷在我们调整Excel工作表、Word文档的格式时经常使用到,它可以帮助我们快速批量调整字体、大小、颜色、背景色等,甚至是表格行高列宽、字间距大小等。但如果在不同的Excel工作薄…

JSP前端怎么学:深入剖析学习路径与技巧

JSP前端怎么学&#xff1a;深入剖析学习路径与技巧 在数字化时代&#xff0c;前端技术作为用户界面的核心&#xff0c;其重要性不言而喻。JSP&#xff08;Java Server Pages&#xff09;作为一种基于Java的Web开发技术&#xff0c;在构建动态Web应用方面有着广泛的应用。那么&…

springmvc揭秘异常处理机制

HandlerExceptionResolver异常处理 HandlerExceptionResolver是专门进行异常处理的&#xff0c;在render之前进行工作&#xff0c;从异常中解析出ModelAndView public interface HandlerExceptionResolver { ModelAndView resolveException( HttpServletRequest re…

解决:写路由文件时引入页面路径没有提示

1、首先安装插件&#xff1a; Path Autocomplete 2、配置settings.json 文件 复制下面代码到settings.json配置文件中&#xff1a; "path-autocomplete.pathMappings": {"": "${folder}/src/","views": "${folder}/src/views/&…

Matlab面向什么编程:深度剖析与应用探索

Matlab面向什么编程&#xff1a;深度剖析与应用探索 Matlab&#xff0c;作为一款广泛应用于工程和科学领域的编程语言和环境&#xff0c;其面向的编程对象和领域具有深厚的内涵和广泛的应用价值。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对Matlab面向的编…

mysql大表的深度分页慢sql案例(跳页分页)-2

1 背景 有一张大表&#xff0c;内容是费用明细表&#xff0c;数据量约700万级&#xff0c; 普通B树索引KEY idx_fk_fymx_qybh_xfsj (qybh,xfsj)。 1.1 原始深度分页sql select t.* from fk_fymx t where t.qybh XXXXXXX limit 100000,100; 深度分页会导致加载数据行过多1000001…

案例实践 | 基于长安链的首钢供应链金融科技服务平台

案例名称-首钢供应链金融科技服务平台 ■ 建设单位 首惠产业金融服务集团有限公司 ■ 用户群体 核心企业、资金方&#xff08;多为银行&#xff09;等合作方 ■ 应用成效 三大业务场景&#xff0c;共计关联29个业务节点&#xff0c;覆盖京票项目全部关键业务 案例背景…

SDL教程(二)——Qt+SDL播放器

前言 ​ 这篇文章主要是使用SDL来打开视频&#xff0c;显示视频。后续会再继续使用SDL来结合FFmpeg。来能够直接使用网上的demo进行学习。 正文 一、环境 Qt 5.15.2 MSVC2019 64bit Win11 二、Qt搭建SDL Qt搭建&#xff0c;我觉得相比用VS2019来说&#xff0c;更为方便&…

【如何用爬虫玩转石墨文档?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

短视频矩阵营销系统V2.3.0

抖音矩阵云混剪系统 源码短视频矩阵营销系统V2.3.0&#xff08;免授权版&#xff09;&#xff08;感觉和上一个版本没什么区别&#xff09;多平台多账号一站式管理&#xff0c;一键发布作品。智能标题&#xff0c;关键词优化&#xff0c;排名查询&#xff0c;混剪生成原创视频&…

k8s集群的存储卷、pvc和pv

目录 简介 简介 PV 全称叫做 Persistent Volume&#xff0c;持久化存储卷。它是用来描述或者说用来定义一个存储卷的&#xff0c;这个通常都是由运维工程师来定义。 PVC 的全称是 Persistent Volume Claim&#xff0c;是持久化存储的请求。它是用来描述希望使用什么样的或者说…

【tansformers库】LLM基本过程 模型加载

参考doc: https://transformers.run/c2/2021-12-08-transformers-note-1/ transformer库 是个啥&#xff1a;封装一些NLP的东西&#xff0c;快速开箱即用&#xff0c;现在也多应用在大模型。 NLP/ LLM 基本过程 整体过程&#xff1a; 预处理&#xff0c;将文本转换为模型能…

Metasploit编程语言:深入剖析其神秘面纱

Metasploit编程语言&#xff1a;深入剖析其神秘面纱 在浩瀚的编程世界中&#xff0c;Metasploit编程语言无疑是一个充满神秘色彩的存在。它以其独特的魅力和强大的功能&#xff0c;吸引着众多编程爱好者和专业人士的目光。然而&#xff0c;对于大多数人来说&#xff0c;Metasp…

【WEEK14】 【DAY4】Swagger Part 2【English Version】

2024.5.30 Thursday Following up on 【WEEK14】 【DAY3】Swagger Part 1【English Version】 Contents 16.4. Configure Scanned Interfaces16.4.1. Modify SwaggerConfig.java16.4.1.1. Use the .basePackage() Method to Specify the Package Path for Scanning16.4.1.2. Ot…

MT一面记录

算法&#xff1a;92 反转链表2 后端 社招 流程&#xff1a; 2. 自我介绍 3. 项目有关问题 4. 基础java八股文 5. 算法 反转链表|| 八股文问题记录 Redis为啥快 Redis如果提前锁被释放了怎么办 JMM 线程池的核心参数&#xff0c;自己怎么用&#xff0c;最大线程数什么时候生效…

【案例实战】 基于OpenCV实现鹿茸面积计算

学习《人工智能应用软件开发》&#xff0c;学会所有OpenCV技能就这么简单&#xff01; 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; 有人在我得B站答疑群里发了下面的图&#xff1a; 问&#xff1a;如何计算鹿茸最外圈蜡皮面积占整个鹿茸…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与TM1638芯片连接的按键的按键值应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与TM1638芯片连接的按键的按键值应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

缓冲字符流

BufferedReader/BufferedWriter增加了缓存机制&#xff0c;大大提高了读写文本文件的效率。 字符输入缓冲流 BufferedReader是针对字符输入流的缓冲流对象&#xff0c;提供了更方便的按行读取的方法&#xff1a;readLine();在使用字符流读取文本文件时&#xff0c;我们可以使…

word多级列表与上一级不匹配

问题&#xff1a;三级列表显示1.1.1&#xff0c;而实际情况应该是2.1.1&#xff0c;如何设置&#xff1f; 方法&#xff1a;鼠标在word原文停留在二级列表上&#xff0c;然后进入多级列表中设置三级列表