新闻文本分类——关键词提取

一、参考资料

新闻关键字提取和新闻推荐_mawenqi0729的博客-CSDN博客_新闻关键词抽取

jieba 分词的三种模式_天主极乐大帝的博客-CSDN博客

二、使用jieba进行分类

1、结巴分词的三种模式

精确模式(默认)、全模式和搜索引擎模式

1)精确模式,试图将句子精确的分开,适用于文本分析。cut_all参数默认为False,所有使用cut方法时默认为精确模式。

import jieba strings = '今天天气真好' 
seg = jieba.cut(strings,cut_all=False) 
print(','.join(seg))
output : 今天天气,真,好

2)全模式,把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。cut_all参数为True。

import jieba strings = '今天天气真好' 
seg = jieba.cut(strings,cut_all=True) 
print(','.join(seg)) 
output : 今天,今天天气,天天,天气,真好

3)搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。调用jieba.cut_for_search(值)方法。

import jieba strings = '今天天气真好' 
seg = jieba.cut_for_search(strings) 
print(','.join(seg)) 
output : 今天,天天,天气,今天天气,真,好
三、关键字提取

1、经过查阅资料发现提取文章中的关键词需要考虑两点

  • 词本身(词长0.1,词性0.8,词频0.3)0.4
  • 居间度0.6
tw = 0.4  # 词权重
vdw = 0.6  # 居间度权重
lenw = 0.1  # 词长权重
posw = 0.8  # 词性权重
tfw = 0.3  # tf词频权重

词长:词的长度。

词性:词性是根据jieba分词判断的词性,给出一个该词性在一篇文章中一般来讲的重要程度,比如名词等词性相对来讲会更重要一些,而连词介词则是重要度为0的需要尽量剔除的词。

词频:该词在文章中出现的频率。

居间度:在将相似度矩阵抽象成图之下进行计算的,所以首先需要介绍一下相似度矩阵。如果将词汇进行两两对比,那么不是所有词的词义差距都是一样大的,比如做和干就是意思非常相近的两个词,而中国和吃饭则完全不是一个意思,那这么多词怎么得到它们之间的相似度呢,可以使用这份将词表示为编码的词表,在这份词表中代码越相近,他们的意思也就越相近。

2、形成相似度二维表

找到相对应的代码,计算相似度之后,形成相关对应的二维表,这个表并不全是0,1表示,为了大量简化计算,把所有相似度>0.5的设为1,<0.5的设为0,从而将词汇相似度的二维表抽象成为了一个由顶点和边的图,其中每个顶点都是文章中的一个词。

def similar_matrix(self, string_data):
        """
        function: 构建语义相关度网络
        :param string_data: 待分析的语句
        :return: similar_matrix 语义相关度网络
        """
        word_tag_dict = self.word_tag_dictionary()
        keys = word_tag_dict.keys()
        candidate_words_dict, nwword = CandidateWords().get_candidate_list(string_data)
        nwword_words = nwword.values()   #order words
        length = len(nwword_words)
        similar_matrix = numpy.zeros(shape=(length, length))
        word_list = list()
        for word in nwword_words:
            if word in keys:
                word_list.append(word)
        for i in range(length):
            for j in range(length):
                if (nwword_words[i] in word_list) and (nwword_words[j] in word_list):
                    similar_matrix[i][j] = self.similarity(i, j, nwword_words, word_tag_dict)
                else:
                    similar_matrix[i][j] = 0.2
        # self.draw_network(similar_matrix, nwword_words)
        return similar_matrix

    def similarity_network_edges(self, string_data):
        similar_matrix = self.similar_matrix(string_data)
        row_col = similar_matrix.shape
        for i in range(row_col[0]):
            for j in xrange(i+1, row_col[0]):
                if similar_matrix[i][j] > 0.5:
                    self.E.append((i, j))
        return self.E

 四、运行截图

原文地址:https://www.cnblogs.com/hhjing/p/14921418.html