请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

特征工程之文本特征抽取

击上方“蓝色字”可关注我们!

今日分享:英文及中文文本特征抽取


一:文本特征抽取API


需要注意的是该类在 .text 模块下


from sklearn.feature_extraction.text import CountVectorizer

二:CountVectorizer类语法介绍


CountVectorizer(stopwords=,max_df=1.0,min_df=1,…)
该类返回的是一个词频矩阵
括号中提及的参数介绍
stopwords停用词过滤,应以一个包含字符串的列表的形式出现
max_df,包含该词的文档最大数量
min_df,包含该次的文档最小数量


CountVectorizer.fit_transform(X,y)      
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵

CountVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式

CountVectorizer.get_feature_names()
返回值:单词列表

CountVectorizer.get_params()
返回值:该转换器的具体参数



三:文本特征抽取流程



  • 实例化类CountVectorizer()
  • 调用fit_transform方法输入数据并转换 。 注意返回格式,利用 toarray() 将sparse矩阵结果转换为 ndarray 数组


四:代码演示


英文文本特征抽取



def countvec_EN():
   '''对英文文本进行特征值化'''
   #实例化
   cv = CountVectorizer()
   #调用fit_transform
   data = cv.fit_transform(['life is short,i like Python','life is not short,i dislike Python'])
   
   print('\n获取所有特征名称')
   print(cv.get_feature_names())
   
   #获取参数 在此不再打印
   #print(cv.get_params())
   
   print('\n获取英文文本特征')  #返回的是二维数组
   print(data.toarray())

if __name__ == '__main__':
   countvec_EN()

英文文本特征抽取输出结果



获取所有特征名称
['dislike', 'is', 'life', 'like', 'not', 'python', 'short']

获取英文文本特征
[[0 1 1 1 0 1 1]
[1 1 1 0 1 1 1]]

注:传入文本训练时,以包含字符串的列表的形式传入,对于英文分词,其默认空格为分隔符,对于单个字母不作为特征保留,直接舍弃,比如上述这种的字母 i 就不在特征词列表内。


对于第一句话 'life is short,i like Python'  其特征为 [0 1 1 1 0 1 1],再对照着所有特征名称列表来看 ['dislike', 'is', 'life', 'like', 'not', 'python', 'short'],这句话中只出现了 life is short like Python 这五个词,且词频均为1,所以其特征中出现了五个1,其余两个0表示未出现的词 dislike not.   第二句话情况类似,不再阐述。


中文文本特征抽取



def countvec_CH():
   '''对中文文本进行特征值化'''
   
   #分别对每个中文文本进行分词,返回值为词列表
   s1 = jieba.lcut('税务部门依法作出的处罚,有利于维护我国税法的权威性、严肃性,有利于促进影视行业持续健康发展,有利于增强全社会依法纳税的意识。')
   s2 = jieba.lcut('对纳税人偷税,不缴或者少缴应纳税款的,由税务机关追缴其不缴或者少缴的税款、滞纳金,并处不缴或者少缴的税款百分之五十以上五倍以下的罚款。')
   s3 = jieba.lcut('税务部门处罚决定总体上兼顾了法律、社会和政策效果,体现了宽严相济、实事求是、区分情形、综合考量的宗旨。')
   
   print('第一句中文词列表:\n',s1)
   print('第二句中文词列表:\n',s2)
   print('第三句中文词列表:\n',s3)
   
   #实例化 这里不再选填任何参数
   cv = CountVectorizer()
   
   data = cv.fit_transform([str(s1),str(s2),str(s3)])

   print('\n获取所有特征名称')
   print(cv.get_feature_names())
   
   #返回原始文本数据
   #print(cv.inverse_transform(data))
   #获取参数 在此不再打印
   #print(cv.get_params())
   
   print('\n获取中文文本特征')  #返回的是二维数组
   print(data.toarray())

if __name__ == '__main__':
   countvec_CH()

中文文本特征抽取输出结果



第一句中文词列表:
['税务', '部门', '依法', '作出', '的', '处罚', ',', '有利于', '维护', '我国', '税法', '的', '权威性', '、', '严肃性', ',', '有利于', '促进', '影视', '行业', '持续', '健康', '发展', ',', '有利于', '增强', '全', '社会', '依法', '纳税', '的', '意识', '。']
第二句中文词列表:
['对', '纳税人', '偷税', ',', '不缴', '或者', '少缴', '应纳', '税款', '的', ',', '由', '税务机关', '追缴', '其不缴', '或者', '少缴', '的', '税款', '、', '滞纳金', ',', '并处', '不缴', '或者', '少缴', '的', '税款', '百分之五十', '以上', '五倍', '以下', '的', '罚款', '。']
第三句中文词列表:
['税务', '部门', '处罚', '决定', '总体', '上', '兼顾', '了', '法律', '、', '社会', '和', '政策', '效果', ',', '体现', '了', '宽严', '相济', '、', '实事求是', '、', '区分', '情形', '、', '综合', '考量', '的', '宗旨', '。']

获取所有特征名称
['不缴', '严肃性', '五倍', '以上', '以下', '体现', '作出', '依法', '促进', '健康', '偷税', '其不缴', '兼顾', '决定', '区分', '发展', '增强', '处罚', '宗旨', '实事求是', '宽严', '少缴', '并处', '应纳', '影视', '总体', '情形', '意识', '我国', '或者', '持续', '政策', '效果', '有利于', '权威性', '法律', '滞纳金', '百分之五十', '相济', '社会', '税务', '税务机关', '税款', '税法', '纳税', '纳税人', '维护', '综合', '罚款', '考量', '行业', '追缴', '部门']

获取中文文本特征
[[0 1 0 0 0 0 1 2 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 3 1 0
 0 0 0 1 1 0 0 1 1 0 1 0 0 0 1 0 1]
[2 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 3 1 1 0 0 0 0 0 3 0 0 0 0 0 0
 1 1 0 0 0 1 3 0 0 1 0 0 1 0 0 1 0]
[0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1
 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 0 1]]

注:传入中文文本时也是以包含字符串的列表形式传入的,在中文文本分词中,单个汉字也直接默认舍弃,不作为特征保留。具体每一个中文文本与其特征列表的对应过程可参照上述对英文文本的说明过程,情况类似。
再次强调:特征列表中的数值表示的是某个词在该文本中的词频数。

qYCiML2Y5i48LVM5.jpg












xcfrFHr1eL6Wpf1E.jpg

公众号     QQ群

扫QQ群二维码进交流学习群

或在后台回复:加群
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册