机器学习(第三篇)

一.书接上回!如果我们想将文字替换为中文该如何做呢?

1.1  直接修改data数据

代码如下:

def text_demo():
    data = ["爱中国,爱人民","喜欢上学,喜欢上课"]
    transfer = CountVectorizer()
    data = transfer.fit_transform(data)
    print(data.toarray())
    print(transfer.get_feature_names())
    return None
text_demo()

此时结果又是什么呢?会不会报错呢?

 可见,此时代码将中文进行分类,但是没有进行单个字的分类,这对于日后处理较大数据集时会有较大难度且繁琐,那我们应该如何进行中文特征抽取呢?

 1.2 引进jieba第三方库

首先我们需要下载第三方库,操作流程为:win+r ——> cmd ——> pip install jieba (若是conda则使用conda进行安装)

1.2.1 了解jieba的基本使用方法

这边可查看Python——jieba优秀的中文分词库(基础知识+实例) 进行相应学习

1.2.2 对文本(中文)进行特征抽取

        第一步:使用jieba 对文本进行分词,代码如下:

import jieba

def cut_word(text):

    # 用结巴对中文字符串进行分词
    text = " ".join(list(jieba.cut(text)))

    return text

           第二步:进行文本特征抽取,代码如下:


from sklearn.feature_extraction.text import TfidfVectorizerdef

def text_chinese_count_demo2():
    """
    对中文进行特征抽取
    :return: None
    """
    data = ["吾辈处末世,勿以己之长而盖人;勿以己之善而形人;勿以己之多能而困人。收敛才智,若无若虚。",
            "凡称祸福自己求之者,乃圣贤之言;若谓祸福惟天所命,则世俗之论矣。",
            "学习的敌人是自我的满足,要认真学习一点东西,必须从不自满开始。对自我,学而不厌”对人家,诲人不倦”我们应采取这种态度。"]
    # 将原始数据转换成分好词的形式
    text_list = []
    for sent in data:
        text_list.append(cut_word(sent))
    print(text_list)

    # 1、实例化一个转换器类
    transfer = CountVectorizer()
    # 2、调用fit_transform
    data = transfer.fit_transform(text_list)
    print("文本特征抽取的结果:\n", data.toarray())
    print("返回特征名字:\n", transfer.get_feature_names())

    return None

运行结果:

 结果表明:对应下列特征名字中,列表中每一句话分词之后的词语出现次数,例如0001,其中的“1”所对应的特征名字为“之善”,其在该列表中出现的次数为一次。

 二.该如何处理某个词或短语在多篇文章中出现的次数高这种情况

2.1 引进Tf-idf文本特征提取 

  • TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
  • TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
  • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
  • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到

 为了方便大家理解,给出一个例子:

假如一篇文件的总词语数是100个,而词语"难过"出现了5次,那么"难过"一词在该文件中的词频就是5/100=0.05。而计算文件频率(IDF)的方法是以文件集的文件总数,除以出现"难过"一词的文件数。所以,如果"难过"一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是lg(10,000,000 / 1,0000)=3。最后"难过"对于这篇文档的tf-idf的分数为0.05 * 3=0.15

代码如下:

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

def cut_word(text):

    # 用结巴对中文字符串进行分词
    text = " ".join(list(jieba.cut(text)))

    return text

def text_chinese_count_demo2():
    """
    对中文进行特征抽取
    :return: None
    """
    data = ["吾辈处末世,勿以己之长而盖人;勿以己之善而形人;勿以己之多能而困人。收敛才智,若无若虚。",
            "凡称祸福自己求之者,乃圣贤之言;若谓祸福惟天所命,则世俗之论矣。",
            "学习的敌人是自我的满足,要认真学习一点东西,必须从不自满开始。对自我,学而不厌”对人家,诲人不倦”我们应采取这种态度。"]
    # 将原始数据转换成分好词的形式
    text_list = []
    for sent in data:
        text_list.append(cut_word(sent))
    print(text_list)

    # 1、实例化一个转换器类
    # transfer = CountVectorizer(sparse=False)
    transfer = TfidfVectorizer()
    # 2、调用fit_transform
    data = transfer.fit_transform(text_list)
    print("文本特征抽取的结果:\n", data.toarray())
    print("返回特征名字:\n", transfer.get_feature_names())

    return None
text_chinese_count_demo2()

运行结果:

 

 此时的数据类型更加方便计算机进行学习,提高效率!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睡不醒的恒

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值