TF/IDF 算法

第一关

# 停用词表加载方法

def get_stopword_list():

    # 停用词表存储路径,每一行为一个词,按行读取进行加载

    # 进行编码转换确保匹配准确率

    stop_word_path = './stopword.txt'

    stopword_list = [sw.replace('\n', '') for sw in open(stop_word_path,encoding='utf-8').readlines()]

    return stopword_list

if __name__ == '__main__':

    text=input()

    result=""

    # 任务:使用停用词表去掉text文本中的停用词,并将结果保存至result变量

    # ********** Begin *********#

    stopword_list=get_stopword_list()

    for s in text:

        if s not in stopword_list:

            result+=s

        

    

    # ********** End **********#

    print(result,end="")

第2关

#本程序的作用是通过TF/IDF算法完成对文本的关键词提取,输出前十个关键词。

import math

import jieba

import jieba.posseg as psg

from gensim import corpora, models

from jieba import analyse

import functools

class TfIdf(object):

    # 四个参数分别是:训练好的idf字典,默认idf值,处理后的待提取文本,关键词数量

    def __init__(self, idf_dic, default_idf, word_list, keyword_num):

        self.word_list = word_list

        self.idf_dic, self.default_idf = idf_dic, default_idf

        self.tf_dic = self.get_tf_dic()

        self.keyword_num = keyword_num

        

    def get_tf_dic(self):

        tf_dic = {}

    # 任务:完成word_list的tf值的统计函数,将结果存储到tf_dic变量中

    # ********** Begin *******

        for word in self.word_list:

            tf_dic[word] = tf_dic.get(word, 0.0) + 1.0

        tt_count = len(self.word_list)

        for k, v in tf_dic.items():

            tf_dic[k] = float(v) / tt_count     

        

            

    # ********** End **********#

        return tf_dic

    # 按公式计算tf-idf

    def get_tfidf(self):

        tfidf_dic = {}

        for word in self.word_list:

            idf = self.idf_dic.get(word, self.default_idf)

            tf = self.tf_dic.get(word, 0)

            tfidf = tf * idf

            tfidf_dic[word] = tfidf

        tfidf_dic.items()

        # 根据tf-idf排序,去排名前keyword_num的词作为关键词

        for k, v in sorted(tfidf_dic.items(), key=functools.cmp_to_key(cmp), reverse=True)[:self.keyword_num]:

            print(k + "/ ", end='')

        print()

        

        

#排序函数,用于topK关键词的按值排序

def cmp(e1, e2):

    import numpy as np

    res = np.sign(e1[1] - e2[1])

    if res != 0:

        return res

    else:

        a = e1[0] + e2[0]

        b = e2[0] + e1[0]

        if a > b:

            return 1

        elif a == b:

            return 0

        else:

            return -1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值