如何生成自定义的逆向文件频率(IDF)文本语料库(一)

在基于TF-IDF进行特征提取时,因为文本背景是某一具体行业,不适合使用通用的IDF语料库,我觉得应该使用自定义的基于该行业背景的IDF语料库。请问如何生成自定义IDF语料库呢?

我现在有的数据是几十万个该行业的文档,初步想法是:对每个文档分词去重,把所有文档分词结果汇集去重后形成一个分词集,然后对于分词集里的每一个词语w,按idf=log(该行业文档总数/(含有w的文档数量+1))**公式求出词语w的IDF值f,最后txt文件里每一行放一个(w, f)。

一、逆向文件频率

逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。

line 是单个文档

all_dict = {}
for line in lines:
    temp_dict = {}
    total += 1
    cut_line = jieba.cut(line, cut_all=False)
    for word in cut_line:
        temp_dict[word] = 1
    for key in temp_dict:
        num = all_dict.get(key, 0)
        all_dict[key] = num + 1
for key in all_dict:
    w = key.encode('utf-8')
    p = '%.10f' % (math.log10(total/(all_dict[key] + 1)))
用法:jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径

自定义的IDF文本语料库会覆盖jieba自带的语料库,因为加载IDF语料库时候只能是自定义路径OR默认。

class TFIDF(KeywordExtractor):

    def __init__(self, idf_path=None):
        self.tokenizer = jieba.dt
        self.postokenizer = jieba.posseg.dt
        self.stop_words = self.STOP_WORDS.copy()
        self.idf_loader = IDFLoader(idf_path or DEFAULT_IDF)
        self.idf_freq, self.median_idf = self.idf_loader.get_idf()

...

    self.idf_loader = IDFLoader(idf_path or DEFAULT_IDF)

猜你喜欢

转载自blog.csdn.net/qq_34333481/article/details/84105246