马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目次
一、怎样举行关键词提取
1、关键词提取步调
1)数据网络
2)数据准备
3)模子创建
4)模子结果统计
5)TF-IDF分析
2、什么是语料库
3、怎样举行中文分词
1)导包
2)导入分词库
3)导入停用词库
4)利用jieba库分词
5)代码实例
二、焦点算法
1、TF-IDF分析
2、TF-IDF算法公式
1)TF词频公式
2)IDF逆文档频率公式
3)TF-IDF公式
4)举例
3、案例
运行结果:
三、处置惩罚红楼梦词库
1、导入红楼梦词库
用法示例:
2、对整篇红楼梦文章举行拆分
完备代码:
运行结果:
一、怎样举行关键词提取
1、关键词提取步调
1)数据网络
网络研究必要的数据,创建相应的语料库
2)数据准备
导入分词库和通用词库
3)模子创建
利用 jieba 库,对语料库举行分词处置惩罚
4)模子结果统计
根据分类结果,举行词频统计,并绘制词云图
5)TF-IDF分析
得到加权后分词结果
2、什么是语料库
语料库是指用于练习和评估模子的文本数据集。语料库通常包罗大量的天然语言文本,比方消息文章、册本、网页内容等。
语料库中存放的是在语言的现实利用中真实出现过的语言质料。
3、怎样举行中文分词
1)导包
2)导入分词库
固定词组,jieba库没有内置的词组
3)导入停用词库
没故意义的词
4)利用jieba库分词
将文章完全分词即可
5)代码实例
- import jieba
- str = '我们在学习python办公自动化' # 导入词组
- jieba.add_word('python办公自动化') # 指定固定词组
- a = jieba.lcut(str) # 对词组进行分词
- print(a)
复制代码 此时的运行结果为:
上述如果没有利用固定词组则会有下列运行结果:
二、焦点算法
1、TF-IDF分析
TF-IDF是一种用来评估一个词在文档中的告急性的统计方法。
TF指的是某一个给定的词语在该文件中出现的次数,这个数字通常会被归一化(一样平常是词频除以文章总词数),以防止它方向长的文件。
IDF指的是逆文档频率。IDF的告急头脑是:如果包罗词条 t 的文档越少,IDF越大,则阐明词条具有很好的种别区分本事。
TF-IDF倾向于过滤掉常见的词语,保存告急的词语,它的值即是一个词的TF乘以它的IDF值,其巨细用于衡量一个词在一个文档中的告急性,相称于加权
2、TF-IDF算法公式
1)TF词频公式
2)IDF逆文档频率公式
3)TF-IDF公式
4)举例
以《中国的蜜蜂养殖》为例,假定该文长度为1000个词,“中国"、"蜜蜂”、养殖"各出现20次,则这三个词的"词频"(TF)都为0.02。然后,搜索Google发现,包罗"的"字的网页共有250亿张,假定这就是中文网页总数。包罗"中国"的网页共有62.3亿张,包罗”蜜蜂”的网页为0.484亿张,包罗“养殖”的网页为0.973亿张。则它们的逆文档频率(IDF)和TF-IDF如下:
“中国”、 “密封”、“养殖”的TF值 = 20/1000 = 0.02
“中国” IDF值 = log(250/62.3+1) = 0.603
“中国” TF-IDF值 = TF * IDF = 0.0121
同理即可得到剩余词组的TF-IDF值
3、案例
文档内容:(五行代表五篇文章)

- from sklearn.feature_extraction.text import TfidfVectorizer
- import pandas as pd
- inFile = open('task2_1.txt','r') # 打开文件
- corpus = inFile.readlines() # 读取所有的文章,此时每篇文章内容存放在一行,返回结果是一个列表类型,每单个元素存放一篇文章
- vectorizer = TfidfVectorizer() # 建立TF-IDF模型,转为TF-IDF的向量转换对象
- tfidf = vectorizer.fit_transform(corpus) # 传入数据,进行训练,返回包含TF-IDF的向量值,其对应为每个词的TF-IDF值,每个词用坐标表示为行列号,列号为全篇文档词组的排序值
- print(tfidf)
- wordlist = vectorizer.get_feature_names() # 获取全篇文档的所有的词组,列表形式传出
- print(wordlist)
- df = pd.DataFrame(tfidf.T.todense(),index=wordlist) # 将上述转换的包含TF-IDF的数据转换为稀疏矩阵,T为转置,todense是将上述的稀疏矩阵转换成密集矩阵,之后将其转变为二维数组,并设置索引值为所有的单词
- print(df)
- for j in range(0,len(corpus)): # 遍历次数为文档内的文章数量
- featurelist = df.iloc[:,j].to_list() # 通过索引号获取每一列的内容,并转换为列表
- resdict = {} # 排序以及看输出结果对不对
- for i in range(0,len(wordlist)): # 遍历的次数为词组的总数
- if df.iloc[i,j]!=0: # 首先对每一列进行处理,对每一列分别取出每一个单词对应的值,判断如果不等于0的情况该怎么办
- resdict[wordlist[i]] = featurelist[i] # 对每一列数据取出其TF-IDF的值,将其存入字典,键的值为相对应的词组
- resdict = sorted(resdict.items(),key=lambda x:x[1],reverse=True) #使用items将字典转换成包含键值对的元组列表,sortes对可迭代对象进行排序,使用匿名函数指定排序的依据,x[1]表示元组对应的值,reverse=True表示降序
-
- print(resdict)
复制代码 运行结果:
三、处置惩罚红楼梦词库
1、导入红楼梦词库
词库内有如下内容:
用法示例:
- jieba.load_userdict(r'.\红楼梦词库.txt') # 导入本地词库
- str = "螯封嫩玉双双满傲世也因同气味把笔悲伤说世途把芳魂消耗把芳魂消耗望家乡" # 任意设置一个字符串,内容是词云内的数据,用于测试
- a = jieba.lcut(sentence=str) # 字符串进行切分
- print(a)
复制代码 运行结果为:
2、对整篇红楼梦文章举行拆分
红楼梦.txt 文件内容:(此中包罗整篇文章)
现需将此中的每一卷内容生存为一个新的文本文件,而且文件定名也是相应卷名
完备代码:
- import os
- file = open(r'.\红楼梦.txt','r',encoding='utf8') # 打开红楼梦数据文件
- flag = 0 # 设置一个变量为0
- juan_file = open(r'.\红楼梦\红楼梦卷开头.txt','w',encoding='utf8') # 创建写模式,创建一个名为红楼梦卷开头的txt文件,文件放在红楼梦目录下
- for line in file: # 遍历每一行内容
- if '卷 第' in line: # 判断每一行是否有这个数值
- juan_name = line.strip()+'.txt' # 去除带有上述数值的一行数据左右两边的空白字符,比如空格、制表、换行等,并增加了一个后缀txt
- path = os.path.join('.\\红楼梦\\分卷\\',juan_name) # 将文件名和路径拼接起来,得到新文件的完整路径。
- print(path) # 打印这个文件名
- if flag==0: # 判断,如果flag=0
- juan_file = open(path,'w',encoding='utf8') # 打开并创建写一个文件,文件名为上述生成的文件名
- flag=1 # 将flag赋值为1
- else: # 如果flag不等于0,说明已经在生成文件名的操作内了,此时打开上述创建的文件
- juan_file.close()
- juan_file = open(path,'w',encoding='utf8')
- continue # 这里的语句和上述if同级别,在上上个if下,即执行完上述内容后跳出这一整个循环,继续进行下一次循环
- juan_file.write(line) # 此段和第一个if同级别,相当于if的else语句,如果字符串不在当前行内,那么就将这一行内容写入juan_file文件
- juan_file.close() # 操作完关闭文件
复制代码 运行结果:
共120卷
|