目录
IDF(逆文档频率,Inverse Document Frequency)
jieba中文分词
jieba
是一个强大的中文分词工具,支持自定义词汇和多种分词模式。通过 jieba.add_word()
或 jieba.load_userdict()
可以灵活地处理新词汇。
举例:对"饺子导演的作品哪吒2要冲到全球动画票房榜首啦"这句话进行分词
import jieba
# 输入文本
str = '饺子导演的作品哪吒2要冲到全球动画票房榜首啦'
# 添加自定义词汇
jieba.add_word('全球动画票房')
jieba.add_word('哪吒2')
# 对文本进行分词
a = jieba.lcut(sentence=str)
# 输出分词结果
print(a)
运行结果 :
未导入分词库的效果
import jieba
str='饺子导演的作品哪吒2要冲到全球动画票房榜首啦'
a=jieba.lcut(sentence=str)
print(a)
运行结果:
TF-IDF
TF-IDF 是自然语言处理(NLP)和信息检索中常用的统计方法,用于衡量一个词在文档中的重要性,广泛应用于文本分析和信息检索任务中。以下是它们的详细介绍:
TF(词频,Term Frequency)
定义:词频是指一个词在文档中出现的频率。
计算公式:
作用:衡量一个词在文档中的重要性。词频越高,说明该词在文档中越重要。
局限性:一些常见词(如“的”、“是”)在所有文档中出现的频率都很高,但它们并不一定具有实际意义。
IDF(逆文档频率,Inverse Document Frequency)
定义:逆文档频率衡量一个词在整个语料库中的普遍性。如果一个词在很多文档中都出现,它的 IDF 值会较低;反之,如果它只在少数文档中出现,它的 IDF 值会较高。
计算公式
其中,D 是语料库,t 是词。
作用:降低常见词的重要性,提高罕见词的重要性。
局限性:如果一个词在语料库中从未出现过,IDF 值会变得非常大,因此通常会对分母加 1 进行平滑处理。
TF-IDF(词频-逆文档频率)
定义:TF-IDF 是 TF 和 IDF 的结合,用于衡量一个词在文档中的重要性。它既考虑了词在文档中的频率,也考虑了词在整个语料库中的普遍性。
计算公式:
作用
如果一个词在文档中出现的频率高(TF 值高),但在整个语料库中出现的频率低(IDF 值高),那么它的 TF-IDF 值会很高,说明这个词在文档中非常重要。
如果一个词在文档中出现的频率高,但在整个语料库中出现的频率也很高(如“的”、“是”),那么它的 TF-IDF 值会较低,说明这个词并不重要。
应用场景
文本分类
信息检索
关键词提取
文档相似度计算
总结
TF:衡量词在文档中的频率。
IDF:衡量词在整个语料库中的普遍性。
TF-IDF:结合 TF 和 IDF,衡量词在文档中的重要性。
案例:从文本数据中提取并分析关键词的重要性
具体来说,它通过计算 TF-IDF(词频-逆文档频率) 来评估每个词在文档中的重要性,并找出最相关的关键词。
从文本数据task.txt中提取并分析关键词的重要性,具体要求如下
读取文本数据
代码从
task.txt
文件中读取文本内容,并将其存储为corpus
(语料库)。目的:准备待分析的文本数据。
计算 TF-IDF
使用
TfidfVectorizer
将文本数据转换为 TF-IDF 矩阵并打印出来。目的:量化每个词在文档中的重要性。
提取特征词
通过
get_feature_names()
方法获取所有特征词(即词汇表中的单词)并打印出来。目的:获取所有被分析的词。
转换为 DataFrame
将 TF-IDF 矩阵转换为 DataFrame,行索引为特征词,列索引为文档,并打印出来。
目的:方便后续对 TF-IDF 值进行操作和分析。
提取特定文档的特征值
提取第 6 列(索引为 5)的特征值,并转换为列表。
目的:分析某一特定文档中每个词的重要性。
创建字典并排序
将特征词与对应的 TF-IDF 值存入字典,并按 TF-IDF 值进行降序排序。
目的:找出该文档中最重要的关键词。
测试输出
打印排序后的第 3 个元素(即第 3 个最重要的关键词及其 TF-IDF 值)。
目的:展示该文档中第 3 个最相关的关键词。
# 导入所需的库
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
# 打开文件并读取内容
inFile = open(r'.\task.txt') # 打开文件
corpus = inFile.readlines() # 读取文件中的所有行,存储在列表中
# 初始化TF-IDF向量化器
vectorizer = TfidfVectorizer()
# 对语料库进行TF-IDF向量化
tfidf = vectorizer.fit_transform(corpus) # 将文本数据转换为TF-IDF矩阵
print('*'*20+'打印TF-IDF矩阵'+'*'*20)
print(tfidf) # 打印TF-IDF矩阵
# 获取特征词列表
wordlist = vectorizer.get_feature_names() # 获取所有特征词(即词汇表中的单词)
print('*'*20+'打印特征词列表'+'*'*20)
print(wordlist) # 打印特征词列表
# 将TF-IDF矩阵转换为DataFrame
df = pd.DataFrame(tfidf.T.todense(), index=wordlist) # 将TF-IDF矩阵转置并转换为DataFrame,行索引为特征词
print('*'*20+'打印DataFrame'+'*'*20)
print(df) # 打印DataFrame
# 获取第6列(索引为5)的特征值列表
featurelist = df.iloc[:, 5].to_list() # 获取第6列的特征值,并转换为列表
# 创建一个字典,将特征词与对应的特征值关联起来
resdict = {}
for i in range(0, len(wordlist)):
resdict[wordlist[i]] = featurelist[i] # 将特征词与对应的特征值存入字典
# 对字典按特征值进行降序排序
resdict = sorted(resdict.items(), key=lambda x: x[1], reverse=True) # 按特征值从大到小排序
# 打印排序后的第3个元素(索引为2)
print('*'*20+'打印排序后的第3个元素'+'*'*20)
print(resdict[2]) # 打印排序后的第3个元素(即第3个最重要的特征词及其TF-IDF值)
运行结果: