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

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

第一关:机器学习概念和流程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 CountVectorizer

def 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 jieba

def 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 jieba

data = ["真正的勇气是一种精神的力量,人格的力量,智慧的力量。",
        "拥有了这种力量,我们就能独自越过困难堆成的高山;",
        "拥有这种力量,我们就能克服生活的磨难;拥有了这种力量,我们就能成为命运的主宰,始终扬起胜利的风帆。"]

# 定义空列表放置分词好后的元素。
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库对中文数据进行特征提取

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

 

  • 28
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡萝卜不甜

感谢大王的赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值