文本特征提取

 文本特征抽取分为两种情况,第一种是文本分析--->偏向于情感分析,第二种是文本分类-->朴素贝叶斯,主要用来对文章分类打标签等:

1)CountVectorizer()
返回词频矩阵
    CountVectorizer(X)
              X:文本或者包含文本的可迭代对象
              返回值:sparse矩阵
    CountVectorizer。inverse_transform(X)
        X:array数组或者sparse矩阵
        返回值:转换之前的数据格式
    CountVectorizer.get_feature_names()
        返回值:单词列表
2)Count  文本分析==》情感分析

# -*- coding: UTF-8 -*-
'''
@Author :Jason
文本特征抽取
流程:
    1.实例化 CountVectorizer()
    2.调用fit_transform()输入数据并转换(利用toarray()将sparse矩阵转换成array数据)
'''
from sklearn.feature_extraction.text import CountVectorizer
import jieba

def CountVectEng():
    '''
    对文本进行特征值化
    :return:
    '''
    cv = CountVectorizer()
    data = cv.fit_transform(["live on the earth,life on the free,i like spring","live on the moon,life on the happy,you like summer"])

    print(cv.get_feature_names()) #所有的词,重复的只看作一次,对单个英文字母不统计,a,b,c没有分类意义
    #['earth', 'free', 'happy', 'life', 'like', 'live', 'moon', 'on', 'spring', 'summer', 'the', 'you']
    print(data)  #每个词在每篇文章中出现的次数
    '''
    #没转换数组前的sparse矩阵
      (0, 8)	1
      (0, 4)	1
      (0, 1)	1
      (0, 3)	1
      (0, 0)	1
      (0, 10)	2
      (0, 7)	2
      (0, 5)	1
      (1, 9)	1
      (1, 11)	1
      (1, 2)	1
      (1, 6)	1
      (1, 4)	1
      (1, 3)	1
      (1, 10)	2
      (1, 7)	2
      (1, 5)	1
    #转换数组
    [[1 1 0 1 1 1 0 2 1 0 2 0]
     [0 0 1 1 1 1 1 2 0 1 2 1]]
    '''
    return None
def CountVectChinese():
    '''
    直接的中文是不会处理的
    :return:
    '''
    cv = CountVectorizer()
    data = cv.fit_transform(
        ["人生 苦短,我用 python", "路漫漫 其修远兮,吾将上下 而求索"])
    print(cv.get_feature_names())
    #['python', '人生', '其修远兮', '吾将上下', '我用', '而求索', '苦短', '路漫漫']
    print(data.toarray())
    '''
    [[1 1 0 0 1 0 1 0]
    [0 0 1 1 0 1 0 1]]
    '''
    return None

def CountVectCh():
    '''
    中文jieba分词
    :return:
    '''
    info_list = [
       "2019年12月2日,知名媒体人剩闲小师傅特意从朋友处看到了发过来的人民日报直播专访胡歌的视频,胡歌在专访中宣传自己的新电影《南方车站的聚会》,并且表达来的一些作为演员的心得观念",
       "胡歌直言:创造型快乐才能持续成长。“经历了人生当中的挫折,不能仅仅只是再红一次。如果要继续做演员,至少我不能重复。",
        "胡歌在早些年前经历了一次车祸,生死只在一线之间,然而上天给了他生的机会,重新回过来头来想,这第二次生命,再继续前面的道路,做演员,做一名优秀的演员,而且让自己还能红一次,"
        "那么意义就不仅仅于此,而是要在电影中诠释不同的角色,正所谓记住我演的角色,但是可以忘记胡歌"
        ]
    data_list = []
    for info in info_list:
        data_list.append(" ".join(list(jieba.cut_for_search(info))))

    cv =CountVectorizer()
    data = cv.fit_transform(data_list)
    print(cv.get_feature_names())
    #['12', '2019', '一些', '一名', '一次', '一线', '上天', '不仅', '不仅仅', '不同', '不能', '专访', '之间', '二次', '人民', '人民日报', '人生', '仅仅', '仅仅只是', '仅只', '他生', '优秀', '但是', '作为', '再红', '创造', '创造型', '前面', '剩闲', '南方', '发过', '发过来', '只是', '可以', '回过', '如果', '媒体', '宣传', '师傅', '年前', '并且', '当中', '心得', '忘记', '快乐', '意义', '成长', '我演', '所谓', '才能', '持续', '挫折', '日报', '早些', '朋友', '机会', '来头', '演员', '然而', '特意', '生命', '生死', '电影', '直播', '直言', '看到', '知名', '第二', '第二次', '经历', '继续', '而且', '而是', '聚会', '胡歌', '自己', '至少', '表达', '观念', '视频', '角色', '记住', '诠释', '车祸', '车站', '过来', '造型', '道路', '那么', '重复', '重新']

    print(data.toarray())
    '''
        [[1 1 1 0 0 0 0 0 0 0 0 2 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0
      1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 0
      0 1 2 1 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0]
     [0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 1
      0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0
      0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0]
     [0 0 0 1 2 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0
      0 0 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 1 1 2 1 0 1 1 1 0 0 0 0 1 1 1 1 1
      1 0 2 1 0 0 0 0 2 1 1 1 0 0 0 1 1 0 1]]
    '''


    return None

if __name__ == "__main__":
    CountVectCh()
3)TF-IDF:信息检索数据挖掘的常用加权技术。
    文本分类==》朴素贝叶斯
    tf:term frequency 词频
    idf:逆文档频率 inverse document frequency  log(总文档数量/该词出现的文档数量)
    重要性程度: tf * idf
    如果某个词或短语在某篇文章中出现的概率高,在其他文章中出现少,则认为该词语或者短语具有很好的类别区分能力
    作用:
        用来评估一个字词对一个文件集或者一个词科库的其中一份文件的重要性。
具体详细说明:

4)TfidfVectorizer()
# -*- coding: UTF-8 -*-
'''
@Author :Jason
TfidfVectorizer 分类机器学习算法的重要依据
'''
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def TfidfChinese():
    '''
    中文jieba分词
    :return:
    '''
    info_list = [
        "2019年12月2日,知名媒体人剩闲小师傅特意从朋友处看到了发过来的人民日报直播专访胡歌的视频,胡歌在专访中宣传自己的新电影《南方车站的聚会》,并且表达来的一些作为演员的心得观念",
        "胡歌直言:创造型快乐才能持续成长。“经历了人生当中的挫折,不能仅仅只是再红一次。如果要继续做演员,至少我不能重复。",
        "胡歌在早些年前经历了一次车祸,生死只在一线之间,然而上天给了他生的机会,重新回过来头来想,这第二次生命,再继续前面的道路,做演员,做一名优秀的演员,而且让自己还能红一次,"
        "那么意义就不仅仅于此,而是要在电影中诠释不同的角色,正所谓记住我演的角色,但是可以忘记胡歌"
    ]
    data_list = []
    for info in info_list:
        data_list.append(" ".join(list(jieba.cut_for_search(info))))

    tf = TfidfVectorizer()
    data = tf.fit_transform(data_list)
    print(tf.get_feature_names())
    #['12', '2019', '一些', '一名', '一次', '一线', '上天', '不仅', '不仅仅', '不同', '不能', '专访', '之间', '二次', '人民', '人民日报', '人生', '仅仅', '仅仅只是', '仅只', '他生', '优秀', '但是', '作为', '再红', '创造', '创造型', '前面', '剩闲', '南方', '发过', '发过来', '只是', '可以', '回过', '如果', '媒体', '宣传', '师傅', '年前', '并且', '当中', '心得', '忘记', '快乐', '意义', '成长', '我演', '所谓', '才能', '持续', '挫折', '日报', '早些', '朋友', '机会', '来头', '演员', '然而', '特意', '生命', '生死', '电影', '直播', '直言', '看到', '知名', '第二', '第二次', '经历', '继续', '而且', '而是', '聚会', '胡歌', '自己', '至少', '表达', '观念', '视频', '角色', '记住', '诠释', '车祸', '车站', '过来', '造型', '道路', '那么', '重复', '重新']

    print(data.toarray()) #重要性
    """
            [[0.17174898 0.17174898 0.17174898 0.         0.         0.
  0.         0.         0.         0.         0.         0.34349795
  0.         0.         0.17174898 0.17174898 0.         0.
  0.         0.         0.         0.         0.         0.17174898
  0.         0.         0.         0.         0.17174898 0.17174898
  0.17174898 0.17174898 0.         0.         0.         0.
  0.17174898 0.17174898 0.17174898 0.         0.17174898 0.
  0.17174898 0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.17174898 0.
  0.17174898 0.         0.         0.10143771 0.         0.17174898
  0.         0.         0.13061952 0.17174898 0.         0.17174898
  0.17174898 0.         0.         0.         0.         0.
  0.         0.17174898 0.20287542 0.13061952 0.         0.17174898
  0.17174898 0.17174898 0.         0.         0.         0.
  0.17174898 0.17174898 0.         0.         0.         0.
  0.        ]
 [0.         0.         0.         0.         0.15207094 0.
  0.         0.         0.         0.         0.39991001 0.
  0.         0.         0.         0.         0.199955   0.15207094
  0.199955   0.199955   0.         0.         0.         0.
  0.199955   0.199955   0.199955   0.         0.         0.
  0.         0.         0.199955   0.         0.         0.199955
  0.         0.         0.         0.         0.         0.199955
  0.         0.         0.199955   0.         0.199955   0.
  0.         0.199955   0.199955   0.199955   0.         0.
  0.         0.         0.         0.11809665 0.         0.
  0.         0.         0.         0.         0.199955   0.
  0.         0.         0.         0.15207094 0.15207094 0.
  0.         0.         0.11809665 0.         0.199955   0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.199955   0.         0.         0.199955
  0.        ]
 [0.         0.         0.         0.14587087 0.22187711 0.14587087
  0.14587087 0.14587087 0.14587087 0.14587087 0.         0.
  0.14587087 0.14587087 0.         0.         0.         0.11093855
  0.         0.         0.14587087 0.14587087 0.14587087 0.
  0.         0.         0.         0.14587087 0.         0.
  0.         0.         0.         0.14587087 0.14587087 0.
  0.         0.         0.         0.14587087 0.         0.
  0.         0.14587087 0.         0.14587087 0.         0.14587087
  0.14587087 0.         0.         0.         0.         0.14587087
  0.         0.14587087 0.14587087 0.17230737 0.14587087 0.
  0.14587087 0.14587087 0.11093855 0.         0.         0.
  0.         0.14587087 0.14587087 0.11093855 0.11093855 0.14587087
  0.14587087 0.         0.17230737 0.11093855 0.         0.
  0.         0.         0.29174173 0.14587087 0.14587087 0.14587087
  0.         0.         0.         0.14587087 0.14587087 0.
  0.14587087]]

    """
if __name__ == "__main__":
    TfidfChinese()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值