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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

信息抽取--关键词提取

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息抽取--关键词提取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(純屬為了記錄自己學習的點滴過程,引用資料都附在參考列表)

1 基本概念

什么是關鍵詞(是什么)
大略的講就是文章中重要的單詞,而不限于詞語的新鮮程度。
什么樣的單詞是重要的單詞,恐怕這是個見仁見智的問題,所以可以根據用戶需求,合理設計先驗知識融進模型進行建模,本文討論的是最易于理解、最常見的幾種度量“重要”的方式,也可以理解為幾種常見理解“關鍵詞”的觀點。

2 問題

提取一篇文章的關鍵詞;

3 解決思路

3.1 詞頻統計

先驗知識:一方面,關鍵詞通常在文章中反復出現,為了解釋關鍵詞,作者通常會反復提及它們;另一方面,反復出現的詞語不一定是關鍵詞,根據齊夫定律,一些詞頻高的往往是標點符號和助詞’的‘等,它們顯然不是關鍵詞。
算法:根據先驗知識,算法模型如下:

  • 分詞;
  • 停用詞過濾;
  • 按詞頻提取前n個;
  • 缺點:用詞頻來提取關鍵詞有一個缺陷,那就是高頻詞并不等價于關鍵詞。比如在一個體育網站中,所有文章都是奧運會報道,導致“奧運會”詞頻最高,用戶希望通過關鍵詞看到每篇文章的特色。此時,TF-IDF 就派上用場了。

    3.2 IF-IDF

    先驗知識:如果某個詞在一篇文檔中出現的頻率高,并且在其它文檔中很少出現,則認為這個詞有很好的類別區分能力。

    TF-IDF的數學表達
    TF?IDF(t,d)=TF(t,d)DF(t)=TF(t,d)×IDF(t)TF-IDF(t,d) = \frac{TF(t, d)}{DF(t)} \\ =TF(t, d) \times IDF(t) TF?IDF(t,d)=DF(t)TF(t,d)?=TF(t,d)×IDF(t)
    其中,t 代表單詞,d 代表文檔,TF(t,d) 代表 t 在 d 中出現頻次,DF(t) 代表有多少篇文檔包含 t。DF 的倒數稱為IDF,這也是 TF-IDF 得名的由來,這個數學式子正式上面基本思想的刻畫。

    改進:TF-IDF在大型語料庫上的統計類似于一種學習過程,假如我們沒有這么大型的語料庫或者存儲IDF的內存,同時又想改善詞頻統計的效果該怎么辦呢?此時可以使用TextRank算法。

    3.3 TextRank

    基本思想:TextRank是大名鼎鼎的PageRank算法在文本上的應用。
    Google用它來體現網頁的相關性和重要性,在搜索引擎優化操作中是經常被用來評估網頁優化的成效因素之一。
    即對于某個網頁A而言,該網頁PageRank值的計算基于以下兩個假設:

  • 數量假設,如果越多的網頁指向A,即A的入鏈數量越多,則該網頁越重要;
  • 質量假設,如果指向A的網頁質量越高,則A越重要,即權重因素不同。
  • (PageRank的數學細節參考李航《統計學習方法》);
    將 PageRank 應用到關鍵詞提取,無非是將單詞視作節點而已,另外,每個單詞的外鏈來自自身前后固定大小的窗口內的所有單詞。

    4 實現

    4.1 基于詞頻統計

    • 這只是一個針對詞頻統計算法的演示性代碼,也易于改成批處理的代碼;
    • 詞頻統計屬于單文檔算法,就是根據一篇文章(不借助其它文章)就可以分析該文章的關鍵詞;
    # -*- coding:utf-8 -*-from pyhanlp import *TermFrequency = JClass('com.hankcs.hanlp.corpus.occurrence.TermFrequency') TermFrequencyCounter = JClass('com.hankcs.hanlp.mining.word.TermFrequencyCounter')if __name__ == '__main__':counter = TermFrequencyCounter()counter.add("加油加油中國隊!") # 第一個文檔counter.add("中國觀眾高呼加油中國") # 第二個文檔for termFrequency in counter: # 遍歷每個詞與詞頻print("%s=%d" % (termFrequency.getTerm(), termFrequency.getFrequency()))print(counter.top(2)) # 取 top N# 根據詞頻提取關鍵詞print(TermFrequencyCounter.getKeywordList("女排奪冠,觀眾歡呼女排女排女排!", 3))

    運行結果:

    中國=2 中國隊=1 加油=3 觀眾=1 高呼=1 [加油=3, 中國=2] [女排, 觀眾, 歡呼]

    4.2 基于TF-IDF

    • TF-IDF是基于多文檔的統計量,所以要輸入多篇文檔后才能開始計算;
    • 統計TF-IDF同樣涉及分詞和停用詞過濾;
    # -*- coding:utf-8 -*-from pyhanlp import *TfIdfCounter = JClass('com.hankcs.hanlp.mining.word.TfIdfCounter')if __name__ == '__main__':counter = TfIdfCounter()counter.add("《女排奪冠》", "女排北京奧運會奪冠") # 輸入多篇文檔counter.add("《羽毛球男單》", "北京奧運會的羽毛球男單決賽")counter.add("《女排》", "中國隊女排奪北京奧運會金牌重返巔峰,觀眾歡呼女排女排女排!")counter.compute() # 輸入完畢for id in counter.documents():print(id + " : " + counter.getKeywordsOf(id, 3).toString()) # 根據每篇文檔的TF-IDF提取關鍵詞# 根據語料庫已有的IDF信息為語料庫之外的新文檔提取關鍵詞print(counter.getKeywords("奧運會反興奮劑", 2))

    運行結果:

    女排》 : [女排=5.150728289807123, 重返=1.6931471805599454, 巔峰=1.6931471805599454] 《女排奪冠》 : [奪冠=1.6931471805599454, 女排=1.2876820724517808, 奧運會=1.0] 《羽毛球男單》 : [決賽=1.6931471805599454, 羽毛球=1.6931471805599454, 男單=1.6931471805599454] [, 興奮劑]

    4.3 基于TextRank

    • 詞頻統計屬于單文檔算法;
    from pyhanlp import *""" 關鍵詞提取""" content = ( "程序員(英文Programmer)是從事程序開發、維護的專業人員。" "一般將程序員分為程序設計人員和程序編碼人員," "但兩者的界限并不非常清楚,特別是在中國。" "軟件從業人員分為初級程序員、高級程序員、系統" "分析員和項目經理四大類。")TextRankKeyword = JClass("com.hankcs.hanlp.summary.TextRankKeyword") keyword_list = HanLP.extractKeyword(content, 5) print(keyword_list)

    運行結果:

    [程序員, 程序, 分為, 人員, 軟件]

    5 參考文獻

  • https://www.jianshu.com/p/f6d66ab97332 《PageRank算法核心思想及數學支撐》;
  • 何晗《自然語言處理入門》;
  • 宗成慶《統計自然語言處理》;
  • 李航《統計學習方法》;
  • 6 需要解決的問題

  • PageRank算法數學細節;
  • 總結

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

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