TF-IDF

杰卡德相似系數(shù)

兩個集合A和B的交集元素在A和B的并集中所占的比例
J(A,B) = |A^B| / |A V B|
杰卡德相似系數(shù)是衡量2個集合相似度的一種指標(biāo)

使用詞頻-逆文檔頻率(TF-IDF)實現(xiàn)關(guān)鍵詞提取

詞頻-逆文檔頻率(Term Frequency - Inverse Document Frequency,TF-IDF)是一種用于資訊檢索和文本挖掘的常用加權(quán)技術(shù)乍炉。

TF-IDF 算法的主要思想:如果某個詞或短語在一篇文章中出現(xiàn)的頻率TF高峦筒,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或短語具有很好的類別區(qū)分能力,適合用于分類没卸。

TF-IDF = TF * IDF

1.TF 的計算公式

TF(Term Frequency ) 表示詞條 t 在文檔 D 中出現(xiàn)的頻率戳晌。TF的計算公式見式

TF = count(t) / D

式中,count(t)表示詞條t出現(xiàn)的次數(shù)笔横,D表示文檔D中所有詞條的個數(shù)竞滓。

2. IDF 的計算公式

IDF( Inverse Document Frequency)表示詞條t在整個語料庫中的區(qū)分能力

IDF = lg( N / 1(t,D) )

式中,N為所有文檔的總數(shù)吹缔, I(t, D) 表示文檔 D 是否包含詞條t, 若包含則為1虽界,不包含則為0。
但此處有一個問題:如果詞條t在所有文檔中都沒有出現(xiàn)涛菠,則式中的分母為0莉御,此時就需要對IDF做平滑處理。改善后的IDF計算公式見式俗冻。

IDF = lg( N / 1 + 1(t,D) )

3. TF-IDF = TF * IDF

最終詞條t 在文檔中的TF-IDF 值為:

TF-IDF = TF * IDF

從TF-IDF = TF * IDF值的計算過程中看出:一個詞條在文檔中出現(xiàn)的頻率越高礁叔,且新鮮度越低(即普遍度低),則其對應(yīng)的TF-IDF 值越高迄薄。

4. 舉例

比如琅关,現(xiàn)在有一個語料庫,包含了100篇(N)論文,其中涉及包含推薦系統(tǒng)t的有20篇涣易,在第一篇論文D中總共有200個技術(shù)詞匯画机,其中推薦系統(tǒng)出現(xiàn)了15次,則詞條推薦詞條在第一篇論文D中的TF-IDF值為:
TF-IDF 推薦系統(tǒng) = (15/200) * lg (100 / 20+ 1) = 0.05

詞頻-逆文檔頻率(Term Frequency - Inverse Document Frequency新症,TF-IDF)是一種用于資訊檢索和文本挖掘的常用加權(quán)技術(shù)步氏。

TF-IDF是一種統(tǒng)計方法,用于評估一個字詞對于一個文件集或一個語料庫中的一份文件的重要程度徒爹。字詞的重要性隨著他在文件中出現(xiàn)的次數(shù)成正比增加荚醒,但同時會隨著他在語料庫中出現(xiàn)頻率成反比下降。

TF-IDF = TF * IDF

TF-IDF算法示例

0. 引入依賴

import numpy as np
import pandas as pd

1. 定義數(shù)據(jù)和預(yù)處理


docA = "The cat sat on my bed"
docB = "The dog sat on my knees"

# 磁帶
bowA = docA.split(" ") 
bowB = docB.split(" ")
bowA

# 構(gòu)建詞庫
wordSet = set(bowA).union(set(bowB))
wordSet

{'The', 'bed', 'cat', 'dog', 'knees', 'my', 'on', 'sat'}

2. 進(jìn)行詞數(shù)統(tǒng)計

# 用統(tǒng)計字典來保存詞出現(xiàn)的次數(shù)
wordDictA = dict.fromkeys( wordSet, 0 )
wordDictB = dict.fromkeys( wordSet, 0 )

# 遍歷文檔隆嗅,統(tǒng)計詞數(shù)
for word in bowA:
    wordDictA[word] += 1
for word in bowB:
    wordDictB[word] += 1
    
pd.DataFrame([wordDictA, wordDictB])

wordDictA

{'knees': 0,
'cat': 1,
'The': 1,
'dog': 0,
'sat': 1,
'on': 1,
'bed': 1,
'my': 1}

3. 計算詞頻TF

def computeTF( wordDict, bow ):
    # 用一個字典對象記錄tf界阁,把所有的詞對應(yīng)在bow文檔里的tf都算出來
    tfDict = {}
    nbowCount = len(bow)
    
    for word, count in wordDict.items():
        tfDict[word] = count / nbowCount
    return tfDict

tfA = computeTF( wordDictA, bowA )
tfB = computeTF( wordDictB, bowB )
tfA

{'cat': 0.16666666666666666,
'on': 0.16666666666666666,
'sat': 0.16666666666666666,
'knees': 0.0,
'bed': 0.16666666666666666,
'The': 0.16666666666666666,
'my': 0.16666666666666666,
'dog': 0.0}

4. 計算逆文檔頻率idf

def computeIDF( wordDictList ):
#wordDictList:[{'knees': 0, 'cat': 1, 'The': 1, 'dog': 0, 'sat': 1, 'on': 1, 'bed': 1, 'my': 1}, {'knees': 1, 'cat': 0, 'The': 1, 'dog': 1, 'sat': 1, 'on': 1, 'bed': 0, 'my': 1}]

    # 用一個字典對象保存idf結(jié)果,每個詞作為key胖喳,初始值為0
    idfDict = dict.fromkeys(wordDictList[0], 0)
    #idfDict:{'knees': 0, 'cat': 0, 'The': 0, 'dog': 0, 'sat': 0, 'on': 0, 'bed': 0, 'my': 0}
    N = len(wordDictList)
    import math
    
    for wordDict in wordDictList:
        # 遍歷字典中的每個詞匯泡躯,統(tǒng)計Ni
        for word, count in wordDict.items():
            if count > 0:
                # 先把Ni增加1,存入到idfDict
                idfDict[word] += 1
                
    # 已經(jīng)得到所有詞匯i對應(yīng)的Ni丽焊,現(xiàn)在根據(jù)公式把它替換成為idf值
    for word, ni in idfDict.items():
        idfDict[word] = math.log10( (N+1)/(ni+1) )
    
    return idfDict

idfs = computeIDF( [wordDictA, wordDictB] )
idfs

{'cat': 0.17609125905568124,
'on': 0.0,
'sat': 0.0,
'knees': 0.17609125905568124,
'bed': 0.17609125905568124,
'The': 0.0,
'my': 0.0,
'dog': 0.17609125905568124}

5. 計算TF-IDF

def computeTFIDF( tf, idfs ):
    tfidf = {}
    for word, tfval in tf.items():
        tfidf[word] = tfval * idfs[word]
    return tfidf

tfidfA = computeTFIDF( tfA, idfs )
tfidfB = computeTFIDF( tfB, idfs )

pd.DataFrame( [tfidfA, tfidfB] )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末精续,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子粹懒,更是在濱河造成了極大的恐慌重付,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凫乖,死亡現(xiàn)場離奇詭異确垫,居然都是意外死亡,警方通過查閱死者的電腦和手機帽芽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門删掀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人导街,你說我怎么就攤上這事披泪。” “怎么了搬瑰?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵款票,是天一觀的道長。 經(jīng)常有香客問我泽论,道長艾少,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任翼悴,我火速辦了婚禮缚够,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己谍椅,他們只是感情好误堡,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雏吭,像睡著了一般锁施。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上思恐,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音膊毁,去河邊找鬼胀莹。 笑死,一個胖子當(dāng)著我的面吹牛婚温,可吹牛的內(nèi)容都是我干的描焰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼栅螟,長吁一口氣:“原來是場噩夢啊……” “哼荆秦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起力图,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤步绸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吃媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓤介,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年赘那,在試婚紗的時候發(fā)現(xiàn)自己被綠了刑桑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡募舟,死狀恐怖祠斧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拱礁,我是刑警寧澤琢锋,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站呢灶,受9級特大地震影響吩蔑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜填抬,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一烛芬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦赘娄、人聲如沸仆潮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽性置。三九已至,卻和暖如春揍堰,著一層夾襖步出監(jiān)牢的瞬間鹏浅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工屏歹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隐砸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓蝙眶,卻偏偏與公主長得像季希,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幽纷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • SEO算法之TF-IDF算法 1式塌、TF-IDF算法概念: TF-IDF(term frequency–invers...
    老朱seo閱讀 1,029評論 2 3
  • 前面我們總結(jié)過詞袋模型,詞袋模型將文本中所有不重復(fù)的詞看作一個集合友浸,然后對文本中的每句話進(jìn)行編碼峰尝。在句子中對于出現(xiàn)...
    taon閱讀 2,024評論 0 1
  • 1. TFIDF介紹 1.1 基本概念 TF(Term Frequency):代表詞頻,表示詞在某篇文章中出現(xiàn)的頻...
    本熊本閱讀 2,702評論 0 1
  • 一收恢、TF-IDF原理 1. 什么是TF-IDF TF-IDF(Term Frequency-Inverse Doc...
    MiracleJQ閱讀 2,032評論 0 2
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月境析,有人笑有人哭,有人歡樂有人憂愁派诬,有人驚喜有人失落劳淆,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53