热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习(3)文本特征提取

中文文本特征提取:对文本数据进行特征值化(转换成特征向量),主要有两个API来实现CountVectorizer和Tfidf

中文文本特征提取: 对文本数据进行特征值化(转换成特征向量),主要有两个API来实现 CountVectorizer 和 TfidfVectorizer

sklearn.feature_extraction.text

CountVectorizer:

  • 只考虑词汇在文本中出现的频率

TfidfVectorizer:

  • 除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量
  • 能够削减高频没有意义的词汇出现带来的影响, 挖掘更有意义的特征

相比之下,文本条目越多,Tfidf的效果会越显著

1 CountVectorizer
1.1 API

sklearn.feature_extraction.text.CountVectorizer(stop_words=[])# 返回词频矩阵
CountVectorizer.fit_transform(X)# 文本或包含文本字符串的可迭代对象,返回:spare矩阵
CountVectorizer.inverse_transform(X)# X:array数组或者sparse矩阵,返回值:转换之前数据格式
CountVectorizer.get_feature_names()# 返回单词列表

1.2 适用于英文,而对于中文文本,语言之间没有分隔,人为的将中文句子断开显得不实用。

def count_demo():"""文本特征抽取:CountVectorizer:return:"""data = ["Life is short,i like like python", "Life is too long,i dislike python"]# 1、实例化一个转换器# transfer = CountVectorizer(sparse = False)# 错误用法,CountVectorizer中就没有这个设置# transfer = CountVectorizer(stop_words = ["is", "like"])# 停用词transfer = CountVectorizer()# 2、调用fit_transformdata_new = transfer.fit_transform(data)print("特征名字:\n", transfer.get_feature_names())# print("data_new:\n", data_new, type(data_new))print("data_new:\n", data_new.toarray())return None

def count_chinese_demo():"""中文文本特征抽取:CountVectorizer:return:"""data = ["我 爱 北京 天安门", "天安门 上太阳升"]# 1、实例化一个转换器# transfer = CountVectorizer(sparse = False)# 错误用法,CountVectorizer中就没有这个设置transfer = CountVectorizer()# 2、调用fit_transformdata_new = transfer.fit_transform(data)print("特征名字:\n", transfer.get_feature_names())# print("data_new:\n", data_new, type(data_new))print("data_new:\n", data_new.toarray())return None

1.3 可以先对中文语句进行分词,再进行统计。

def cut_word(text):"""进行中文分词:param text::return:"""a = " ".join(list(jieba.cut(text)))# list列表化,# print(a)return " ".join(list(jieba.cut(text)))return text
def count_chinese_demo2():"""中文文本特征抽取2:return:"""data = ["后天我即将要去往外地工作,不知道未来过的怎么样,祝福自己,祝福家人。","再见了科大计算机的每一位同学,我会想念你们"]data_new = []for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、实例化一个转换器transfer = CountVectorizer(stop_words=["一个", "所以"])# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_new:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return None

2 Tf-idf文本特征提取

  • TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类区分能力,适合用来分类。
  • TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

2.1 公式:

  • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。
  • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到。
    tfidf = tf * idf
    在这里插入图片描述
    例:
    1000篇文章-语料库
    100篇-“非常”
    10篇-“经济”
    两篇文章A&B
    A(100词):10次“经济” Tf-idf:0.2(更重要)
    tf:10/100 = 0.1
    idf:lg 1000/10 = 2
    B(100词):10次“非常” Tf-idf:0.1
    tf:10/100 = 0.1
    idf:lg 1000/100 = 1

2.2 API

sklearn.feature_extraction.text.TfidfVertorizer(stop_words = None,...)
TfidfVertorizer.fit_transform(X)# X:文本或者包含文本字符串的可迭代对象,返回:sparse矩阵
TfidfVertorizer.inverse_transform(X)# X:array数组或者sparse矩阵,返回:转换之前数据格式
TfidfVertorizer.get_feature_names()# 返回:单词列表

2.3 代码

def tfidf_demo():"""用TF-IDF方法进行文本特征抽取:return:"""data = ["后天我即将要去往外地,不知道那里怎么样,祝福自己,祝福家人。","再见了科大计算机的每一位同学,我会想念你们"]data_new = []for sent in data:data_new.append(cut_word(sent))# print(data_new)# 1、实例化一个转换器transfer = TfidfVectorizer(stop_words=["一个", "所以"])# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_new:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return None


推荐阅读
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
author-avatar
奥桑黑黑更健康
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有