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


    一、参考资料

    新闻关键字提取和新闻推荐_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

     四、运行截图

  • 相关阅读:
    软工实践个人总结
    第05组 每周小结 (3/3)
    第05组 每周小结 (2/3)
    第05组 每周小结 (1/3)
    第05组 Beta冲刺 总结
    第05组 Beta冲刺 (5/5)
    第05组 Beta冲刺 (4/5)
    第六次作业
    第05组 Beta冲刺 (3/5)
    第05组 Beta冲刺 (2/5)
  • 原文地址:https://www.cnblogs.com/hhjing/p/14921418.html
Copyright © 2020-2023  润新知