05_文本特征值处理

 中文文本特征值处理:如何从一段话中,分解句子,以矩阵的形式,得到每个词语出现的次数,可以应用于文章类别分析、情感预测等等。

 

1.中文文本特征抽取:第一种方法:1.利用jieba.cut进行分词; 2.实例化CountVectorizer; 3.将分词结果变成字符串当做fit_transform的输入值;

         第二种方法:过滤掉文章中不重要的信息,比如对比两篇文章时,所以、明天、我们等这些词都不重要,就可以把它们去掉,解决了第一种方法不能解决的问题。

               1.使用tfidf;  tf:term frequency:词的频率(词列表)。 idf:inverse document frequency 逆文档频率。

               2.涉及的公式: log(总文档数量/该词出现的文档数量) 

                      重要性 = tf * idf

2.TF—IDF:

  TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高, 并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

  TF-IDF作用:评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

 

3.TF—IDF用法:

  TfidfVectorizer(stop_words=None,…) 返回词的权重矩阵;

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

  TfidfVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式 TfidfVectorizer.get_feature_names() 返回值:单词列表

 

下述两个案例的运行结果,第一次接触不是很好理解,其实通过.get_feature_names()可以看出,就是获取特征值名称,结果中第二个列表中0就是代表该列中没有,非零整数就是出现的次数,小数就是重要性(概率)

 

4.第一种方法:1.利用jieba.cut进行分词; 2.实例化CountVectorizer; 3.将分词结果变成字符串当做fit_transform的输入值;

from sklearn.feature_extraction.text import CountVectorizer
import jieba

def cutword(): """ 汉字统计 """ con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。") con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。") con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。") # con1类型为 # 进行类型转换,将con1转换成列表 content1 = list(con1) content2 = list(con2) content3 = list(con3) # 把列表转换成字符串 c1 = ' '.join(content1) c2 = ' '.join(content2) c3 = ' '.join(content3) return c1,c2,c3
def hanzivec(): """ 中文特征值化:先把句子变成字符串做分词处理,分词之后,然后转化为列表,把这个列表转化为空格隔开的字符串 """ c1,c2,c3 = cutword() print(c1) print(c2) print(c3) cv = CountVectorizer() data = cv.fit_transform([c1,c2,c3]) print(cv.get_feature_names()) print(data.toarray()) return None

if __name__ == '__main__':
hanzivec()

  

第二种方法:使用tfidf方法进行重要性检验

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

def cutword():
    """
    汉字统计
    """
    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
    con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")

    # con1类型为
    # 进行类型转换,将con1转换成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)

    # 把列表转换成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

def tfidfvec(): """ 中文词频统计的第二种方法 :return: """ c1,c2,c3 = cutword() tf = TfidfVectorizer() data = tf.fit_transform([c1,c2,c3]) print(tf.get_feature_names()) print(data.toarray()) return None

if __name__ == '__main__':
tfidfvec()

运行结果:

['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样'] [[0. 0. 0.21821789 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. ] [0. 0. 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.2410822 ] [0.15698297 0.15698297 0. 0. 0.62793188 0.47094891 0. 0. 0. 0. 0.15698297 0.15698297 0. 0.15698297 0. 0.15698297 0.15698297 0. 0.1193896 0. 0. 0.15698297 0. 0. 0. 0.15698297 0. 0. 0. 0.31396594 0.15698297 0. 0. 0.15698297 0. 0. ]]

 

英文文本特征抽取:比如对 "life is short,i like python","life is too long,i dislike python" 进行特征抽取

# 特征抽取

from sklearn.feature_extraction.text import CountVectorizer

# 实例化CountVectorizer
vector = CountVectorizer()

# 调用fit_transform输入并转换数据
res = vector.fit_transform(["life is short,i like python","life is too long,i dislike python"])

# 打印结果
print(vector.get_feature_names())
print(res.toarray())



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

  






你可能感兴趣的:(05_文本特征值处理)