使用sklearn进行中文文本的tf idf计算

Created by yinhongyu at 2018-4-28

email: [email protected]

使用jieba和sklearn实现了tf idf的计算

import jieba
import jieba.posseg as pseg
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import re

1 读取数据文件

数据爬取自新浪新闻,以"中美贸易战"为关键词,按照相关度搜索,爬取了搜索结果的前100页新闻的正文;

# 读取数据文件
sina_news = pd.read_excel(r"C:\Users\YHY\Desktop\sina_news_finally.xlsx")
sina_news.head(5)
标题 来源 内容 时间 阶段
0 外交部回应"美对华贸易调查":打贸易战只会双输 海外网 海外网8月14日电在14日的外交部例行记者会上,发言人华春莹就近日热点进行回应。相关内容如下... 2017-08-14 0
1 特朗普政府对华 “301条款战”一触即发,中美贸易战只会双输 一财网 针对美国总统特朗普将签署行政备忘录,对中国发起贸易调查一事,中国外交部发言人华春莹14日回应... 2017-08-14 0
2 特朗普欲对华发起301条款调查 专家:该做法已过时 第一财经日报 特朗普欲对华动用“301条款”被指“过时了”  冯迪凡郭丽琴  虚晃了两次之后,狼真的要... 2017-08-14 0
3 特朗普欲对华贸易战?美专家:将是美经济倒退 参考消息 原标题:特朗普欲开展对华贸易战?美专家:这将是美国经济的倒退资料图:美国总统特朗普新华社... 2017-08-15 0
4 美国对华301条款战一触即发 外交部:贸易战只会双输 第一财经日报 特朗普政府对华“301条款战”一触即发中美贸易战只会双输  冯迪凡  针对美国总统特朗普... 2017-08-15 0
# 人为将文本分为6个阶段,标记为0-6
# 将每个阶段的文本拼接到一起,形成了六个period
period_1 = " ".join(list(sina_news.loc[sina_news.loc[:,"阶段"] == 0,"内容"]))
period_2 = " ".join(list(sina_news.loc[sina_news.loc[:,"阶段"] == 1,"内容"]))
period_3 = " ".join(list(sina_news.loc[sina_news.loc[:,"阶段"] == 2,"内容"]))
period_4 = " ".join(list(sina_news.loc[sina_news.loc[:,"阶段"] == 3,"内容"]))
period_5 = " ".join(list(sina_news.loc[sina_news.loc[:,"阶段"] == 4,"内容"]))
period_6 = " ".join(list(sina_news.loc[sina_news.loc[:,"阶段"] == 5,"内容"]))

2 文本分词处理

def get_cut_result(text, stopWordsPath):
    """
    实现效果: 输入一段文本,返回分词后,重新组成的文本(需要给出停用词的路径)
    input:
        text: 一段由文本组成的字符串
        stopWordPath: 停用词文件路径
    output:
        cutted_concated: 分词后,重新组成的长字符串
    """
    # 导入停用词表
    line = open(stopWordsPath, ‘r‘, encoding="utf8").readline()
    stopwords = line.split(",")

    # 构造数字、字母pat
    pat = re.compile("[a-z0-9A-Z]+")

    result = []
    seg_list_1 = jieba.cut(period_1, cut_all=True) # 使用jieba进行分词
    for seg in seg_list_1:        # 对分词结束后获得的list重新拼接
        pat_find = re.search(pat, seg)
        if seg not in stopwords and pat_find is None:  # 过滤掉停词和全部是pat的词汇
            seg = ‘‘.join(seg.split()) #  首先对空格进行处理
            if (seg != ‘‘ and seg != "\n" and seg != "\n\n") :
                result.append(seg)
        cutted_concated = " ".join(result)
    return cutted_concated

# 对上述的6个period进行分词
concate_1 = get_cut_result(period_1, r"C:\Users\YHY\Desktop\stopWord.txt")
concate_2 = get_cut_result(period_2, r"C:\Users\YHY\Desktop\stopWord.txt")
concate_3 = get_cut_result(period_3, r"C:\Users\YHY\Desktop\stopWord.txt")
concate_4 = get_cut_result(period_4, r"C:\Users\YHY\Desktop\stopWord.txt")
concate_5 = get_cut_result(period_5, r"C:\Users\YHY\Desktop\stopWord.txt")
concate_6 = get_cut_result(period_6, r"C:\Users\YHY\Desktop\stopWord.txt")
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\YHY\AppData\Local\Temp\jieba.cache
Loading model cost 1.006 seconds.
Prefix dict has been built succesfully.
---------------------------------------------------------------------------

3 计算和输出tf idf值

# 将分词的结果append到一个列表里,作为tf idf的输入
corpus = []
corpus.append(concate_1)
corpus.append(concate_2)
corpus.append(concate_3)
corpus.append(concate_4)
corpus.append(concate_5)
corpus.append(concate_6)
# 初始化一个CountVectorizer类
# 对corpus里的文本计算tf idf值
vectorizer = CountVectorizer()
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))

word = vectorizer.get_feature_names() #所有文本的关键字
weight = tfidf.toarray()              #对应的tfidf矩阵
# 打印关键词的个数
print(len(word))     #关键词的个数
# 观察第一阶段的tf idf
weight[0]
# 将各个阶段的tf idf值、关键词等组合成一个字典
score_dict = {}
for i in range(len(corpus)):
    scores = weight[i]
    score_dict[str(i)] = {key:value for (key,value) in zip(scores,word)}
    # score_dict[‘0‘] 这里的0表示的第几阶段
# 输出各个阶段tf idf值排名前n的关键词
# 第一阶段的前10个关键词
top_30 = sorted(score_dict["0"].keys(),reverse=True)[0:30]
for i in range(30):
    print(score_dict["0"][top_30[i]] + ":" + str(top_30[i]))

--------------------------------------end--------------------------------------

原文地址:https://www.cnblogs.com/Oythonhill/p/8966870.html

时间: 2024-12-27 06:13:30

使用sklearn进行中文文本的tf idf计算的相关文章

文本分类学习(三) 特征权重(TF/IDF)和特征提取

上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的向量.这样每个文本在分词之后,就可以根据我们之前得到的词袋,构造成一个向量,词袋中有多少个词,那这个向量就是多少维度的了.然后就把这些向量交给计算机去计算,而不再需要文本啦.而向量中的数字表示的是每个词所代表的权重.代表这个词对文本类型的影响程度. 在这个过程中我们需要解决两个问题:1.如何计算出适

中文文本聚类(切词以及Kmeans聚类)

简介 一 切词 二 去除停用词 三 构建词袋空间VSMvector space model 四 将单词出现的次数转化为权值TF-IDF 五 用K-means算法进行聚类 六 总结 简介 查看百度搜索中文文本聚类我失望的发现,网上竟然没有一个完整的关于python实现的中文文本聚类(乃至搜索关键词python 中文文本聚类也是如此),网上大部分是关于文本聚类的Kmeans聚类的原理,Java实现,R语言实现,甚至都有一个C++的实现. 正好我写的一些文章,我没能很好的分类,我想能不能通过聚类的方法

[转]python进行中文文本聚类(切词以及Kmeans聚类)

简介 查看百度搜索中文文本聚类我失望的发现,网上竟然没有一个完整的关于Python实现的中文文本聚类(乃至搜索关键词python 中文文本聚类也是如此),网上大部分是关于文本聚类的Kmeans聚类的原理,Java实现,R语言实现,甚至都有一个C++的实现. 正好我写的一些文章,我没能很好的分类,我想能不能通过聚类的方法将一些相似的文章进行聚类,然后我再看每个聚类大概的主题是什么,给每个聚类一个标签,这样也是完成了分类. 中文文本聚类主要有一下几个步骤,下面将分别详细介绍: 切词 去除停用词 构建

中文文本分类1

文本挖掘(Text Mining)是从非结构化文本信息中获取用户感兴趣或者有用的模式的过程. 文本挖掘是指从大量文本数据中抽取事先未知的.可理解的.最终可用的知识的过程,同时运用这些知识更好地组织信息以便将来参考. 文本预处理 文本处理的核心任务是把非结构化和半结构化的文本转换为结构化的形式,即向量空间模型. 具体步骤: 1. 选择处理的文本范围 选择恰当的范围取决于文本挖掘任务的目标: 对于分类或聚类的任务,往往把整个文档作为处理单位: 对于情感分析.文档自动摘要或信息检索,段落或章节可能更合

使用gensim和sklearn搭建一个文本分类器(一):文档向量化

总的来讲,一个完整的文本分类器主要由两个阶段,或者说两个部分组成:一是将文本向量化,将一个字符串转化成向量形式:二是传统的分类器,包括线性分类器,SVM, 神经网络分类器等等. 之前看的THUCTC的技术栈是使用 tf-idf 来进行文本向量化,使用卡方校验(chi-square)来降低向量维度,使用liblinear(采用线性核的svm) 来进行分类.而这里所述的文本分类器,使用lsi (latent semantic analysis, 隐性语义分析) 来进行向量化, 不需要降维, 因为可以

中文文本分类

本文介绍文本挖掘与文本分类的一些基本概念和流程,为后续学习分类算法做好铺垫. 一. 文本挖掘的概念 文本挖掘(Text Mining)是从非结构化文本信息中获取用户感兴趣或者有用的模式 的过程.其中被普遍认可的文本挖掘定义如下:文本挖掘是指从大量文本数据中抽取事先未知的.可理解的.最终可用的知识的过程,同时运用这些知识更好地组织信息以便将来参考. 简言之,文本挖掘就是从非结构化的文本中寻找知识的过程. 文本挖掘的七个主要领域: (1)搜索和信息检索(IR):存储和文本文档的检索,包括搜索引擎和关

SnowNLP:一个处理中文文本的 Python 类库[转]

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典.注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode. from snownlp import SnowNLP s = SnowNLP(u'这个东西真心很赞') s.wor

中文文本分类大概的步骤

文本分类问题:给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 文本分类应用:常见的有垃圾邮件识别,情感分析 文本分类方向:主要有二分类,多分类,多标签分类 文本分类方法:传统机器学习方法(贝叶斯,svm等),深度学习方法(fastText,TextCNN等) 文本分类的处理大致分为文本预处理.文本特征提取.分类模型构建等.和英文文本处理分类相比,中文文本的预处理是关键技术. 一.中文分词:针对中文文本分类时,很关键的一个技术就是中文分词.特征粒度为词粒度远远好于字粒度,其大部分

3 中文文本中的关键字提取

前言 关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来.这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告.论文中选取出来用以表示全文主题内容信息的单词或术语,在现在的报告和论文中,我们依然可以看到关键词这一项.因此,关键词在文献检索.自动文摘.文本聚类/分类等方面有着重要的应用,它不仅是进行这些工作不可或缺的基础和前提,也是互联网上信息建库的一项重要工作. 关键词抽取从方法来说主要有两种: 第一种是关键词分配:就是给定一个已有的关键词库,对于新来的文档从该词库里面匹配