自然语言处理之jieba分词和TF-IDF分析

jieba分词和TF-IDF分析

目录

  • jieba分词和TF-IDF分析
    • [1 jieba](#1 jieba)
      • [1.1 简介](#1.1 简介)
      • [1.2 终端下载](#1.2 终端下载)
      • [1.3 基本语法](#1.3 基本语法)
    • [2 TF-IDF分析](#2 TF-IDF分析)
      • [2.1 什么是语料库](#2.1 什么是语料库)
      • [2.2 TF](#2.2 TF)
      • [2.3 IDF](#2.3 IDF)
      • [2.4 TF-IDF](#2.4 TF-IDF)
      • [2.5 函数导入](#2.5 函数导入)
      • [2.6 方法](#2.6 方法)
    • [3 实际测试](#3 实际测试)
      • [3.1 问题解析](#3.1 问题解析)
      • [3.2 代码测试](#3.2 代码测试)

1 jieba


1.1 简介

结巴分词(Jieba)是一个广泛使用的中文分词Python库,它支持多种分词模式,并且可以添加自定义词典来提高分词的准确性。

1.2 终端下载

python 复制代码
pip install jieba

1.3 基本语法

  • jieba.lcut(sentence=切分语句变量),会根据自带的词典进行切分
  • jieba.add_word('词句'),添加词句到词典,之后会以此切分
  • jieba.load_userdict('文件'),文件添加到词典 ,文件需要一词一行

代码展示:

python 复制代码
import jieba
w1 = '我们在学习python办公自动化'
w2 = jieba.lcut(sentence=w1)
print(w2)
jieba.add_word('python办公自动化')
w3 = jieba.lcut(sentence=w1)
print(w3)
w4 = '我在想你,在今天的风里。'
w5 = jieba.lcut(sentence=w4)
print(w5)
jieba.load_userdict(r'.\dic.txt')
w4 = '我在想你,在今天的风里。'
w6 = jieba.lcut(sentence=w4)
print(w6)

运行结果:

2 TF-IDF分析


2.1 什么是语料库

(1)语料库中存放的是在语言的实际使用中真实出现过的语言材料;

(2)语料库是以电子计算机为载体承载语言知识的基础资源;

(3)真实语料需要经过加工(分析和处理),才能成为有用的资源。

2.2 TF

指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。
TF=某个词在文章中的出现次数/文章总词数

2.3 IDF

逆向文档频率 。IDF的主要思想是:如果包含词条t的文档越少,IDF越大,则说明词条具有很好的类别区分能力。
IDF=log(语料库文档总数/(含该词条的文档数+1))

2.4 TF-IDF

TF-IDF倾向于过滤掉常见的词语,保留重要的词语。TF-IDF越高,越重要。
TF -IDF = 词频(TF)x 逆文档频率(IDF)

2.5 函数导入

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer

2.6 方法

  • tfi =TfidfVectorizer()引用函数
  • tfi.fit_transform(words),按顺序获取文章词汇的TF-IDF
  • tfi.get_feature_names_out(),按顺序切分的文章词汇

3 实际测试


3.1 问题解析

数据如下,其中一行为一篇文章,词汇顺序非文章顺序,而是词汇排列顺序。

3.2 代码测试

代码展示:

python 复制代码
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

f = open('task2_1.txt')
words = f.readlines()

tfi =TfidfVectorizer()
tfi_words = tfi.fit_transform(words)
print(tfi_words)
wordslist = tfi.get_feature_names_out()
print(wordslist)
df = pd.DataFrame(tfi_words.T.todense(),index=wordslist)
print(df)
featurelist = df.iloc[:,5].to_list()

res = {}
for i in range(0,len(wordslist)):
    res[wordslist[i]] = featurelist[i]
res = sorted(res.items(),key=lambda x:x[1],reverse=True)
print(res)
print(res[2])

运行结果:

相关推荐
weixin199701080162 小时前
《二手ERP对接闲鱼API:聚石塔强制入塔后的架构重构实录》(附Python源码)
python
小白快快跑哦2 小时前
python-字符串全解(六):正则表达式-转义与非转义
python·正则表达式·转义与非转义
晴天的雨.9922 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
IvanCodes7 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
大模型任我行8 小时前
谷歌:“课程学习”融入扩散模型强化学习
人工智能·语言模型·自然语言处理·论文笔记
Patrick在香港8 小时前
Claude 工具调用返回空:8 次失败里只有 1 次状态码不对,其余全带 200
爬虫·python·api·claude·香港
Web3&Basketball9 小时前
CRM Agent 后训练实战:3 倍更少错误
python·架构·大模型·agent·推理
aramae9 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
AIFQuant10 小时前
ETF行情API接入踩坑记:从报错到跑通的七个问题
python·金融·区块链·etf·基金
GPU实战笔记11 小时前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发