精华内容
下载资源
问答
  • 入门sklearn之文本特征提取
    2021-12-02 23:19:22

    文本特征提取

     提取方式:

    • 以句子的方式
    • 以字母的方式
    • 以单词的方式,统计单词出现的个数

    我们介绍单词的方式,而不是句子或者字母的方式。因为句子和字母比较受限。

    示例一:英文句子

    import sklearn.feature_extraction.text as text
    transfor = text.CountVectorizer()
    t = ['life is short, i like python', 'life is too long, i dislike python']
    t_new = transfor.fit_transform(t)  # 特征转换
    # 特征矩阵
    # sparse对象存在方法.toarray()方法,可以直接转化成one-hot矩阵
    print(t_new.toarray())
    # 特征名称:
    transfor.get_feature_names()

    [[0 1 1 1 0 1 1 0]
     [1 1 1 0 1 1 0 1]]
    ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

    注意,sklearn的文本特征提取会把单个字母和符号进行忽略 

    示例二:中文句子特征提取

    那么,这里问题来了,如果要转换成中文,怎么办?

    1. 我们可以看到,英文句子的单词之间有一个特殊的地方在于,存在空格!!!
    2. 我们可以效仿,中文句子的买一个词之间,产生空格!!这里我们可以应用jieba库来实现
    import sklearn.feature_extraction.text as text
    transfor = text.CountVectorizer()
    t = ['我 爱 中国 母亲', '大河 向 东流']
    t_new = transfor.fit_transform(t)  # 特征转换
    # 特征矩阵
    # sparse对象存在方法.toarray()方法,可以直接转化成one-hot矩阵
    print(t_new.toarray())
    # 特征名称:
    transfor.get_feature_names()

    [[0 1 0 1]
     [1 0 1 0]]
    
    ['东流', '中国', '大河', '母亲']

    示例三:中文句子特征提取(jieba库的拓展)

    import jieba
    
    text = '简要介绍了相关的人工智能技术,如专家系统,人工神经网络,模糊理论,遗传算法及网络等的基本概念,并在此基础上对文献中提出的相应的输电网络故障诊断方法进行述评,分析它们在输电网嶷故障诊断中应用的特点以及存在的主要问题'
    text_list = text.split(',')
    data_list = []
    for sentence in text_list:
        data_list.append(' '.join(jieba.cut(sentence)))
        
        
    import sklearn.feature_extraction.text as text
    transfor = text.CountVectorizer()
    t_new = transfor.fit_transform(data_list)  # 特征转换
    # 特征矩阵
    # sparse对象存在方法.toarray()方法,可以直接转化成one-hot矩阵
    print(t_new.toarray())
    # 特征名称:
    transfor.get_feature_names()
    [[0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0]
     [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
     [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0]
     [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0]
     [0 1 0 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1]]
    ['专家系统',
     '主要',
     '人工智能',
     '人工神经网络',
     '介绍',
     '以及',
     '分析',
     '基本概念',
     '存在',
     '它们',
     '应用',
     '技术',
     '提出',
     '故障诊断',
     '文献',
     '方法',
     '模糊',
     '此基础',
     '特点',
     '理论',
     '相关',
     '相应',
     '简要',
     '网络',
     '输电',
     '输电网',
     '进行',
     '述评',
     '遗传算法',
     '问题']

    学习地址: 

     ​​​​​​黑马程序员3天快速入门python机器学习_哔哩哔哩_bilibili

    更多相关内容
  • 一种基于深度学习的中文文本特征提取与分类方法.pdf
  • 一、文本特征提取 1、基础理论 分隔依据:以空格作为...3、提取特征值 3、API介绍 sklearn.feature_extraction.text.CountVectorizer 4、特征值转化为二维矩阵 # 数据集 data = ['life is short,...

    目录

     一、文本特征提取

    1、基础理论

    2、过程

    3、API介绍

    4、特征值转化为二维矩阵

    5、特征值转化为稀疏矩阵

    代码

    二、中文文本特征提取

    1、字符串列表中文处理

    1-1、得到初始数据集

    1-2、创建词语生成器

    1-3、分割得到的中文字符串

    1-4、返回列表字符串

    2、稀疏矩阵

    3、二维矩阵


     一、文本特征提取

    1、基础理论

    分隔依据:以空格作为分隔。

    排序依据:按照顺序进行排序(即数字->A->Z)

    (注:标点符号和单个字符忽略。)

    stop_words( )停用单词

    2、过程

    1、获取数据集

    2、实例化转换器类

    3、提取特征值

    3、API介绍

    sklearn.feature_extraction.text.CountVectorizer

    4、特征值转化为二维矩阵

    # 数据集
    data = ['life is short, i like like AI', 'life is short, i dislike dislike AI']
    
    # 提取特征值,转化为二维矩阵
    def Matrix():
        # 1、实例化转换器类
        transfer = CountVectorizer()
    
        # 2、提取特征值
        feature_data = transfer.fit_transform(data)
    
        print('二维矩阵特征值:\n', feature_data.toarray())
        print('特征名字:', transfer.get_feature_names())

    5、特征值转化为稀疏矩阵

    # 数据集
    data = ['life is short, i like like AI', 'life is short, i dislike dislike AI']
    
    # 提取特征值,转化为稀疏矩阵
    def Sparse():
        # 1、实例化转换器类
        transfer = CountVectorizer()
    
        # 2、提取特征值
        feature_data = transfer.fit_transform(data)
    
        print('稀疏矩阵特征值\n', feature_data)
        print('特征名字:', transfer.get_feature_names())

     (按照顺序进行排序(即数字->A->Z),标点符号和单个字符忽略。)

    代码

    # 文本特征提取
    from sklearn.feature_extraction.text import CountVectorizer
    
    # 数据集
    data = ['life is short, i like like AI 123', 'life is short, i dislike dislike AI 321']
    
    
    # 提取特征值,转化为稀疏矩阵
    def Count_Sparse():
        # 1、实例化转换器类
        transfer = CountVectorizer()
    
        # 2、提取特征值
        feature_data = transfer.fit_transform(data)
    
        print('稀疏矩阵特征值\n', feature_data)
        print('特征名字:', transfer.get_feature_names())
    
    
    # 提取特征值,转化为二维矩阵
    def Count_Matrix():
        # 1、实例化转换器类
        transfer = CountVectorizer()
    
        # 2、提取特征值
        feature_data = transfer.fit_transform(data)
    
        print('二维矩阵特征值:\n', feature_data.toarray())
        print('特征名字:', transfer.get_feature_names())
    
    
    if __name__ == '__main__':
        Count_Sparse()        #稀疏矩阵(特征值)
        Count_Matrix()        #二维矩阵(特征值)
    

    二、中文文本特征提取

    1、字符串列表中文处理

    1-1、得到初始数据集

    # 数据集
    data = ['我虽然是一只小菜鸡', '目前比较菜', '但是在不断干饭', '努力成为战斗鸡']

    1-2、创建词语生成器

    首先需要把列表化字符串形式。,否则cut会报错。

    # 创建生成器
        generator = jieba.cut(str(text))
        print(generator)

    1-3、分割得到的中文字符串

    # 空格分割得到中文
        Chinese = " ".join(generator)
        print(Chinese)

    1-4、返回列表字符串

    return list(Chinese)

    2、稀疏矩阵

    # 提取特征值,转化为稀疏矩阵
    def Count_Sparse():
        # 1、获取中文数据集
        Chinese = Chinese_Data(data)
    
        # 2、实例化转换器类
        transfer = CountVectorizer(analyzer ='char',lowercase=False)
    
        # 3、提取特征值
        feature_data = transfer.fit_transform(Chinese)
    
        print('稀疏矩阵特征值\n', feature_data)
        print('特征名字:', transfer.get_feature_names())
    稀疏矩阵特征值
       (0, 3)	1
      (1, 0)	1
      (2, 1)	1
      (3, 0)	1
      (4, 17)	1
      (5, 0)	1
      (6, 26)	1
      (7, 23)	1
      (8, 0)	1
      (9, 21)	1
      (10, 0)	1
      (11, 5)	1
      (12, 12)	1
      (13, 0)	1
      (14, 14)	1
      (15, 25)	1
      (16, 0)	1
      (17, 29)	1
      (18, 0)	1
      (19, 1)	1
      (20, 0)	1
      (21, 2)	1
      (22, 0)	1
      (23, 0)	1
      (24, 0)	1
      :	:
      (51, 15)	1
      (52, 28)	1
      (53, 0)	1
      (54, 1)	1
      (55, 0)	1
      (56, 2)	1
      (57, 0)	1
      (58, 0)	1
      (59, 0)	1
      (60, 1)	1
      (61, 0)	1
      (62, 11)	1
      (63, 10)	1
      (64, 0)	1
      (65, 16)	1
      (66, 7)	1
      (67, 0)	1
      (68, 18)	1
      (69, 19)	1
      (70, 0)	1
      (71, 29)	1
      (72, 0)	1
      (73, 1)	1
      (74, 0)	1
      (75, 4)	1
    
    特征名字: [' ', "'", ',', '[', ']', '一', '不', '为', '但', '前', '力', '努', '只', '在', '小', '干', '成', '我', '战', '斗', '断', '是', '比', '然', '目', '菜', '虽', '较', '饭', '鸡']

    3、二维矩阵

    # 提取特征值,转化为二维矩阵
    def Count_Matrix():
        # 1、获取中文数据集
        Chinese = Chinese_Data(data)
    
        # 2、实例化转换器类
        transfer = CountVectorizer(analyzer ='char',lowercase=False)
    
        # 3、提取特征值
        feature_data = transfer.fit_transform(Chinese)
    
        print('二维矩阵特征值:\n', feature_data.toarray())
        print('特征名字:', transfer.get_feature_names())
    二维矩阵特征值:
     [[0 0 0 ... 0 0 0]
     [1 0 0 ... 0 0 0]
     [0 1 0 ... 0 0 0]
     ...
     [0 1 0 ... 0 0 0]
     [1 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]]
    
    特征名字: [' ', "'", ',', '[', ']', '一', '不', '为', '但', '前', '力', '努', '只', '在', '小', '干', '成', '我', '战', '斗', '断', '是', '比', '然', '目', '菜', '虽', '较', '饭', '鸡']

    展开全文
  • 10-中文文本特征提取

    2021-03-07 16:52:34
    停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成...

    停用词

    在这里插入图片描述
    什么是停用词

    停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。甚至有一些工具是明确地避免使用停用词来支持短语搜索的。

    https://baike.baidu.com/item/%E5%81%9C%E7%94%A8%E8%AF%8D
    

    在代码中我们应该如何使用停用词呢?

    transfer=CountVectorizer(stop_words=["is","too"])  # 添加停用词
    
    # -*- coding: utf-8 -*-
    
    """
    @Time    : 2021/3/7 16:13
    @Author  : yuhui
    @Email   : 3476237164@qq.com
    @FileName: 09_文本特征提取CountVectorizer.py
    @Software: PyCharm
    """
    
    from sklearn.feature_extraction.text import CountVectorizer
    
    data=["life is short,i like like python",
    "life life is too long,i dislike python"]
    
    # data=["我爱北京天安门","天安门上太阳升"]
    # data=["我 爱 北京 天安门","天安门 上 太阳 升"]  # 用空格来分开单词与单词
    
    # 实例化一个转换器类
    transfer=CountVectorizer()
    # transfer=CountVectorizer(stop_words=["is","too"])  # 添加停用词
    # 统计每个样本特征词出现的个数
    
    # 调用方法
    data_new=transfer.fit_transform(data)
    
    print(data_new)  # 返回一个稀疏矩阵
    print(data_new.toarray())  # 将稀疏矩阵转变为真正的矩阵
    
    # 查看属性
    # 查看特征名
    print(transfer.get_feature_names())
    
    

    在这里插入图片描述

    中文文本特征提取

    jieba分词处理

    在这里插入图片描述

    pip3 install jieba
    

    代码演示

    # -*- coding: utf-8 -*-
    
    """
    @Time    : 2021/3/7 17:04
    @Author  : yuhui
    @Email   : 3476237164@qq.com
    @FileName: 10_中文文本特征提取.py
    @Software: PyCharm
    """
    import jieba
    from sklearn.feature_extraction.text import CountVectorizer
    
    def Chinese_text_feature_extraction(text):
    	"""中文文本特征提取  自动分词"""
    	# 对中文文本进行分词
    	data_new = []
    	for t in text:
    		data_new.append(jieba_cut_word(t))
    
    	# 实例化一个转换器类
    	transfer = CountVectorizer()
    	# 调用方法
    	text_new = transfer.fit_transform(data_new)
    
    	print(text_new)
    	# 查看特征名
    	print(transfer.get_feature_names())
    
    
    def jieba_cut_word(text):
    	"""使用jieba对文本进行分词处理"""
    	return " ".join(list(jieba.cut(text)))
    
    
    if __name__ == '__main__':
    	text = ["今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。", "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
    			"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
    	Chinese_text_feature_extraction(text)
    
    
    D:\Anaconda3\Installation\envs\math\python.exe D:/Machine_Learning/Machine_Learning_1/code/10_中文文本特征提取.py
    Building prefix dict from the default dictionary ...
    Loading model from cache C:\Users\Lenovo\AppData\Local\Temp\jieba.cache
      (0, 6)	2
      (0, 26)	2
      (0, 22)	2
      (0, 12)	1
      (0, 32)	1
      (0, 31)	1
      (0, 14)	1
      (0, 24)	1
      (0, 19)	1
      (0, 27)	1
      (0, 2)	1
      (0, 20)	1
      (1, 18)	3
      (1, 28)	2
      (1, 23)	1
      (1, 7)	1
      (1, 8)	1
      (1, 3)	1
      (1, 9)	1
      (1, 35)	1
      (1, 17)	1
      (1, 34)	1
      (2, 18)	1
      (2, 16)	1
      (2, 11)	1
      (2, 0)	1
      (2, 21)	1
      (2, 4)	4
      (2, 25)	1
      (2, 5)	3
      (2, 1)	1
      (2, 29)	2
      (2, 13)	1
      (2, 30)	1
      (2, 10)	1
      (2, 15)	1
      (2, 33)	1
    ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
    Loading model cost 0.610 seconds.
    Prefix dict has been built successfully.
    
    Process finished with exit code 0
    
    

    小结

    如何对中文文本进行特征提取?

    • 导库
    import jieba
    from sklearn.feature_extraction.text import CountVectorizer
    
    • 对中文文本进行分词处理

    在这里插入图片描述

    在这里插入图片描述

    • 实例化一个转换器类
    # 实例化一个转换器类
    transfer = CountVectorizer()
    
    • 调用方法
    # 调用方法
    text_new = transfer.fit_transform(data_new)
    
    • 查看属性
    print(text_new)
    # 查看特征名
    print(transfer.get_feature_names())
    

    第一次复习

    # -*- coding: utf-8 -*-
    
    """
    @Time    : 2021/4/8 17:14
    @Author  : yuhui
    @Email   : 3476237164@qq.com
    @FileName: 10_中文文本特征提取_2.py
    @Software: PyCharm
    """
    from sklearn.feature_extraction.text import CountVectorizer
    import jieba
    
    def Chinese_text_feature_extraction(data):
    	"""中文文本特征提取"""
    
    	# 使用jieba对文本进行分词处理
    	word_list=[]
    	for i in data:
    		word=" ".join(list(jieba.cut(i)))
    		word_list.append(word)
    	print(word_list)
    
    	transfer=CountVectorizer()
    	data_new=transfer.fit_transform(word_list)
    
    	print(data_new)
    
    	print(transfer.get_feature_names())  # 特征名
    
    if __name__ == '__main__':
    	data=["今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。", "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
    			"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
    	Chinese_text_feature_extraction(data)
    
    
    D:\Anaconda3\Installation\envs\math\python.exe D:/Machine_Learning/Machine_Learning_1/code/10_中文文本特征提取_2.py
    Building prefix dict from the default dictionary ...
    Loading model from cache C:\Users\Lenovo\AppData\Local\Temp\jieba.cache
    Loading model cost 0.606 seconds.
    Prefix dict has been built successfully.
    ['今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']
      (0, 6)	2
      (0, 26)	2
      (0, 22)	2
      (0, 12)	1
      (0, 32)	1
      (0, 31)	1
      (0, 14)	1
      (0, 24)	1
      (0, 19)	1
      (0, 27)	1
      (0, 2)	1
      (0, 20)	1
      (1, 18)	3
      (1, 28)	2
      (1, 23)	1
      (1, 7)	1
      (1, 8)	1
      (1, 3)	1
      (1, 9)	1
      (1, 35)	1
      (1, 17)	1
      (1, 34)	1
      (2, 18)	1
      (2, 16)	1
      (2, 11)	1
      (2, 0)	1
      (2, 21)	1
      (2, 4)	4
      (2, 25)	1
      (2, 5)	3
      (2, 1)	1
      (2, 29)	2
      (2, 13)	1
      (2, 30)	1
      (2, 10)	1
      (2, 15)	1
      (2, 33)	1
    ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
    
    Process finished with exit code 0
    
    
    展开全文
  • 针对含有变形关键词的不良信息过滤问题,提出一种基于柔性匹配的中文文本特征信息提取方法。该方法采用柔性匹配技术识别和提取变形关键词,改进向量空间模型中特征项权重的计算方法,对具有变形形式的关键词赋予较高...
  • 文本预处理:分词,取出停用词,过滤低频词汇,编码归一化等; 文本向量化:如使用向量空间模型VSM(Vector Space Model)或者概率统计模型对文本...文本特征提取和选择:特征提取对应着特征项的选择和特征权重的计算。
  • 日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 什么是特征提取呢? ...1 特征提取 ...将任意数据(如文本或图像)转换为可用于... 文本特征提取 图像特征提取(深...

    日萌社

    人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


    什么是特征提取呢?

    1 特征提取

    1.1 定义

    将任意数据(如文本或图像)转换为可用于机器学习的数字特征

    注:特征值化是为了计算机更好的去理解数据

    • 特征提取分类:
      • 字典特征提取(特征离散化)
      • 文本特征提取
      • 图像特征提取(深度学习将介绍)

    1.2 特征提取API

    sklearn.feature_extraction
    

    2 字典特征提取

    作用:对字典数据进行特征值化

    • sklearn.feature_extraction.DictVectorizer(sparse=True,…)
      • DictVectorizer.fit_transform(X)
        • X:字典或者包含字典的迭代器返回值
        • 返回sparse矩阵
      • DictVectorizer.get_feature_names() 返回类别名称

    2.1 应用

    我们对以下数据进行特征提取

    [{'city': '北京','temperature':100},
    {'city': '上海','temperature':60},
    {'city': '深圳','temperature':30}]

    2.2 流程分析

    • 实例化类DictVectorizer
    • 调用fit_transform方法输入数据并转换(注意返回格式)
    from sklearn.feature_extraction import DictVectorizer
    
    def dict_demo():
        """
        对字典类型的数据进行特征抽取
        :return: None
        """
        data = [{'city': '北京','temperature':100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]
        # 1、实例化一个转换器类
        transfer = DictVectorizer(sparse=False)
        # 2、调用fit_transform
        data = transfer.fit_transform(data)
        print("返回的结果:\n", data)
        # 打印特征名字
        print("特征名字:\n", transfer.get_feature_names())
    
        return None
    

    注意观察没有加上sparse=False参数的结果

    返回的结果:
       (0, 1)    1.0
      (0, 3)    100.0
      (1, 0)    1.0
      (1, 3)    60.0
      (2, 2)    1.0
      (2, 3)    30.0
    特征名字:
     ['city=上海', 'city=北京', 'city=深圳', 'temperature']
    

    这个结果并不是我们想要看到的,所以加上参数,得到想要的结果:

    返回的结果:
     [[   0.    1.    0.  100.]
     [   1.    0.    0.   60.]
     [   0.    0.    1.   30.]]
    特征名字:
     ['city=上海', 'city=北京', 'city=深圳', 'temperature']
    

    之前在学习pandas中的离散化的时候,也实现了类似的效果。我们把这个处理数据的技巧叫做”one-hot“编码

    2.3 总结

    对于特征当中存在类别信息的我们都会做one-hot编码处理

    3 文本特征提取

    作用:对文本数据进行特征值化

    • sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

      • 返回词频矩阵
      • CountVectorizer.fit_transform(X)
        • X:文本或者包含文本字符串的可迭代对象
        • 返回值:返回sparse矩阵
      • CountVectorizer.get_feature_names() 返回值:单词列表
    • sklearn.feature_extraction.text.TfidfVectorizer

    3.1 应用

    我们对以下数据进行特征提取

    ["life is short,i like python",
    "life is too long,i dislike python"]

    3.2 流程分析

    • 实例化类CountVectorizer
    • 调用fit_transform方法输入数据并转换 (注意返回格式,利用toarray()进行sparse矩阵转换array数组)
    from sklearn.feature_extraction.text import CountVectorizer
    
    def text_count_demo():
        """
        对文本进行特征抽取,countvetorizer
        :return: None
        """
        data = ["life is short,i like like python", "life is too long,i dislike python"]
        # 1、实例化一个转换器类
        # transfer = CountVectorizer(sparse=False) # 注意,没有sparse这个参数
        transfer = CountVectorizer()
        # 2、调用fit_transform
        data = transfer.fit_transform(data)
        print("文本特征抽取的结果:\n", data.toarray())
        print("返回特征名字:\n", transfer.get_feature_names())
    
        return None
    

    返回结果:

    文本特征抽取的结果:
     [[0 1 1 2 0 1 1 0]
     [1 1 1 0 1 1 0 1]]
    返回特征名字:
     ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
    

    问题:如果我们将数据替换成中文?

    "人生苦短,我喜欢Python","生活太长久,我不喜欢Python"
    

    那么最终得到的结果是

    为什么会得到这样的结果呢,仔细分析之后会发现英文默认是以空格分开的。其实就达到了一个分词的效果,所以我们要对中文进行分词处理

    3.3 jieba分词处理

    • jieba.cut()
      • 返回词语组成的生成器

    需要安装下jieba库

    pip3 install jieba
    

    3.4 案例分析

    对以下三句话进行特征值化

    今天很残酷,明天更残酷,后天很美好,
    但绝对大部分是死在明天晚上,所以每个人不要放弃今天。
    
    我们看到的从很远星系来的光是在几百万年之前发出的,
    这样当我们看到宇宙时,我们是在看它的过去。
    
    如果只用一种方式了解某样事物,你就不会真正了解它。
    了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。
    
    • 分析
      • 准备句子,利用jieba.cut进行分词
      • 实例化CountVectorizer
      • 将分词结果变成字符串当作fit_transform的输入值

    from sklearn.feature_extraction.text import CountVectorizer
    import jieba
    
    def cut_word(text):
        """
        对中文进行分词
        "我爱北京天安门"————>"我 爱 北京 天安门"
        :param text:
        :return: 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 = CountVectorizer()
        # 2、调用fit_transform
        data = transfer.fit_transform(text_list)
        print("文本特征抽取的结果:\n", data.toarray())
        print("返回特征名字:\n", transfer.get_feature_names())
    
        return None
    

    返回结果:

    Building prefix dict from the default dictionary ...
    Dumping model to file cache /var/folders/mz/tzf2l3sx4rgg6qpglfb035_r0000gn/T/jieba.cache
    Loading model cost 1.032 seconds.
    ['一种 还是 一种 今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']
    Prefix dict has been built succesfully.
    文本特征抽取的结果:
     [[2 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 1 0]
     [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 0 1]
     [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0 0]]
    返回特征名字:
     ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '还是', '这样']
    

    但如果把这样的词语特征用于分类,会出现什么问题?

    请看问题:

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

    3.5 Tf-idf文本特征提取

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

    3.5.1 公式

    • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
    • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到

    最终得出结果可以理解为重要程度。

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

    3.5.2 案例

    from sklearn.feature_extraction.text import TfidfVectorizer
    import jieba
    
    def cut_word(text):
        """
        对中文进行分词
        "我爱北京天安门"————>"我 爱 北京 天安门"
        :param text:
        :return: text
        """
        # 用结巴对中文字符串进行分词
        text = " ".join(list(jieba.cut(text)))
    
        return text
    
    def text_chinese_tfidf_demo():
        """
        对中文进行特征抽取
        :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(stop_words=['一种', '不会', '不要'])
        # 2、调用fit_transform
        data = transfer.fit_transform(text_list)
        print("文本特征抽取的结果:\n", data.toarray())
        print("返回特征名字:\n", transfer.get_feature_names())
    
        return None
    

    返回结果:

    Building prefix dict from the default dictionary ...
    Loading model from cache /var/folders/mz/tzf2l3sx4rgg6qpglfb035_r0000gn/T/jieba.cache
    Loading model cost 0.856 seconds.
    Prefix dict has been built succesfully.
    ['一种 还是 一种 今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']
    文本特征抽取的结果:
     [[ 0.          0.          0.          0.43643578  0.          0.          0.
       0.          0.          0.21821789  0.          0.21821789  0.          0.
       0.          0.          0.21821789  0.21821789  0.          0.43643578
       0.          0.21821789  0.          0.43643578  0.21821789  0.          0.
       0.          0.21821789  0.21821789  0.          0.          0.21821789
       0.        ]
     [ 0.2410822   0.          0.          0.          0.2410822   0.2410822
       0.2410822   0.          0.          0.          0.          0.          0.
       0.          0.2410822   0.55004769  0.          0.          0.          0.
       0.2410822   0.          0.          0.          0.          0.48216441
       0.          0.          0.          0.          0.          0.2410822
       0.          0.2410822 ]
     [ 0.          0.644003    0.48300225  0.          0.          0.          0.
       0.16100075  0.16100075  0.          0.16100075  0.          0.16100075
       0.16100075  0.          0.12244522  0.          0.          0.16100075
       0.          0.          0.          0.16100075  0.          0.          0.
       0.3220015   0.16100075  0.          0.          0.16100075  0.          0.
       0.        ]]
    返回特征名字:
     ['之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '还是', '这样']
    

    3.6 Tf-idf的重要性

    分类机器学习算法进行文章分类中前期数据处理方式


    4 小结

    • 特征提取【了解】
      • 将任意数据(如文本或图像)转换为可用于机器学习的数字特征
    • 特征提取分类:【了解】
      • 字典特征提取(特征离散化)
      • 文本特征提取
      • 图像特征提取
    • 字典特征提取【知道】
      • 字典特征提取就是对类别型数据进行转换
      • api:sklearn.feature_extraction.DictVectorizer(sparse=True,…)
        • aparse矩阵
          • 1.节省内容
          • 2.提高读取效率
        • 注意:
          • 对于特征当中存在类别信息的我们都会做one-hot编码处理
    • 文本特征提取(英文)【知道】
      • api:sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
        • stop_words -- 停用词
        • 注意:没有sparse这个参数
        • 单个字母,标点符号不做统计
    • 文本特征提取(中文)【知道】
      • 注意:
        • 1.在中文文本特征提取之前,需要对句子(文章)进行分词(jieba)
        • 2.里面依旧可以使用停用词,进行词语的限制
    • tfidf【知道】
      • 主要思想:
        • 如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的
        • 类别区分能力,适合用来分类
      • tfidf
        • tf -- 词频
        • idf -- 逆向文档频率
      • api:sklearn.feature_extraction.text.TfidfVectorizer
      • 注意:
        • 分类机器学习算法进行文章分类中前期数据处理方式

    feature_extraction_demo.py 

    # coding:utf-8
    
    from sklearn.feature_extraction import DictVectorizer
    from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
    import jieba
    
    
    def dict_demo():
        """
        字典特征提取
        :return: None
        """
        # 1.获取数据
        data = [{'city': '北京', 'temperature': 100},
                {'city': '上海', 'temperature': 60},
                {'city': '深圳', 'temperature': 30}]
    
        # 2.字典特征提取
        # 2.1 实例化
        transfer = DictVectorizer(sparse=True)
    
        # 2.2 转换
        new_data = transfer.fit_transform(data)
        print(new_data)
    
        # 2.3 获取具体属性名
        names = transfer.get_feature_names()
        print("属性名字是:\n", names)
    
    
    def english_count_demo():
        """
        文本特征提取-英文
        :return: None
        """
        # 获取数据
        data = ["life is is short,i like python",
                "life is too long,i dislike python"]
    
        # 文本特征转换
        # transfer = CountVectorizer(sparse=True)  # 注意:没有sparse这个参数
        transfer = CountVectorizer(stop_words=["dislike"])
        new_data = transfer.fit_transform(data)
    
        # 查看特征名字
        names = transfer.get_feature_names()
    
        print("特征名字是:\n", names)
        print(new_data.toarray())
        print(new_data)
    
    
    def chinese_count_demo1():
        """
        文本特征提取-中文
        :return: None
        """
        # 获取数据
        data = ["人生 苦短,我 喜欢 Python", "生活 太长久,我 不喜欢 Python"]
    
        # 文本特征转换
        transfer = CountVectorizer()
        new_data = transfer.fit_transform(data)
    
        # 查看特征名字
        names = transfer.get_feature_names()
    
        print("特征名字是:\n", names)
        print(new_data.toarray())
        print(new_data)
    
    
    def cut_word(text):
        """
        中文分词
        :param text:
        :return:
        """
        # ret = " ".join(list(jieba.cut(text)))
        # print(ret)
        return " ".join(list(jieba.cut(text)))
    
    
    def chinese_count_demo2():
        """
        文本特征提取-中文
        :return: None
        """
        # 1.获取数据
        data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
                "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
                "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
    
        # 2.文章分割
        list = []
        for temp in data:
            list.append(cut_word(temp))
        print(list)
    
        # 3.文本特征转换
        # 3.1 实例化+转化
        transfer = CountVectorizer(stop_words=["一种", "今天"])
        new_data = transfer.fit_transform(list)
    
        # 3.2 查看特征名字
        names = transfer.get_feature_names()
    
        print("特征名字是:\n", names)
        print(new_data.toarray())
        print(new_data)
    
    
    def tfidf_demo():
        """
        文本特征提取-中文
        :return: None
        """
        # 1.获取数据
        data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
                "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
                "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
    
        # 2.文章分割
        list = []
        for temp in data:
            list.append(cut_word(temp))
        print(list)
    
        # 3.文本特征转换
        # 3.1 实例化+转化
        transfer = TfidfVectorizer()
        new_data = transfer.fit_transform(list)
    
        # 3.2 查看特征名字
        names = transfer.get_feature_names()
    
        print("特征名字是:\n", names)
        print(new_data.toarray())
        print(new_data)
    
    
    if __name__ == '__main__':
        dict_demo()
        english_count_demo()
        chinese_count_demo1()
        cut_word("我爱你python, 人生苦读,我用python")
        chinese_count_demo2()
        tfidf_demo()
    

    展开全文
  • 文本特征提取

    千次阅读 2019-12-02 14:13:54
    文本特征抽取分为两种情况,第一种是文本分析--->偏向于情感分析,第二种是文本分类-->朴素贝叶斯,主要用来对文章分类打标签等: 1)CountVectorizer() 返回词频矩阵 CountVectorizer(X) X:文本或者包含...
  • 文章目录一、 文本特征抽取(处理英文)引入库二、文本特征抽取(处理中文)默认情况下对句子进行分割,再处理引入库 一、 文本特征抽取(处理英文) 引入库 from sklearn.feature_extraction.text import ...
  • 特征提取 --- 中文文本特征抽取

    千次阅读 2019-04-08 09:15:50
    jieba库 ex_1 import jieba def cut_word(text): text = ' '.join(list(jieba.cut(text))) return text ...def cut_chinese_demo2(): ... print("特征名字:\n", transfer.get_feature_names())
  • <strong><span xss=removed>文本过滤</span></strong> result = re.sub(r'[^\u4e00-\u9fa5,。?!,、;:“ ”‘ '( )《 》〈 〉]', , content)#只保留中文和标点 result = re.sub(r'[^\u4e00-\u9fa5]', ,...
  • 主要介绍了基于MATLAB和Python实现MFCC特征参数提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 两种文本特征抽取方法(Count, tf-idf) (1)特征抽取API(统计单词次数) sklearn.feature_extraction python调用sklearn.feature_extraction 的DictVectorizer实现字典特征抽取 # 字典特征抽取 def ...
  • 文本的表示及其特征项的选取是文本挖掘、信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息。将它们从一个无结构的原始文本转化为结构化的计算机可以识别处理的信息,即对文本进行科学的...
  • 在学习黑马程序员出品的机器学习视频做的代码笔记。 代码中直接调用jieba第三方库进行分词,还可再做改进,关于英文分词的文章可以看... 对文本进行特征值化 :return:None """ cv = CountVectorizer() data = cv.f
  • 字典特征提取文本特征提取

    千次阅读 2022-03-09 10:19:26
    文本特征提取1. 方法2. 英文案例1. 实现效果2.流程3. 中文案例使用到的包 1 定义 将任意数据(如文本或图像)转换为可用于机器学习的数字特征 注:特征值化是为了计算机更好的去理解数据 特征提取分类: 字典特征...
  • 文本特征提取方法介绍

    千次阅读 2020-06-09 19:34:39
    文本挖掘是一门交叉性学科,涉及数据挖掘、机器学习、模式识别、人工智能、统计学、计算机语言学、计算机网络技术、信息学等多个领域。文本挖掘就是从大量的文档中发现隐含知识和模式的一种方法和工具,它从数据挖掘...
  • 什么是特征工程 比赛会有成绩的提交,跟算法与数据清洗都有关系,也就是特征工程 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个...特征提取/抽取 比如上面这个文章,我想通过这个文章作为训练集,...
  • 文章目录前言一、CountVectorizer使用举例1.sklearn官网API2.CountVectorizer()提取英文文本举例2.CountVectorizer()提取中文文本不合适总结 前言 文本特征提取CountVectorizer属于机器学习特征工程中特征提取的一个...
  • 文章目录4.4 特征工程-特征提取学习目标1 特征提取1.1 定义1.2 特征提取API2 字典特征提取2.1 应用2.2 流程分析2.3 总结3 文本特征提取3.1 应用3.2 流程分析3.3 jieba分词处理3.4 案例分析3.5 Tf-idf文本特征提取...
  • 文本表示与文本特征提取的区别 文本表示的作用就是将文本的非结构化的信息转化为结构化的信息,例如独热编码: 猫:[1,0,0,0] 狗:[0,1,0,0] 牛:[0,0,1,0] 羊:[0,0,0,1] 词袋模型: 句子1:...
  • 中文文本特征提取: 对文本数据进行特征值化(转换成特征向量),主要有两个API来实现 CountVectorizer 和 TfidfVectorizer CountVectorizer: 只考虑词汇在文本中出现的频率 TfidfVectorizer: 除了考量某词汇在...
  • Python 文本特征提取 DictVectorizer CountVectorizer TfidfVectorizer 文本特征提取:将文本数据转化成特征向量的过程。 python-sklearn库的模块 sklearn.feature_extraction 可用于提取符合机器学习算法支持的特征...
  • 目录特征工程——特征提取1、特征提取1.1 定义1.2 特征提取API2、字典特征提取2.1 应用2.2 流程分析2.3 总结3、文本特征提取3.1 应用3.2 流程分析3.3 jieba分词处理3.4 案例分析3.5 Tf-idf文本特征提取3.5.1 公式...
  • 中文文本分类问题中的特征提取的常见方法,包括常见的DF IG MI CHI等
  • 今天小编就为大家分享一篇Java实现从Html文本提取文本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,797
精华内容 31,518
关键字:

中文文本特征提取