文本分析系列——词语权重算法:TF-IDF算法

简介

     TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

  • 词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的频率;
  • 反文档频率(inverse document frequency,IDF),即某一个给定词语在文档集合中出现的次数与文档总数的商;

理论

如果某个词或短语在一篇文章中出现的频率高,并且在文档集合中出现频率低,则认为此词或者短语具有很好的类别区分能力。

 

适用场合

文本分类、基于向量空间模型的文本分类方法

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个用Python实现的TF-IWF算法,满足输入输出明确、输入为jieba分词后的txt文档、输出词汇名称及权重、注释清晰的要求。 我们需要使用jieba分词库进行分词,需要先安装jieba库。 ```python !pip install jieba ``` 下面是实现代码: ```python import numpy as np import jieba from sklearn.feature_extraction.text import CountVectorizer class TFIWF: def __init__(self): self.vectorizer = CountVectorizer() self.vocab = None self.idf = None def fit_transform(self, documents): """ 对文档进行特征提取,计算TF-IWF值 :param documents: list,文档列表,已经用jieba进行分词 :return: tf_iwf: numpy.ndarray,TF-IWF特征矩阵 """ # 将文档转化为稀疏矩阵 count_matrix = self.vectorizer.fit_transform(documents) # 获取词表 self.vocab = self.vectorizer.get_feature_names() # 计算文档频率 df = np.array(np.sum(count_matrix > 0, axis=0))[0] # 计算逆文档频率 self.idf = np.log((len(documents) + 1) / (df + 1)) + 1 # 计算TF tf = np.array(count_matrix.todense()) tf = tf / np.sum(tf, axis=1, keepdims=True) # 计算TF-IWF tf_iwf = tf * self.idf return tf_iwf def get_feature_names(self): """ 获取特征名称列表 :return: list,特征名称列表 """ return self.vocab def get_feature_weights(self): """ 获取特征权重列表 :return: list,特征权重列表 """ return list(self.idf) ``` 使用示例: ```python # 创建TF-IWF对象 tf_iwf = TFIWF() # 读取文档 with open('test.txt', 'r', encoding='utf-8') as f: documents = f.readlines() # 对文档进行jieba分词 documents = [list(jieba.cut(doc.strip())) for doc in documents] # 特征提取并计算TF-IWF值 tf_iwf_matrix = tf_iwf.fit_transform(documents) # 获取特征名称列表和特征权重列表 feature_names = tf_iwf.get_feature_names() feature_weights = tf_iwf.get_feature_weights() # 输出特征名称及权重 for i, name in enumerate(feature_names): print(name, feature_weights[i]) ``` 其中,test.txt是需要特征提取的文档文件,需要在当前目录下存在。输出的特征名称及权重即为TF-IWF算法的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值