TF-IDF关键词抽取Python实现

原理

TF(Term Frequency):词频

T F = 该 词 频 数 文 档 词 语 总 数 TF = \frac{该词频数}{文档词语总数} TF=

IDF(Inverse Document Frequency):逆文本频率指数

I D F = log ⁡ ( 文 档 总 数 出 现 该 词 文 档 数 + 1 ) IDF = \log(\frac{文档总数}{出现该词文档数+1}) IDF=log(+1)

调用jieba(免训练)

from jieba.analyse import tfidf
sentence = '佛山市科技局发布关于发展佛山市人工智能项目的通知'
print(tfidf(sentence))
print(tfidf(sentence, allowPOS=('n', 'ns', 'v', 'vn')))  # 按词性筛选
print(tfidf(sentence, allowPOS=('n', 'ns', 'v', 'vn'), withFlag=True))  # 返回词性
print(tfidf(sentence, withWeight=True))  # 返回权重

打印结果

['佛山市', '科技局', '人工智能'</
<think>我们注意到用户的问题中有一个混淆点:用户要求“使用TF-IDF关键词抽取算法和TextRank4zh分别实现TextRank算法”。但是,TextRank4zh是专门用于实现TextRank算法的工具,而TF-IDF是另一种不同的算法。因此,用户可能想分别使用TF-IDF和TextRank4zh来实现关键词抽取,而不是用TF-IDF实现TextRank算法。 根据引用内容: - 引用[1]和[2]介绍了TF-IDF和TextRank两种不同的关键词提取技术。 - 引用[5]提到TextRank4zh是TextRank算法的一个实现,专门用于中文文本。 因此,我们分解用户需求: 1. 使用TF-IDF算法实现关键词抽取。 2. 使用TextRank4zh(一个Python库)实现TextRank算法进行关键词抽取。 我们将分别给出两种方法的实现示例。 注意:由于用户要求的是实现关键词抽取,所以我们将分别展示两种方法的关键词抽取代码。 步骤: 1. 准备环境:安装必要的库(如jieba,sklearn,textrank4zh等) 2. 数据预处理:中文文本需要分。 3. 分别实现TF-IDF和TextRank4zh的关键词抽取。 根据引用[4],中文关键词提取需要先进行分,因此我们会使用jieba进行分。 代码实现- TF-IDF:我们可以使用scikit-learn库的TfidfVectorizer。 - TextRank4zh:我们可以使用textrank4zh库中的TextRank4Keyword。 但是,请注意引用[2]中提到,测试语料较少时,Word2Vec向量聚类效果不佳,而TF-IDF和TextRank效果较好。因此,我们使用这两种方法。 由于引用[3]提到TF-IDF可以用于关键词提取,引用[5]提到TextRank4zh的实现,我们按照这些引用实现。 下面分别给出两种方法的代码示例: </think>基于提供的引用资料,我将分别解释TF-IDF关键词抽取算法和TextRank4zh库实现TextRank算法的原理及实现方法: ### 一、TF-IDF关键词抽取算法 **原理**(引用[1][2][4]): 1. **频(TF)**:计算语在当前文档出现的频率 $TF = \frac{\text{在文档中出现次数}}{\text{文档总数}}$ 2. **逆文档频率(IDF)**:衡量语在语料库中的普遍性 $IDF = \log\left(\frac{\text{语料库文档总数}}{\text{包含该的文档数} + 1}\right)$ 3. **TF-IDF值**:综合权重指标 $TF\text{-}IDF = TF \times IDF$ **Python实现**(引用[4]): ```python from sklearn.feature_extraction.text import TfidfVectorizer import jieba # 预处理:中文分 def chinese_tokenizer(text): return list(jieba.cut(text)) # 示例文档 corpus = [ "自然语言处理是人工智能的重要领域", "TF-IDF和TextRank是常用的关键词提取技术" ] # 创建TF-IDF模型 vectorizer = TfidfVectorizer(tokenizer=chinese_tokenizer) tfidf_matrix = vectorizer.fit_transform(corpus) # 获取关键词权重 feature_names = vectorizer.get_feature_names_out() for doc_idx, doc in enumerate(corpus): print(f"文档{doc_idx+1}关键词:") sorted_indices = tfidf_matrix[doc_idx].toarray().argsort()[0][::-1] for idx in sorted_indices[:3]: # 取权重最高的3个 print(f"{feature_names[idx]}: {tfidf_matrix[doc_idx, idx]:.4f}") ``` --- ### 二、TextRank4zh实现TextRank算法 **原理**(引用[1][2][5]): 1. **图模型构建**:将语作为图中的节点 2. **边权计算**:基于语共现关系建立边,权重由共现频次决定 3. **迭代排序**:使用类似PageRank的迭代公式更新节点权重 $WS(V_i) = (1 - d) + d \times \sum_{V_j \in In(V_i)} \frac{w_{ji}}{\sum_{V_k \in Out(V_j)} w_{jk}} WS(V_j)$ - $d$为阻尼系数(通常0.85) - $w_{ji}$表示节点$V_j$到$V_i$的边权重 **Python实现**(需先安装`textrank4zh`): ```python from textrank4zh import TextRank4Keyword text = "自然语言处理中,关键词抽取是文本分析的核心任务之一" # 初始化TextRank tr4w = TextRank4Keyword() # 执行关键词提取 tr4w.analyze(text, lower=True, window=2) # window控制共现窗口大小 # 输出TOP3关键词 print("TextRank关键词:") for item in tr4w.get_keywords(3, word_min_len=2): print(f"{item.word}: {item.weight:.4f}") ``` --- ### 关键区别对比 | 特性 | TF-IDF | TextRank4zh | |--------------|-----------------------------------------|--------------------------------------| | **计算基础** | 频统计 | 图结构迭代 | | **数据依赖** | 需要语料库统计IDF | 单文档即可工作 | | **短语提取** | 仅支持单 | 支持多短语抽取[^1] | | **适用场景** | 结构化文档/大规模语料[^1] | 无监督单文档处理[^2] | | **计算效率** | 高效(矩阵运算) | 较慢(迭代收敛) | > 实际应用中常将两者结合:用TextRank提取多短语,用TF-IDF过滤高频普通[^1],这种混合方法在学术研究中被证明能提升抽取准确率[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值