關鍵詞提取-TFIDF 自定義逆文檔IDF的值

TF-IDF

用於提取關鍵詞,那麼如何從多個文檔中提取出關鍵詞。文章的關鍵詞可能有什麼規律,表示文章主要意思,那這個詞應該在該文章中出現多次,但是在其他文章中出現次數不多。

TF 詞頻 (Term Frequency)表示w在文檔Di中出現的頻率
TF=count(w)Di TF = \frac {count(w)}{Di}
IDF 逆文檔頻率(Inverse Document Frequency)

N是總的文檔數量,I表示文檔Di是否保存,如果w在所有的文檔中都沒有出現那就爲0
IDF=log(N1+i=1NI(w,Di)) IDF=log(\frac {N}{1+ \sum_{i=1}^N {I(w, Di)}})
那麼TF-IDF爲:
TFIDF=TFIDF TF-IDF = TF*IDF
按照上式 TF-IDF值高就使得TF(頻率高)和IDF高(在其它文檔出現的次數少),說明該關鍵詞文檔頻率高且少出現在其它文檔。

示例:直接調用extract_tags是統計詞頻 jieba默認有一份計算的IDF文件DEFAULT_IDF = _get_module_path(“idf.txt”)

如果自定義IDF(見底部jieba.analyse.set_idf_path(file)

import jieba.analyse

test = "日前韓媒指出中國最大的面板企業京東方有望在2021年爲蘋果供應4500萬片OLED面板," \
            "將奪得iPhone大約兩成的面板供應份額,成爲僅次於三星的第二大OLED面板供應商," \
            "此舉對於韓國在OLED面板行業的領導地位造成了挑戰。"
tags = jieba.analyse.extract_tags(test, topK=20, withWeight=True)
for i in tags:
    print(i[0],i[1])
面板 1.16574583418375
OLED 0.8966075627174999
供應 0.31444176262
韓媒 0.2988691875725
2021 0.2988691875725
4500 0.2988691875725
iPhone 0.2988691875725
萬片 0.289952313975
京東方 0.24433858167325
兩成 0.21839729195125002
三星 0.20568385962
奪得 0.19779290587725
供應商 0.19473025781175
蘋果 0.188355180106
此舉 0.18746901138125
僅次於 0.177208313945
份額 0.17362712608949998
韓國 0.1735795070275
挑戰 0.16482012178025002
日前 0.15228855634650001

計算自定義idf文件。
test.txt文件如下:

日前韓媒指出中國最大的面板企業京東方有望在2021年爲蘋果供應4500萬片OLED面板
將奪得iPhone大約兩成的面板供應份額,成爲僅次於三星的第二大OLED面板供應商
此舉對於韓國在OLED面板行業的領導地位造成了挑戰。
主要邏輯就是統計詞出現的文檔數。

import math
import jieba

data_content = open("test.txt", 'r', encoding='utf8').readlines()

idf_dic = {}
doc_count = len(data_content)

for i in range(len(data_content)):
    #分詞統計詞頻
    new_content = jieba.lcut(data_content[i])
    for word in set(new_content):
        if len(word) > 1:
            idf_dic[word] = idf_dic.get(word, 0.0) + 1.0

for k, v in idf_dic.items():
    w = k
    p = '%.10f' % (math.log(doc_count / (1.0 + v)))
    if w > u'\u4e00' and w <= u'\u9fa5':
        idf_dic[w] = p

with open('idf.txt', 'w', encoding='utf8') as f:
    for k in idf_dic:
        if k != '\n':
            f.write(k + ' ' + str(idf_dic[k]) + '\n')

生成的tdf.txt文件如下:

韓媒 0.4054651081
蘋果 0.4054651081
指出 0.4054651081
有望 0.4054651081
企業 0.4054651081
供應 0.0000000000
萬片 0.4054651081
面板 -0.2876820725
京東方 0.4054651081
日前 0.4054651081
中國 0.4054651081
2021 1.0
4500 1.0
OLED 3.0
最大 0.4054651081
奪得 0.4054651081
份額 0.4054651081
供應商 0.4054651081
第二 0.4054651081
iPhone 1.0
成爲 0.4054651081
兩成 0.4054651081
大約 0.4054651081
僅次於 0.4054651081
三星 0.4054651081
領導 0.4054651081
地位 0.4054651081
挑戰 0.4054651081
韓國 0.4054651081
此舉 0.4054651081
造成 0.4054651081
對於 0.4054651081
行業 0.4054651081

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章