參考:
NLP關鍵詞提取方法總結及實現_關鍵詞提取演算法-CSDN部落格
TF-IDF演算法介紹及實現-CSDN部落格
TextRank演算法介紹及實現-CSDN部落格
使用pandas庫實現csv行和列的獲取 - chuyaoxin - 部落格園 (cnblogs.com)
一看到地圖資料下鑽顯示我就煩。。。。沒關係的。。。。。額。看錯了原來不用實現太好辣哈哈哈哈哈哈哈哈額。
那就用TextRank提取關鍵詞吧~
可能出現的錯誤:
1.module'networks 'has no attribute 'from_numpy_ matrix ',可參考這篇文章進行解決文字摘要 - 使用 TextRank4ZH 抽取中文文字摘要_textrank4sentence-CSDN部落格
2.ImportError: cannot import name 'gcd' from 'fractions' 可以嘗試在lib資料夾中找到fractions.py檔案,在匯入庫那裡加入一行from math import gcd
檔案在哪找:看報錯提示後面有寫。
主要實現程式碼(主要就是改改text的獲取,然後在輸出到想要的檔案即可):
文字檔案處理方法可參考如下程式碼
# coding=utf-8 from textrank4zh import TextRank4Keyword, TextRank4Sentence import jieba.analyse import codecs # from snownlp import SnowNLP import pandas as pd # import numpy as np # 關鍵詞抽取 def keywords_extraction(text): tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'nrfg', 'ns', 'nt', 'nz']) # allow_speech_tags --詞性列表,用於過濾某些詞性的詞 tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words', pagerank_config={'alpha': 0.85, }) # text -- 文字內容,字串 # window -- 視窗大小,int,用來構造單詞之間的邊。預設值為2 # lower -- 是否將英文文字轉換為小寫,預設值為False # vertex_source -- 選擇使用words_no_filter, words_no_stop_words, words_all_filters中的哪一個來構造pagerank對應的圖中的節點 # -- 預設值為`'all_filters'`,可選值為`'no_filter', 'no_stop_words', 'all_filters' # edge_source -- 選擇使用words_no_filter, words_no_stop_words, words_all_filters中的哪一個來構造pagerank對應的圖中的節點之間的邊 # -- 預設值為`'no_stop_words'`,可選值為`'no_filter', 'no_stop_words', 'all_filters'`。邊的構造要結合`window`引數 # pagerank_config -- pagerank演算法引數配置,阻尼係數為0.85 keywords = tr4w.get_keywords(num=6, word_min_len=2) # num -- 返回關鍵詞數量 # word_min_len -- 詞的最小長度,預設值為1 return keywords # 關鍵短語抽取 def keyphrases_extraction(text): tr4w = TextRank4Keyword() tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words', pagerank_config={'alpha': 0.85, }) keyphrases = tr4w.get_keyphrases(keywords_num=6, min_occur_num=1) # keywords_num -- 抽取的關鍵詞數量 # min_occur_num -- 關鍵短語在文中的最少出現次數 return keyphrases # 關鍵句抽取 def keysentences_extraction(text): tr4s = TextRank4Sentence() tr4s.analyze(text, lower=True, source='all_filters') # text -- 文字內容,字串 # lower -- 是否將英文文字轉換為小寫,預設值為False # source -- 選擇使用words_no_filter, words_no_stop_words, words_all_filters中的哪一個來生成句子之間的相似度。 # -- 預設值為`'all_filters'`,可選值為`'no_filter', 'no_stop_words', 'all_filters' # sim_func -- 指定計算句子相似度的函式 # 獲取最重要的num個長度大於等於sentence_min_len的句子用來生成摘要 keysentences = tr4s.get_key_sentences(num=3, sentence_min_len=6) return keysentences def keywords_textrank(text): keywords = jieba.analyse.textrank(text, topK=6) return keywords if __name__ == "__main__": f = codecs.open('../資料清洗/t1_test_test.txt', mode='r', encoding='utf-8') lines = f.readlines() # 第八列是專案成果簡介,提取出來 lines = lines[:160] text_list = [] # 專案成果簡介 key_list = [] # 關鍵詞 keyphrases_list = [] # 關鍵短語 for line in lines: # print(line.strip().split("|")[8]) text_list.append(line.strip().split("|")[8]) print(text_list) # 關鍵詞抽取 for text in text_list: key_list.append(keywords_extraction(text)) keyphrases_list.append(keyphrases_extraction(text)) # keysentences_extraction(text) # 關鍵句抽取 print(key_list) print(keyphrases_list)
對csv檔案可參考一下程式碼
# coding=utf-8 from textrank4zh import TextRank4Keyword, TextRank4Sentence import jieba.analyse import codecs # from snownlp import SnowNLP import pandas as pd # import numpy as np # 關鍵詞抽取 def keywords_extraction(text): tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'nrfg', 'ns', 'nt', 'nz']) # allow_speech_tags --詞性列表,用於過濾某些詞性的詞 tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words', pagerank_config={'alpha': 0.85, }) # text -- 文字內容,字串 # window -- 視窗大小,int,用來構造單詞之間的邊。預設值為2 # lower -- 是否將英文文字轉換為小寫,預設值為False # vertex_source -- 選擇使用words_no_filter, words_no_stop_words, words_all_filters中的哪一個來構造pagerank對應的圖中的節點 # -- 預設值為`'all_filters'`,可選值為`'no_filter', 'no_stop_words', 'all_filters' # edge_source -- 選擇使用words_no_filter, words_no_stop_words, words_all_filters中的哪一個來構造pagerank對應的圖中的節點之間的邊 # -- 預設值為`'no_stop_words'`,可選值為`'no_filter', 'no_stop_words', 'all_filters'`。邊的構造要結合`window`引數 # pagerank_config -- pagerank演算法引數配置,阻尼係數為0.85 keywords = tr4w.get_keywords(num=6, word_min_len=2) # num -- 返回關鍵詞數量 # word_min_len -- 詞的最小長度,預設值為1 return keywords # 關鍵短語抽取 def keyphrases_extraction(text): tr4w = TextRank4Keyword() tr4w.analyze(text=text, window=2, lower=True, vertex_source='all_filters', edge_source='no_stop_words', pagerank_config={'alpha': 0.85, }) keyphrases = tr4w.get_keyphrases(keywords_num=6, min_occur_num=1) # keywords_num -- 抽取的關鍵詞數量 # min_occur_num -- 關鍵短語在文中的最少出現次數 return keyphrases # 關鍵句抽取 def keysentences_extraction(text): tr4s = TextRank4Sentence() tr4s.analyze(text, lower=True, source='all_filters') # text -- 文字內容,字串 # lower -- 是否將英文文字轉換為小寫,預設值為False # source -- 選擇使用words_no_filter, words_no_stop_words, words_all_filters中的哪一個來生成句子之間的相似度。 # -- 預設值為`'all_filters'`,可選值為`'no_filter', 'no_stop_words', 'all_filters' # sim_func -- 指定計算句子相似度的函式 # 獲取最重要的num個長度大於等於sentence_min_len的句子用來生成摘要 keysentences = tr4s.get_key_sentences(num=3, sentence_min_len=6) return keysentences def keywords_textrank(text): keywords = jieba.analyse.textrank(text, topK=6) return keywords if __name__ == "__main__": df = pd.read_csv("t2.csv",encoding= 'utf-8') # 如果匯出的csv檔案沒有行頭,可以設定一個 df.columns=['ID','成果名稱','行業','年度','批准登記號','單位名稱','課題來源','主要人員','評價單位名稱','成果簡介'] # t2的最後一列是成果簡介列,提取出來 # 這裡要注意iloc和loc的區別,loc是從1開始,iloc從0開始 # (這倆種方法也可以)text_list = df[['成果簡介']] text_list = df.loc[:,'成果簡介'] t2_text = df.iloc[:,[9]] # 專案成果簡介 print(t2_text) t2_key_list = [] # 關鍵詞+比重 t2_keyphrases_list = [] # 關鍵短語 print(t2_text.values[2]) # 關鍵詞抽取 for i in range(len(t2_text)): # print(t2_text.values[i]) # 列印出來的是1X1陣列 # 所以這裡需要再取一下陣列裡面的具體內容(字串) t2_key_list.append(keywords_extraction(t2_text.values[i][0])) t2_keyphrases_list.append(keyphrases_extraction(t2_text.values[i][0])) # 關鍵短語 # 將關鍵詞資料新增到檔案中 # df['關鍵短語']=t2_keyphrases_list # 如果直接這樣子寫,有些關鍵詞是一個陣列,寫入也是陣列的形式['玉米播種', '施肥技術', '農藝技術'] # 所以我們將期合併下,如[['生態預測'], ['品系侵染'], ['柴胡根腐病'], ['玉米播種', '施肥技術', '農藝技術']] # 變為[['生態預測'], ['品系侵染'], ['柴胡根腐病'], ['玉米播種 施肥技術 農藝技術']] for i in range(len(t2_keyphrases_list)): t2_keyphrases_list[i] = ' '.join([elem for elem in t2_keyphrases_list[i]]) # print(t2_keyphrases_list) df['關鍵短語'] = t2_keyphrases_list df.to_csv('t2_add.csv',index=False) """ f = codecs.open('../資料清洗/t1_test_test.txt', mode='r', encoding='utf-8') lines = f.readlines() # 第9列是專案成果簡介,提取出來 lines = lines[:160] text_list = [] # 專案成果簡介 key_list = [] # 關鍵詞 keyphrases_list = [] # 關鍵短語 for line in lines: # print(line.strip().split("|")[8]) text_list.append(line.strip().split("|")[8]) print(text_list) # 關鍵詞抽取 for text in text_list: key_list.append(keywords_extraction(text)) keyphrases_list.append(keyphrases_extraction(text)) # keysentences_extraction(text) # 關鍵句抽取 print(key_list) print(keyphrases_list) """
ok