最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TF-IDF的算法原理以及Python實(shí)現(xiàn)過(guò)程

 更新時(shí)間:2024年06月13日 15:35:58   作者:辰陽(yáng)星宇  
這篇文章主要介紹了TF-IDF的算法原理以及Python實(shí)現(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

算法原理

TF-IDF(Term Frequency-Inverse Document Frequency)是詞頻-逆文檔頻率,主要實(shí)現(xiàn)在一個(gè)文章集中找到每篇文章的關(guān)鍵字(也就是文章中哪些詞匯是最重要的)。

主要從兩個(gè)方面考慮,一篇文章中各個(gè)詞語(yǔ)的出現(xiàn)頻率。另一個(gè)是該詞語(yǔ)在幾篇文章中出現(xiàn)。

1、TF(Term Frequency) 詞頻

首先,解釋第一個(gè)方面,一篇文章中各個(gè)詞語(yǔ)出現(xiàn)的頻率。

從直觀上來(lái)說(shuō),如果一篇文章中某些詞語(yǔ)出現(xiàn)頻率很高(除了“的、是、你”等助詞等),那么從這一角度來(lái)說(shuō),可以認(rèn)為該詞是這篇文章的關(guān)鍵詞

使用數(shù)學(xué)公式表達(dá)就是

在某篇文章中該詞出現(xiàn)較多,則TF值較大。該詞在文章中出現(xiàn)較少,則TF值較小。注意要停用一些“的”、“是”、“你”、“我”…助詞、人稱代詞等等。

2、IDF(Inverse Document Frequency)逆文件頻率

然后,解釋第二個(gè)方面,該詞在哪幾篇文章中出現(xiàn)過(guò)。在一個(gè)文章集中,我們的目標(biāo)是找到每篇文章的特有的關(guān)鍵詞,可以反映出該文章獨(dú)有特點(diǎn),即找到差異化且可有代表性的詞。那么這個(gè)詞通常情況下,并不會(huì)在其余文章中經(jīng)常出現(xiàn),否則對(duì)區(qū)分文章關(guān)鍵信息的作用就會(huì)較小。因此,我們這一方面就是找到本篇文章中的詞語(yǔ),很少出現(xiàn)在其余文章中。

使用數(shù)學(xué)公式表達(dá)就是

采用逆文檔頻率,該詞在文檔中沒(méi)有怎么出現(xiàn),則IDF值會(huì)較大。如果該詞在其余文檔出現(xiàn)較多,則IDF值會(huì)較小。

最后相乘就會(huì)得到,一篇文章中每個(gè)詞的TF-IDF的值,值越大,則可認(rèn)為重要程度越高,可作為文章的關(guān)鍵詞。

Python實(shí)現(xiàn)

在這里主要使用jieba來(lái)實(shí)現(xiàn)中文分詞,Counter來(lái)進(jìn)行計(jì)數(shù)統(tǒng)計(jì)

# -*- coding: utf-8 -*-

import math
import jieba
from collections import Counter
from collections import defaultdict


def TFIDF(dataset):
    # 統(tǒng)計(jì)每個(gè)文章中每個(gè)詞語(yǔ)的tf
    j = 0
    doc_len = len(dataset)
    cntr = [0] * doc_len          # Counter每個(gè)文章
    total = [0] * doc_len          # 獲取每個(gè)文章中各自的詞語(yǔ)總數(shù)
    word_tf = [0] * doc_len          # 獲取每個(gè)文章中每個(gè)詞語(yǔ)的tf
    for sent in dataset:
        iters = jieba.cut(sent)
        cntr[j] = Counter(iters)    
        total[j] = sum(cntr[j].values())    
        word_tf[j] = defaultdict(int)
        for i in cntr[j].keys():        
            word_tf[j][i] = cntr[j][i] / total[j]
        j += 1
    
    
    # 構(gòu)建詞匯表和總詞頻
    word_cnt = defaultdict(int)
    for word_list in word_tf:
        for word in word_list:
            word_cnt[word] += 1
    
    # 統(tǒng)計(jì)詞匯在文檔中的頻率
    doc_tf = defaultdict(int)
    for word in word_cnt:
        for article in dataset:
            if word in article:
                doc_tf[word] += 1
    
    # 構(gòu)建詞匯的idf
    word_idf = {}
    for word in doc_tf:
        word_idf[word] = math.log(doc_len / (doc_tf[word] + 1))
        
    # 構(gòu)建每篇文章中詞的tf-idf     
    t = 0    
    word_tf_idf = [0] * doc_len        
    for article in word_tf:
        word_tf_idf[t] = defaultdict(int)
        for word in article:
            word_tf_idf[t][word] = article[word] * word_idf[word]            
        t += 1
    
    # 對(duì)每篇文章每個(gè)詞的tf-idf進(jìn)行由大到小排序
    t = 0
    for i in word_tf_idf:
        for j in i:  
            word_tf[t] = dict(sorted(word_tf[t].items(), key=lambda x:x[1], reverse=True))
            word_tf_idf[t] = dict(sorted(word_tf_idf[t].items(), key=lambda x:x[1], reverse=True))        
        t += 1
            
    return word_tf_idf, word_tf
    
    

if __name__ == '__main__':

    dataset = ["中國(guó)的北京是中國(guó)的首都","那里有一句話叫做“北京歡迎您”,北京啊北京",
               "北京歡迎您!相信夢(mèng)想,夢(mèng),相信有夢(mèng)就會(huì)有奇跡"]    
    word_tf_idf,word_tf = TFIDF(dataset)
    
    print("=============tf-idf=============")
    for i in word_tf_idf:
        print(i)
    print("=============tf=============")
    for i in word_tf:
        print(i)
        

注:代碼主要目的是實(shí)現(xiàn)TF-IDF,對(duì)標(biāo)點(diǎn)符號(hào)等沒(méi)有進(jìn)行停用處理。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Tensorflow?2.4加載處理圖片的三種方式詳解

    Tensorflow?2.4加載處理圖片的三種方式詳解

    這篇文章主要為大家介紹了Tensorflow?2.4加載處理圖片的三種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Pygame實(shí)現(xiàn)小球躲避實(shí)例代碼

    Pygame實(shí)現(xiàn)小球躲避實(shí)例代碼

    大家好,本篇文章主要講的是Pygame實(shí)現(xiàn)小球躲避實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python 啟動(dòng)時(shí)選擇32位 或64位版的操作

    Python 啟動(dòng)時(shí)選擇32位 或64位版的操作

    這篇文章主要介紹了Python 啟動(dòng)時(shí)選擇32位 或64位版的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python入門(mén)之Tkinter使用的方法詳解

    python入門(mén)之Tkinter使用的方法詳解

    作為Python開(kāi)發(fā)者,圖形用戶界面(GUI)開(kāi)發(fā)是必備技能之一,本文將介紹Python自帶的GUI工具包TKinter,這篇文章主要給大家介紹了關(guān)于python入門(mén)之Tkinter使用的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Python3實(shí)現(xiàn)的簡(jiǎn)單工資管理系統(tǒng)示例

    Python3實(shí)現(xiàn)的簡(jiǎn)單工資管理系統(tǒng)示例

    這篇文章主要介紹了Python3實(shí)現(xiàn)的簡(jiǎn)單工資管理系統(tǒng),涉及Python文件讀寫(xiě)、數(shù)據(jù)遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 如何在pycharm中快捷安裝pip命令(如pygame)

    如何在pycharm中快捷安裝pip命令(如pygame)

    這篇文章主要介紹了如何在pycharm中快捷安裝pip命令(如pygame),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-05-05
  • Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    本文主要介紹了Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 用Python調(diào)用win命令行提高工作效率的實(shí)例

    用Python調(diào)用win命令行提高工作效率的實(shí)例

    今天小編就為大家分享一篇用Python調(diào)用win命令行提高工作效率的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python 實(shí)現(xiàn)屏幕錄制示例

    python 實(shí)現(xiàn)屏幕錄制示例

    今天小編就為大家分享一篇python 實(shí)現(xiàn)屏幕錄制示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python實(shí)現(xiàn)多線程網(wǎng)頁(yè)下載器

    python實(shí)現(xiàn)多線程網(wǎng)頁(yè)下載器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)一個(gè)多線程網(wǎng)頁(yè)下載器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評(píng)論

襄汾县| 平顶山市| 仪陇县| 芒康县| 三门县| 宣恩县| 博野县| 仙游县| 大同县| 富裕县| 桓台县| 青阳县| 保德县| 嘉黎县| 元阳县| 寿宁县| 新竹县| 临清市| 江川县| 临沂市| 怀仁县| 德安县| 来凤县| 西乌珠穆沁旗| 永州市| 云南省| 塔城市| 隆回县| 桂东县| 琼海市| 依安县| 桃园市| 宣汉县| 温泉县| 宿松县| 石嘴山市| 开封县| 大冶市| 平山县| 麻阳| 静安区|