亦菲喊你来学机器学习(19) --TF-IDF中文处理

文章目录

TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种用于信息检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

上一篇我们提到了,对于中文文章来说,我们没有办法直接计算TF-IDF值,因为我们没有计算的对象,每个单词都在句子中连接在一起了,不同于英语每个单词都被空格分开了,所以我们也需要将中文中的句子都分开成一个个单词。

于是我们来介绍jieba库方法,来实现中文分词!

jieba库中文分词

jieba是中文文本处理中的一个非常流行的库,用于中文分词。中文分词是中文自然语言处理中的一个基础步骤,因为中文文本不像英文那样有明显的空格来分隔单词。jieba支持三种分词模式:精确模式、全模式和搜索引擎模式,同时它还支持添加自定义词典,以优化分词结果。

本篇简单介绍其两个作用:

  1. 分词
  2. 自定义添加词典

介绍之前,因为jieba库是第三方库,所以要安装哦:

python 复制代码
pip install jieba

分词

jieba库中本身就有词海,包含了大部分的常用词,分词方法lcut():

python 复制代码
import jieba    #jieba库用于中文分词
str1 = '我们在学习Python办公自动化'
x1 = jieba.lcut(sentence = str1)	#lcut()分词
print(x1)
---------------------
['我们', '在', '学习', 'Python', '办公自动化']

自定义添加词典

但是在这个字符串中,我们想让'Python办公自动化'作为一个单词输出,于是我们需要自己手动的将'Python办公自动化'添加进jieba词海中,让其将它识别成一个单词,添加方法add_word():

python 复制代码
str1 = '我们在学习Python办公自动化'
jieba.add_word('Python办公自动化') #在jieba词海之中,添加新的单词,在jieba分词时,将其识别成一个词
x2 = jieba.lcut(sentence = str1) # lcut()分词
print(x2)
--------------
['我们', '在', '学习', 'Python办公自动化']

一个一个单词添加太过麻烦,我们还可以读取一个文本中的单词,将其中单词添加进词海,添加方法load_userdict():

python 复制代码
jieba.load_userdict(r'红楼梦词库.txt')   #加载用户自定义的词典文件,将文件中的词添加进词库
str = '傲世也因同气味把万事全抛白雪红梅园林集景'
a = jieba.lcut(sentence = str)
print(a)
--------------------
['傲世也因同气味', '把万事全抛', '白雪红梅园林集景']

这样,我们就了解了jieba库的基本用法。

TF-IDF应用中文文章

1. 收集数据

链接:https://pan.baidu.com/s/1vdM88FORqAvixific6GfHA?pwd=9unj

提取码:9unj

2. 数据预处理

jieba分词,将中文文本中的词语都按要求分开来,去除掉语气助词、符号等没必要的字符,即去停用词:

python 复制代码
# 将每篇文本都进行中文分词(去停用词,找到符合条件的词)
import jieba
# 加载用户自定义的词典,以便在分词过程中能够识别并正确分割出用户词典中定义的词汇
jieba.load_userdict('.\红楼梦\红楼梦词库(1).txt')
# 识别停用词(无关的符号、语气词之类的)
stopwords = pd.read_csv('./红楼梦/StopwordsCN.txt',
                        encoding='utf-8',engine='python',index_col=False)
File_words = open('训练数据.txt','r',encoding='utf-8')
file_jieba = open('./分词.txt','w',encoding='utf-8')
for line in File_words:
    juan_ci = ''
    segs = jieba.lcut(line)
    for seg in segs:
        if seg not in stopwords.stopword.values and len(seg.strip()) > 0:
            juan_ci += seg + ' '
    file_jieba.write(juan_ci)
file_jieba.close()

将分好的词另外存放进一个文本,便于接下来计算TF-IDF值。

3. 构建TF-IDF模型对象

将分词的文本读出,对文本中的每个词拟合变换,计算TF-IDF值:

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
inFile = open('./红楼梦/分词后汇总.txt','r',encoding='utf-8')
corpus = inFile.readlines()

vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform(corpus)
wordlist = vectorizer.get_feature_names_out()	#得到文本中的所有单词

模型拟合变换之后,即fit_transform()后,模型中已经将每个单词的TF-IDF值计算出来了,存放在模型对象tfidf的data参数中:

4. 排序取值

将文章中每个单词及其对应的TF-IDF值一一匹配对应,取权重最大的前十位:

python 复制代码
wordlist = vectorizer.get_feature_names_out()
resdict = {}
for j in range(0,len(wordlist)):
    resdict[wordlist[j]] = tfidf.data[j]
resdict = sorted(resdict.items(),key=lambda x: x[1],reverse=True)
print(resdict[0:10])
----------------------
[('花草', 0.6881877837825879), ('当暄', 0.6369431893238401), ('姿色', 0.6344396760064667), ('格儿', 0.5345006632891931), ('防避', 0.5292960147979806), ('谦恭下士', 0.49819075049758665), ('玲珑剔透', 0.4850529808045218), ('进城', 0.4727080684472267), ('禅房', 0.47164095305220133), ('一跤', 0.4481377720511264)]

这样我们就取到了权重最大的前十位单词,如果要搜索这篇文章的话,便可以通过搜索这些单词来搜索。

总结

本篇介绍了:

  1. jieba分词的基础用法
  2. 如何计算中文文本中单词的TF-IDF值
  3. 型拟合变换之后,模型中已经将每个单词的TF-IDF值计算出来了
相关推荐
B站_计算机毕业设计之家14 小时前
python手写数字识别系统 CNN算法 卷积神经网络 OpenCV和Keras模型 计算机视觉 (建议收藏)✅
python·深度学习·opencv·机器学习·计算机视觉·cnn
郝学胜-神的一滴14 小时前
Python高级编程技术深度解析与实战指南
开发语言·python·程序人生·个人开发
骑猪兜风23314 小时前
谷歌 AI IDE Antigravity 系统提示词分析
人工智能·ai编程·ai ide·gemini3·谷歌gemini3·antigravity
charlie11451419114 小时前
使用 Poetry + VS Code 创建你的第一个 Flask 工程
开发语言·笔记·后端·python·学习·flask·教程
Jing_jing_X14 小时前
ChatGPT 四种模式:普通对话、推理思考、深度研究、学习模式有什么区别?
人工智能·学习·chatgpt
汀、人工智能14 小时前
AI Compass前沿速览:Gemini 3、Grok 4.1、GPT-5.1、千问、Lumine-3D开世界AI智能体
人工智能·gemini 3·grok4.1·gpt 5.1
用户51914958484514 小时前
利用配置错误的postMessage()函数实现DOM型XSS攻击
人工智能·aigc
Valueyou2414 小时前
引入基于加权 IoU 的 WiseIoU 回归损失以提升 CT 图像检测鲁棒性
人工智能·python·深度学习·目标检测
BestSongC14 小时前
基于VUE和FastAPI的行人目标检测系统
vue.js·人工智能·yolo·目标检测·fastapi
熊猫钓鱼>_>14 小时前
多维度股票量化指标体系详解
python·股票·量化·指标·趋势·macd·估值