Python學(xué)習(xí)筆記-3群18組-杜杜狼-2017.8.4

Lesson 11 關(guān)鍵詞提取實(shí)現(xiàn)

TF-IDF原理

決定當(dāng)兩個分詞的詞頻一樣,哪個更適合做關(guān)鍵詞
在詞頻的基礎(chǔ)上猛铅,對每個詞分配一個權(quán)重,較少見的詞分配較大的權(quán)重

詞頻(Term Frequency) 指的是某一個給定的詞在該文檔中出現(xiàn)的次數(shù)
逆文檔頻率(Inverse Document Frequency)IDF就是每個詞的權(quán)重麸折,它的大小與一個詞的常見程度成反比
TF-IDF(Term Frequency-Inverse Document Frequency)權(quán)衡某個分詞是否是關(guān)鍵詞的指標(biāo)忧勿,該值越大,是關(guān)鍵詞的可能性就越大

TF計算公式
TF = 該詞在文檔中出現(xiàn)的次數(shù)
IDF計算公式
IDF = log(文檔總數(shù)/(包含該詞的文檔數(shù) +1))

文檔向量化
假設(shè)有m篇文檔d1, d2, d3, ... dm對它們進(jìn)行分詞贰剥,得到n個分詞w1, w2, w3...wn倾剿,那么f(i,j)代表第i篇文章中,分詞j出現(xiàn)的次數(shù)蚌成,可以用矩陣表示前痘。
那么第i篇文章,可以使用第i行數(shù)據(jù)進(jìn)行表示担忧。

TF-IDF實(shí)現(xiàn)

Step 1: 按照中文分詞和文件的關(guān)系創(chuàng)建DataFrame

import re
#匹配中文的分詞
zhPattern = re.compile(u'[\u4e00-\u9fa5]+')

import jieba

segments = []
filePaths = []
for index, row in corpos.iterrows():
    filePath = row['filePath']
    fileContent = row['fileContent']
    segs = jieba.cut(fileContent)
    for seg in segs:
        #只有中文分詞才會添加到該文件分詞列表中
        if zhPattern.search(seg):
            segments.append(seg)
            filePaths.append(filePath)

segmentDF = pandas.DataFrame({
    'filePath':filePaths, 
    'segment':segments
})

Step 2: 移除停用詞(該步驟和之前的語料庫準(zhǔn)備步驟一致)

stopwords = pandas.read_csv(
    "StopwordsCN.txt", 
    encoding='utf8', 
    index_col=False,
    quoting=3,
    sep="\t"
)

segmentDF = segmentDF[
    ~segmentDF.segment.isin(
        stopwords.stopword
    )
]

Step 3: 按文章進(jìn)行詞頻統(tǒng)計, sample中用的order()函數(shù)已經(jīng)過期芹缔,需替換成sort_values()

segStat = segmentDF.groupby(
    by=["filePath", "segment"]
)["segment"].agg({
    "計數(shù)":numpy.size
}).reset_index().sort_values(
   "計數(shù)",
    ascending=False
);

Step 4: 把小部分的數(shù)據(jù)刪除掉

segStat = segStat[segStat.計數(shù)>1]

Step 5: 進(jìn)行文本向量計算

#將DataFrame轉(zhuǎn)成pivot table,進(jìn)行文件與分詞的交叉分析
TF = segStat.pivot_table(
    index='filePath', 
    columns='segment', 
    values='計數(shù)',
    fill_value=0
)

#套用公式瓶盛,計算IDF值
def hanlder(x): 
    return (numpy.log2(len(corpos)/(numpy.sum(x>0)+1)))

IDF = TF.apply(hanlder)

#將TF*IDF得到TF_IDF值
TF_IDF = pandas.DataFrame(TF*IDF)

tag1s = []
tag2s = []
tag3s = []
tag4s = []
tag5s = []

#計算Top 5 分詞最欠,此處可以和前一課進(jìn)行比較:tags = jieba.analyse.extract_tags(content, topK=5)
for filePath in TF_IDF.index:
    tagis = TF_IDF.loc[filePath].sort_values(
        ascending=False
    )[:5].index
    tag1s.append(tagis[0])
    tag2s.append(tagis[1])
    tag3s.append(tagis[2])
    tag4s.append(tagis[3])
    tag5s.append(tagis[4])

tagDF = pandas.DataFrame({
    'filePath':corpos.filePath, 
    'fileContent':corpos.fileContent, 
    'tag1':tag1s, 
    'tag2':tag2s, 
    'tag3':tag3s, 
    'tag4':tag4s, 
    'tag5':tag5s
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惩猫,隨后出現(xiàn)的幾起案子芝硬,更是在濱河造成了極大的恐慌,老刑警劉巖轧房,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吵取,死亡現(xiàn)場離奇詭異,居然都是意外死亡锯厢,警方通過查閱死者的電腦和手機(jī)皮官,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來实辑,“玉大人捺氢,你說我怎么就攤上這事〖羟耍” “怎么了摄乒?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長残黑。 經(jīng)常有香客問我馍佑,道長,這世上最難降的妖魔是什么梨水? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任拭荤,我火速辦了婚禮,結(jié)果婚禮上疫诽,老公的妹妹穿的比我還像新娘舅世。我一直安慰自己旦委,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布雏亚。 她就那樣靜靜地躺著缨硝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罢低。 梳的紋絲不亂的頭發(fā)上查辩,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音网持,去河邊找鬼宜岛。 笑死,一個胖子當(dāng)著我的面吹牛翎碑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播之斯,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼日杈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佑刷?” 一聲冷哼從身側(cè)響起莉擒,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘫絮,沒想到半個月后涨冀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麦萤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年鹿鳖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壮莹。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡翅帜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出命满,到底是詐尸還是另有隱情涝滴,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布胶台,位于F島的核電站歼疮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诈唬。R本人自食惡果不足惜韩脏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铸磅。 院中可真熱鬧骤素,春花似錦匙睹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至送浊,卻和暖如春梦谜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袭景。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工唁桩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耸棒。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓荒澡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親与殃。 傳聞我的和親對象是個殘疾皇子单山,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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

  • 注:參考文檔 一、在線詞云圖工具# (1)幅疼、使用### 在正式使用jieba分詞之前米奸,首先嘗試用在線分詞工具來將自...
    DearIreneLi閱讀 6,042評論 1 8
  • 這個系列的第六個主題,主要談一些搜索引擎相關(guān)的常見技術(shù)爽篷。 1995年是搜索引擎商業(yè)公司發(fā)展的重要起點(diǎn)悴晰,《淺談推薦系...
    我偏笑_NSNirvana閱讀 6,619評論 3 24
  • 本文利用 scikit-learn 里的樸素貝葉斯算法對文檔進(jìn)行分類,以便更深入地理解貝葉斯算法逐工。本文的側(cè)重點(diǎn)不是...
    kamidox閱讀 4,636評論 0 11
  • TF-IDF簡介 TF(Term Frequency)是指詞頻铡溪,就是一個詞在文本中出現(xiàn)的詞數(shù),常用標(biāo)準(zhǔn)化處理 ID...
    sf705閱讀 5,211評論 2 4
  • 想聽那岸拒絕浪花的聲音 一波波襲來泪喊,一次次退去 拍打佃却,純粹,匆忙窘俺,利落 想看那夜拒絕影子的表情 已然沒有牽扯月光 ...
    君涼閱讀 247評論 26 43