sklearn文本特征提取和TfidfVectorizer

sklearn文本特征提取和TfidfVectorizer

文本特征提取:单词作为特征。
**关键词:**在某一个类别的文章中,出现的次数很多,在其它的文章中出现的次数很少。具有很好的类别区分能力,适合用来分类。
**sklearn.feature_extraction.text.CountVectorizer():**统计每个样本特征值出现的次数。**注意:**英文文本中不统计字母,中文文本中不统计单个字,标点符号也不统计。
注意:在统计文本里面单词出现次数的时候,单词或者词语需要用空格键隔开,英文文本已经用空格键隔开了,但是中文文本一般没有隔开,需要手动隔开或者用程序代码来隔开(jieba模块)。
例如:英文文本:I want to play football. 单词之间已经隔开了。
中文文本:我爱北京天安门。词语之间没有隔开,需要手动隔开或者用程序代码来隔开,隔开之后是:我 爱 北京 天安门 。
TfidfVectorizer:用来评估一字词对于一个文件集合中的一篇文章的重要程度。
**计算方法1:**tf(term frequency):词频,某一个词语在该文件中出现的频率,idf(inverse document frequency):逆向文档频率,是一个词语普遍重要性的度量。可以由总文件数目除以包含该词语的文件的数目,再将得到的商取以10为底的对数得到。
**计算方法2:**tf:文本中词语出现的次数,idf:In[(1+nd)/(1+df)]+1 nd:文本数目 df:包含词语的文本数目。
最后,tfidf = tf * idf
TfidfVectorizer按照计算方法2来计算。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba
import numpy
import pandas

def count_demo():
    #文本特征抽取
    data = {
        'life is too too short, I like like like like python',
        'life is too too long, I dislike python'
    }

    transfer = CountVectorizer()
    data_new = transfer.fit_transform(data)
    print(data_new.toarray())  #toarray()将稀疏矩阵转换成一般的矩阵
    print(transfer.get_feature_names())
    return None

def count_chinese_demo():
    #中文文本特征抽取  #中文字词之间需要用空格隔开,单个字不统计
    data = {
        '我 爱 北京 天安门, 天安门 上 太阳 升',
        '人生苦短 我用Python'
    }

    transfer = CountVectorizer()
    data_new = transfer.fit_transform(data)
    print(data_new.toarray())  #toarray()将稀疏矩阵转换成一般的矩阵
    print(transfer.get_feature_names())
    return None

def cut_word(text):
    #用jieba进行中文分词
    text = ' '.join(jieba.cut(text))
    return text

def count_chinese_demo_2():
    #中文文本特征抽取,自动分词
    data = [ '我爱北京天安门,天安门上太阳升。',
             '我曾经跨过山和大海,也曾经跨过人山人海。',
             '幻胖的女孩,需要好好地吃饭,脸圆圆的很可爱。']
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)
    transfer = CountVectorizer()
    data_final = transfer.fit_transform(data_new)
    print(data_final.toarray())  #toarray()将稀疏矩阵转换成一般的矩阵
    print(transfer.get_feature_names())
    return None

def tfidf_demo():
    #用tf-idf进行文本特征抽取
    data = [ '爱北京北京北京天安门天安门上太阳升',
             '我曾经跨过山和大海,也曾经跨过人山人海。',
             '幻胖的北京女孩,需要好好地吃饭,脸圆圆的很可爱。']
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)
    transfer = TfidfVectorizer(norm=None)  #norm默认的是正则化/归一化
    data_final = transfer.fit_transform(data_new)
    print(data_final.toarray())  #toarray()将稀疏矩阵转换成一般的矩阵
    print(transfer.get_feature_names())
    return None

if __name__ == "__main__":
    #count_demo()
    #count_chinese_demo()
    #count_chinese_demo_2()
    #tfidf_demo()

你可能感兴趣的:(机器学习和深度学习,机器学习,自然语言处理,数据分析)