當前位置:編程學習大全網 - 源碼下載 - 如何用Python玩轉TF-IDF之尋找相似文章並生成摘要

如何用Python玩轉TF-IDF之尋找相似文章並生成摘要

應用1:關鍵詞自動生成

核心思想是對於某個文檔中的某個詞,計算其在這個文檔中的標準化TF值,然後計算這個詞在整個語料庫中的標準化IDF值。在這裏,標準化是說對原始的計算公式進行了壹些變換以取得更好的衡量效果,並避免某些極端情況的出現。這個詞的TF-IDF值便等於TF*IDF。對於這個文檔中的所有詞計算它們的TF-IDF值,並按照由高到低的順序進行排序,由此我們便可以提取我們想要的數量的關鍵詞。

TF-IDF的優點是快捷迅速,結果相對來說比較符合實際情況。缺點是當壹篇文檔中的兩個詞的IDF值相同的時候,出現次數少的那個詞有可能更為重要。再者,TF-IDF算法無法體現我詞的位置信息,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。存在的解決辦法是對文章的第壹段和每段的第壹句話給予比較大的權重。

應用2:計算文本相似度

明白了對於每個詞,如何計算它的TF-IDF值。那麽計算文本相似度也輕而易舉。我們已經計算了文章中每個詞的TF-IDF值,那麽我們便可以將文章表征為詞的TF-IDF數值向量。要計算兩個文本的相似度,只需要計算余弦即可,余弦值越大,兩個文本便越相似。

應用3:自動摘要

2007年,美國學者的論文<A Survey on Automatic Text Summarization>總結了目前的自動摘要算法,其中很重要的壹種就是詞頻統計。這種方法最早出自1958年IBM公司壹位科學家的論文<The Automatic Creation of Literature Abstracts>。這位科學家認為,文章的信息都包含在句子中,有的句子包含的信息多,有的句子包含的信息少。自動摘要就是找出那些包含信息最多的句子。那麽句子的信息量怎麽衡量呢?論文中采用了關鍵詞來衡量。如果包含的關鍵詞越多,就說明這個句子越重要,這位科學家提出用Cluster的來表示關鍵詞的聚集。所謂簇,就是包含多個關鍵詞的句子片段。

以第壹個圖為例,其中的cluster壹***有7個詞,其中4個是關鍵詞。因此它的重要性分值就等於(4*4)/7=2.3。然後,找出包含cluster重要性分值最高的句子(比如5句),把它們合在壹起,就構成了這篇文章的自動摘要。具體實現可以參見<Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites>(O'Reilly, 2011)壹書的第8章,Python代碼見github。這種算法後來被簡化,不再區分cluster,只考慮句子包含的關鍵詞。偽代碼如下。

Summarizer(originalText,?maxSummarySize):

//?計算文本的詞頻,生成壹個列表,比如[(10,'the'),?(3,'language'),?(8,'code')...]

wordFrequences?=?getWordCounts(originalText)

//?過濾掉停用詞,列表變成[(3,?'language'),?(8,?'code')...]

contentWordFrequences?=?filtStopWords(wordFrequences)

//?按照詞頻的大小進行排序,形成的列表為['code',?'language'...]

contentWordsSortbyFreq?=?sortByFreqThenDropFreq(contentWordFrequences)

//?將文章分成句子

sentences?=?getSentences(originalText)

//?選擇關鍵詞首先出現的句子

setSummarySentences?=?{}

foreach?word?in?contentWordsSortbyFreq:

  firstMatchingSentence?=?search(sentences,?word)

  setSummarySentences.add(firstMatchingSentence)

  if?setSummarySentences.size()?=?maxSummarySize:

    break

//?將選中的句子按照出現順序,組成摘要

summary?=?""

foreach?sentence?in?sentences:

  if?sentence?in?setSummarySentences:

    summary?=?summary?+?"?"?+?sentence

return?summary

類似的算法已經被寫成了工具,比如基於Java的Classifier4J庫的SimpleSummariser模塊、基於C語言的OTS庫、以及基於classifier4J的C#實現和python實現。

  • 上一篇:閑魚秒拍的都是些什麽人,看評論都是99+
  • 下一篇:親們誰知道東方神起的《遙望彩霞》的中文歌詞
  • copyright 2024編程學習大全網