日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关键词提取_NLP 关键词 提取 实战 案例

發布時間:2025/4/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关键词提取_NLP 关键词 提取 实战 案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

訓練一個關鍵詞提取算法需要以下幾個步驟:

1)加載已有的文檔數據集;
2)加載停用詞表;
3)對數據集中的文檔進行分詞;
4)根據停用詞表,過濾干擾詞;
5)根據數據集訓練算法;

根據訓練好的關鍵詞提取算法對新文檔進行關鍵詞提取要經過以下環節:

1)對新文檔進行分詞;
2)根據停用詞表,過濾干擾詞;
3)根據訓練好的算法提取關鍵詞;

1 加載模塊

import math import jieba import jieba.posseg as psg from gensim import corpora, models from jieba import analyse import functools

2 定義好停用詞表的加載方法

def get_stopword_list():# 停用詞表存儲路徑,每一行為一個詞,按行讀取進行加載# 進行編碼轉換確保匹配準確率stop_word_path = './stopword.txt'stopword_list = [sw.replace('/n', '') for sw in open(stop_word_path).readlines()]return stopword_list

3 定義一個分詞方法

def seg_to_list(sentence, pos=False):''' 分詞方法,調用結巴接口。pos為判斷是否采用詞性標注 '''if not pos:# 不進行詞性標注的分詞方法seg_list = jieba.cut(sentence)else:# 進行詞性標注的分詞方法seg_list = psg.cut(sentence)return seg_list

4 定義干擾詞過濾方法

def word_filter(seg_list, pos=False):''' 1. 根據分詞結果對干擾詞進行過濾;2. 根據pos判斷是否過濾除名詞外的其他詞性;3. 再判斷是否在停用詞表中,長度是否大于等于2等;'''stopword_list = get_stopword_list() # 獲取停用詞表filter_list = [] # 保存過濾后的結果# 下面代碼: 根據pos參數選擇是否詞性過濾## 下面代碼: 如果不進行詞性過濾,則將詞性都標記為n,表示全部保留for seg in seg_list:if not pos:word = segflag = 'n'else:word = seg.word # 單詞flag = seg.flag # 詞性if not flag.startswith('n'):continue# 過濾停用詞表中的詞,以及長度為<2的詞if not word in stopword_list and len(word)>1:filter_list.append(word)return filter_list

5 加載數據集,并對數據集中的數據分詞和過濾干擾詞

def load_data(pos=False, corpus_path = './corpus.txt'):'''目的:調用上面方法對數據集進行處理,處理后的每條數據僅保留非干擾詞參數:1. 數據加載2. pos: 是否詞性標注的參數3. corpus_path: 數據集路徑'''doc_list = [] # 結果for line in open(corpus_path, 'r'):content = line.strip() # 每行的數據seg_list = seg_to_list(content, pos) # 分詞filter_list = word_filter(seg_list, pos) # 過濾停用詞doc_list.append(filter_list) # 將處理后的結果保存到doc_listreturn doc_list

6 IDF 訓練

# TF-IDF的訓練主要是根據數據集生成對應的IDF值字典,后續計算每個詞的TF-IDF時,直接從字典中讀取。def train_idf(doc_list):idf_dic = {} # idf對應的字典tt_count = len(doc_list) # 總文檔數# 每個詞出現的文檔數for doc in doc_list: for word in set(doc):idf_dic[word] = idf_dic.get(word, 0.0) + 1.0# 按公式轉換為idf值,分母加1進行平滑處理for k, v in idf_dic.items():idf_dic[k] = math.log(tt_count/(1.0 + v))# 對于沒有在字典中的詞,默認其盡在一個文檔出現,得到默認idf值default_idf = math.log(tt_count/(1.0))return idf_dic, default_idf

7 LSI 訓練

# LSI的訓練時根據現有的數據集生成文檔-主題分布矩陣和主題-詞分布矩陣,Gensim中有實現好的方法,可以直接調用。def train_lsi(self):lsi = models.LsiModel(self.corpus_tfidf, id2word=self.dictionary, num_topics=self.num_topics)return lsi

8 LDA訓練

# LDA的訓練時根據現有的數據集生成文檔-主題分布矩陣和主題-詞分布矩陣,Gensim中有實現好的方法,可以直接調用。def train_lda(self):lda = models.LdaModel(self.corpus_tfidf, id2word=self.dictionary, num_topics=self.num_topics)return lda

9 cmp函數

# 為了輸出top關鍵詞時,先按照關鍵詞的計算分值排序,在得分相同時,根據關鍵詞進行排序def cmp(e1, e2):''' 排序函數,用于topK關鍵詞的按值排序 '''import numpy as npres = np.sign(e1[1] - e2[1])if res != 0:return reselse:a = e1[0] + e2[0]b = e2[0] + e1[0]if a > b:return 1elif a == b:return 0else:return -1

10 TF-IDF實現方法

根據具體要處理的文本,計算每個詞的TF值,并獲取前面訓練好的IDF數據,直接獲取每個詞的IDF值,綜合計算每個詞的TF-IDF。

class TfIdf(object):# 四個參數分別是:訓練好的idf字典,默認idf字典,處理后的待提取文本, 關鍵詞數量def __init__(self, idf_dic, default_idf, word_list, keyword_num):self.idf_dic, self.default_idf = idf_dic, default_idfself.word_list = word_listself.tf_dic = self.get_tf_dic() # 統計tf值self.keyword_num = keyword_numdef get_tf_dic(self):# 統計tf值tf_dic = {}for word in self.word_list:tf_dic[word] = tf_dic.get(word, 0.0) + 1.0tt_count = len(self.word_list)for k, v in tf_dic.items():tf_dic[k] = float(v) / tt_count # 根據tf求值公式return tf_dicdef get_tfidf(self):# 計算tf-idf值tfidf_dic = {}for word in self.word_list:idf = self.idf_dic.get(word, self.default_idf)tf = self.tf_dic.get(word, 0)tfidf = tf * idftfidf_dic[word] = tfidftfidf_dic.items()# 根據tf-idf排序,去排名前keyword_num的詞作為關鍵詞for k, v in sorted(tfidf_dic.items(), key=functools.cmp_to_key(cmp), reverse=True)[:self.keyword_num]:print(k + '/', end='')print()

11 完整的主題模型實現方法

分別實現了LSI,LDA算法,根據傳入參數model進行選擇,幾個參數如下:

  • doc_list 是前面數據集加載方法的返回結果
  • keyword_num同上,為關鍵詞數量
  • model為本主題模型的具體算法,分別可以傳入LSI,LDA,默認為LSI
  • num_topics為主題模型的主題數量
  • class TopicModel(object):# 三個傳入參數:處理后的數據集,關鍵詞數量,具體模型(LSI,LDA),主題數量def __init__(self, doc_list, keyword_num, model='LSI', num_topics=4):# 使用gensim接口,將文本轉為向量化表示# 先構建詞空間self.dictionary = corpora.Dictionary(doc_list)# 使用BOW模型向量化corpus = [self.dictionary.doc2bow(doc) for doc in doc_list]# 對每個詞,根據tf-idf進行加權,得到加權后的向量表示self.tfidf_model = models.TfidfModel(corpus)self.corpus_tfidf = self.tfidf_model[corpus]self.keyword_num = keyword_numself.num_topics = num_topics# 選擇加載的模型if model == "LSI":self.model = self.train_lsi()else:self.model = self.train_lda()# 得到數據集的主題-詞分布word_dic = self.word_dictionary(doc_list) self.wordtopic_dic = self.get_wordtopic(word_dic)# LSI的訓練時根據現有的數據集生成文檔-主題分布矩陣和主題-詞分布矩陣,Gensim中有實現好的方法,可以直接調用。def train_lsi(self):lsi = models.LsiModel(self.corpus_tfidf, id2word=self.dictionary, num_topics=self.num_topics)return lsi# LDA的訓練時根據現有的數據集生成文檔-主題分布矩陣和主題-詞分布矩陣,Gensim中有實現好的方法,可以直接調用。def train_lda(self):lda = models.LdaModel(self.corpus_tfidf, id2word=self.dictionary, num_topics=self.num_topics)return ldadef get_wordtopic(self, word_dic):wordtopic_dic = {}for word in word_dic:single_list = [word]wordcorpus = self.tfidf_model[self.dictionary.doc2bow(single_list)]wordtopic = self.model[wordcorpus]wordtopic_dic[word] = wordtopicreturn wordtopic_dicdef get_simword(self, word_list):# 計算詞的分布和文檔的分布的相似度,去相似度最高的keyword_num個詞作為關鍵詞sentcorpus = self.tfidf_model[self.dictionary.doc2bow(word_list)]senttopic = self.model[sentcorpus]# 余弦相似度計算def calsim(l1, l2):a,b,c = 0.0, 0.0, 0.0for t1, t2 in zip(l1, l2):x1 = t1[1]x2 = t2[1]a += x1 * x1b += x1 * x1c += x2 * x2sim = a / math.sqrt(b * c) if not (b * c) == 0.0 else 0.0return sim# 計算輸入文本和每個詞的主題分布相似度sim_dic = {}for k, v in self.wordtopic_dic.items():if k not in word_list:continuesim = calsim(v, senttopic)sim_dic[k] = simfor k, v in sorted(sim_dic.items(), key=functools.cmp_to_key(cmp),reverse=True)[:self.keyword_num]:print(k + '/' , end='')print()def word_dictionary(self, doc_list):# 詞空間構建方法和向量化方法,在沒有gensim接口時的一般處理方法dictionary = []for doc in doc_list:dictionary.extend(doc)dictionary = list(set(dictionary))return dictionarydef doc2bowvec(self, word_list):vec_list = [1 if word in word_list else 0 for word in self.dictionary]return vec_list

    12 對上面的各個方法進行封裝,統一算法調用接口

    def tfidf_extract(word_list, pos=False, keyword_num=10):doc_list = load_data(pos)idf_dic, default_idf = train_idf(doc_list)tfidf_model = TfIdf(idf_dic, default_idf, word_list, keyword_num)tfidf_model.get_tfidf()def textrank_extract(text, pos=False, keyword_num=10):textrank = analyse.textrankkeywords = textrank(text, keyword_num)# 輸出抽取出的關鍵詞for keyword in keywords:print(keyword + "/", end='')print()def topic_extract(word_list, model, pos=False, keyword_num=10):doc_list = load_data(pos)topic_model = TopicModel(doc_list, keyword_num, model=model)topic_model.get_simword(word_list)

    13 主函數調用

    if __name__ == "__main__":text = '6月19日,《2012年度“中國愛心城市”公益活動新聞發布會》在京舉行。' + '中華社會救助基金會理事長許嘉璐到會講話。基金會高級顧問朱發忠,全國老齡' + '辦副主任朱勇,民政部社會救助司助理巡視員周萍,中華社會救助基金會副理事長耿志遠,' + '重慶市民政局巡視員譚明政。晉江市人大常委會主任陳健倩,以及10余個省、市、自治區民政局' + '領導及四十多家媒體參加了發布會。中華社會救助基金會秘書長時正新介紹本年度“中國愛心城' + '市”公益活動將以“愛心城市宣傳、孤老關愛救助項目及第二屆中國愛心城市大會”為主要內容,重慶市' + '、呼和浩特市、長沙市、太原市、蚌埠市、南昌市、汕頭市、滄州市、晉江市及遵化市將會積極參加' + '這一公益活動。中國雅虎副總編張銀生和鳳凰網城市頻道總監趙耀分別以各自媒體優勢介紹了活動' + '的宣傳方案。會上,中華社會救助基金會與“第二屆中國愛心城市大會”承辦方晉江市簽約,許嘉璐理' + '事長接受晉江市參與“百萬孤老關愛行動”向國家重點扶貧地區捐贈的價值400萬元的款物。晉江市人大' + '常委會主任陳健倩介紹了大會的籌備情況。'pos = Falseseg_list = seg_to_list(text, pos)filter_list = word_filter(seg_list, pos)print("TF-IDF模型結果:")tfidf_extract(filter_list)print("TextRank模型結果:")textrank_extract(text)print("LSI模型結果:")topic_extract(filter_list, 'LSI', pos)print("LDA模型結果:")topic_extract(filter_list, 'LDA', pos)

    14 輸出結果:

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的关键词提取_NLP 关键词 提取 实战 案例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 韩国一区二区三区视频 | 成人日批视频 | 国产视频aaa| www男人天堂 | 在线艹 | 人体内射精一区二区三区 | 二级毛片| 少妇熟女一区二区三区 | 国偷自拍 | 天天人人精品 | 最近最经典中文mv字幕 | 深夜成人福利 | 六月丁香婷婷网 | 黄色99视频 | 亚洲欧美日韩久久精品 | 免费av资源| 污网站免费在线 | 成人一卡二卡 | 日本不卡在线 | 激情内射人妻1区2区3区 | 天天爽天天操 | 欧美黄色片免费看 | 日韩人妻一区二区三区蜜桃视频 | www.999热| 香蕉免费在线视频 | 黄色网av| 色爽爽一区二区三区 | 亚洲最大在线观看 | 99精品小视频 | 免费av播放 | 国产伊人自拍 | 又黄又爽网站 | 小泽玛利亚一区二区三区视频 | 欧美日韩免费做爰视频 | 日韩在线不卡一区 | 五月天综合色 | 精品在线播放视频 | 久久97| 美女屁股眼视频免费 | 国产午夜电影 | 国产3p在线播放 | 97碰| 少妇又紧又色又爽又刺激视频 | 国产成人精品一区二区三区无码熬 | 欧洲成人在线 | 韩国视频一区二区三区 | 五月婷婷久久久 | 自拍一级片 | 色吧视频 | 国产成年人视频 | 国产精品久久一区二区三区 | 亚洲乱码国产乱码精品 | 亚洲日本欧美 | 污视频网址在线观看 | 伊人爱爱网 | 日韩综合精品 | 国久久久| 亚洲国产欧美日韩在线 | 韩日黄色 | 日韩黄色小视频 | 中文字幕av一区二区三区谷原希美 | www.色com| 国产精品一区二区无码对白 | 青青视频免费在线观看 | 巨乳动漫美女 | 全部免费毛片在线播放高潮 | 69欧美视频 | 海角社区在线视频播放观看 | 久久久久久人妻一区二区三区 | 国产区精品区 | 黄色裸体网站 | 最新av导航 | 337p日本大胆噜噜噜噜 | 国产精品网站免费 | 粉嫩av国产一区二区三区 | 国产微拍精品一区 | 狠狠撸狠狠干 | 日韩视频免费观看高清 | 午夜精品久久久久久久无码 | 国产一区二区网 | 亚洲精品999 | 偷拍亚洲另类 | 亚洲国产大片 | 都市激情校园春色 | 1024毛片基地 | 公侵犯一区二区三区四区中文字幕 | 亚洲福利午夜 | 日日夜夜狠 | 免费一区二区在线观看 | 国产人妻777人伦精品hd | 午夜男人av | 天天干天天搞天天射 | 国产女主播一区二区三区 | 亚洲激情综合 | 一区二区免费 | 人人射人人 | 99只有精品| 成人无码一区二区三区 | brazzers猛女系列 |