新聞文本分類——關鍵詞提取


一、參考資料

新聞關鍵字提取和新聞推薦_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

 四、運行截圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM