一、參考資料
新聞關鍵字提取和新聞推薦_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
四、運行截圖

