关键词提取-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

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