自然语言处理之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])

运行结果:

相关推荐
Xiao5xiao12210 分钟前
java后端对接飞书登陆
java·开发语言·飞书
疯狂小小小码农36 分钟前
C++语言的文件操作
开发语言·后端·golang
莲动渔舟39 分钟前
Python自学 - 类进阶(可调用对象)
开发语言·python
梵谷的忧伤41 分钟前
两个栈实现队列(D)
java·开发语言·前端·算法
Reese_Cool41 分钟前
【Python】Python与C的区别
java·c语言·python
XiaoH2331 小时前
培训机构Day27
java·开发语言·javascript
imning11 小时前
gateway在eureka注册报java.lang.IndexOutOfBoundsException
java·开发语言
游客5201 小时前
设计模式-结构型-组合模式
python·设计模式·组合模式
单片机学习之路2 小时前
【STM32】利用SysTick定时器定时1s
c语言·开发语言·stm32·单片机·嵌入式硬件
秋知叶i2 小时前
【轻松学C:编程小白的大冒险】--- 选择 开发工具(IDE)Dev-c++ 03
c语言·开发语言·c++