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])
运行结果: