当前位置: 首页 > news >正文

勇闯机器学习(第五关--中文文本特征提取)

以下内容皆为原创,制作实属不易,请点点关注赞赞❥(^_^)

第一关:机器学习概念和流程http://t.csdnimg.cn/IuHh4
第二关:数据集的使用http://t.csdnimg.cn/2jsdi
第三关:特征工程-字典特征提取http://t.csdnimg.cn/ZpMto
第四关:特征工程-文本特征提取http://t.csdnimg.cn/HSGhz

 

这一关,我们学习stop_words的用法和中文分词和特征提取。

一.停用词stop_words

        这个参数是CountVectorizer里面的参数,所谓停用词,就是不想看见的词。为什么不想看见?说明没有意义呗。有意义的我肯定想看啊。接下来看有无参数之前和之后的代码。

from sklearn.feature_extraction.text import CountVectorizerdef count_chinese_demo():#中文文本数据data = ['我 喜欢 你', '你 喜欢 我吗']# 实例化转换器类transfer = CountVectorizer()data_new = transfer.fit_transform(data)print("data_new\n", data_new)print("feature_name\n", transfer.get_feature_names_out())if __name__ == "__main__":count_chinese_demo()

   

嗯嗯,有眼睛的可以看出来这个特征名字是“喜欢”、“我吗”。那我就感觉第二个词不是什么重要的特征,那我就用停用词stop_words。好,那我们继续看加了停用词的效果

transfer = CountVectorizer(stop_words=["我吗"])

 

        OK,家人们。这就看不见那个“我吗”这个特征词。



二.对中文jieba分词

        先给大家一个分词的官方解释地址:jieba · PyPI

        好吧,这翻译过来有点那个,解霸!!其实我第一次看见jieba,还看错了。

        简单来说,jieba库可以中文句子的主语、谓语、动词啥的都准确的分割出来,非常的牛掰,那我们接下来看看jieba库的效果。

        1.jieba库的效果展示

                没安装jieba库的,pip install jieba就可以了,很快的,几秒就可以了。

import jieba
data = "真正的勇气是一种精神的力量,人格的力量,智慧的力量。"
print(jieba.lcut(data))

 嗯嗯,可以看出来,jieba库还是有点东西的,有实力。

这次我们做个小改动,将分割好的元素传给列表,然后再用空格分割在一起,所以不需要我们一个一个去按空格了。还记得我们上次说,要是进行中文特征提取,中文是一个句子,返回的特征值就是整个句子,但是我们按好空格后(人为分词),返回的特征值就是一个个词。但是效率太慢了,所以这就是我们要使用jieba库的原因,提高了效率

from sklearn.feature_extraction.text import CountVectorizer
import jiebadef cut_words(text):text = " ".join(list(jieba.lcut(text)))print(text)if __name__ == "__main__":cut_words("真正的勇气是一种精神的力量,人格的力量,智慧的力量。")

         2.对中文数据进行分词和特征提取

from sklearn.feature_extraction.text import CountVectorizer
import jiebadata = ["真正的勇气是一种精神的力量,人格的力量,智慧的力量。","拥有了这种力量,我们就能独自越过困难堆成的高山;","拥有这种力量,我们就能克服生活的磨难;拥有了这种力量,我们就能成为命运的主宰,始终扬起胜利的风帆。"]# 定义空列表放置分词好后的元素。
data_new = []for sent in data:# 使用jieba.cut后,将生成器转换为列表data_new.append(list(jieba.cut(sent)))# 实例化一个转换器类
transfer = CountVectorizer()# 调用fit_transform
data_final = transfer.fit_transform(data_new)# 输出结果
print("data_new\n", data_final.toarray())
print("feature_name\n", transfer.get_feature_names_out())

 

我嘞个豆,怎么报错了,我真服了。好在还有其他方案。

from sklearn.feature_extraction.text import CountVectorizer
import jieba# 定义数据
data = ["真正的勇气是一种精神的力量,人格的力量,智慧的力量。","拥有了这种力量,我们就能独自越过困难堆成的高山;","拥有这种力量,我们就能克服生活的磨难;拥有了这种力量,我们就能成为命运的主宰,始终扬起胜利的风帆。"]# 实例化一个转换器类,使用jieba进行分词
# tokenizer 应该是一个函数,该函数接受一个字符串并返回一个单词列表。
# analyzer: 这是 CountVectorizer 的一个参数,用于指定如何分析文本。analyzer 可以有三个选项:
#'char': 将文本分割为字符。
# 'char_wb': 将文本分割为字符,但考虑单词边界。
# 'word': 将文本分割为单词,这是默认选项。
transfer = CountVectorizer(analyzer='word', tokenizer=jieba.cut)# 调用fit_transform
data_final = transfer.fit_transform(data)# 输出结果
print("data_new\n", data_final.toarray())
print("feature names\n", transfer.get_feature_names_out())

 这个效果不是太好啊,因为里面还包括标点符号。所以我们还要用stop_words=【】。

transfer = CountVectorizer(analyzer='word', tokenizer=jieba.cut, stop_words=[",","。",";" ]) 

 

虽然麻烦了一点,但是还是解决了,你说是不是。当然现在只是还没找到解决办法,等找到解决办法,我再跟大家分享。

今天主要跟大家分享了stop_words的用法和用sklearn结合jieba库对中文数据进行特征提取

感谢大家的观看,祝愿大家的生活顺顺利利,生活不止工作,陪陪自己的家人。大家拜拜~ 

 


http://www.mrgr.cn/news/7565.html

相关文章:

  • 如何使用ssm实现学生公寓管理系统的设计与实现
  • Python自动化测试工具selenium使用指南
  • 代理模式:静态代理和动态代理
  • Godot《躲避小兵》实战之创建游戏主场景
  • 灵活升级与降级:轻松切换EC2实例类型的最佳实践
  • Java编程:单一职责原则
  • 了解基准测试(benchmark test)
  • CISAW安全运维认证考试重点内容介绍
  • 微服务中不同的容错模式
  • AI引领边缘计算变革,打造嵌入式产业新未来
  • Java笔试面试题AI答之线程(6)
  • 华为od(D卷) 堆内存申请
  • Spring Boot 大数据处理实战:运用迭代器模式避免内存溢出
  • Android DropboxManagerService源码分析
  • C语言家教记录(八)
  • 【系统分析师】-综合知识-计算机网络与信息安全
  • tp5php7.4配置sqlserver问题汇总
  • 浅谈:搭建一个属于自己的网站+源码+售后过程
  • VSCODE 使用正则表达式匹配替换有规律的行
  • D - Pedometer AtCoder Beginner Contest 367