分词模型与关键字提取——当下最热的学习资料是什么?
Posted Captain_Data
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分词模型与关键字提取——当下最热的学习资料是什么?相关的知识,希望对你有一定的参考价值。
写在前面:本文数据与教程已打包放在此有需要可以点击下载:点我下载
分词技术与全网最全it学习教程资料-自然语言处理文档类资源-CSDN下载
关注本账号获取最新资料~
公主号:captain_data
起因是我在朋友圈看到某位大牛在转让他的课程,正好最近也在学习,于是去咨询了一下,价格还好,于是就买下了
我看了一下,客课程确实丰富,某勾、某马、某内、某硅谷课程应有尽有,开心疯了~
拿到课程数据后:
看了一下里面的课程资料,表格整理的是470个,底部还有零散整理的,初步估算超过500个学习资源~
下面就分析一下这个包里头都有啥:
先上结论:
该份资料龙里头主要关键字如下,关键字:‘数据’排名第一:
第一步:将文档中数据粘贴到文本中(数据确实太多,用表格存不方便)
第二步:读取文本数据:
在读取文本数据前,先导入本次分析要用到的几个包:具体为jieba 分词和词云包
import jieba
# import jieba.posseg as jp #lcut cut 分词,获取词性 i.flag 词性 ,i.word 词
# import jieba.posseg as
import jieba.posseg as jp, jieba
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import datetime
from gensim import corpora, models
import warnings
warnings.filterwarnings("ignore")
# jieba.set_dictionary("./in_files/dict.txt") ## //指定dict.txt加载路径,为了方便部署,使用相对路径。
# # jieba.initialize()
读取文本数据:
with open(r'.\\in_files\\learn_data.txt','r',encoding='utf8') as f:
txt=f.read()
读取后结果如下:
第三步:简单清洗
可以看到,很多换行符“\\n \\t”等,于是我们用replace方法清洗一下~
txt=txt.replace("\\n","").replace("\\t","")
第四步:分词并去除停用词,设置词云与词频规格
stopwords=pd.read_table("in_files/stopwords.txt", index_col=False, quoting=3, names=['stopword'], encoding="utf-8")
w_st_2_str_list=[w for w in jieba.lcut(txt) if w not in stopwords.values ]
w_st_2_str_list_clean=[i for i in w_st_2_str_list if len(i)>1 and i!='nan'] #词·频格式
# w_st_2_str_list_clean
# w_st_2_str_list_clean
word_cloud_new=" ".join(w_st_2_str_list_clean)# 词云格式
第五步:调用词云与词频统计代码,直接统计关键字的数量与频率
在这块导出使用了一个时间命名函数,防止名称重复~
# w_st_2_str_list_clean=
def path_name_time():
global path_nameTime
timestr = datetime.datetime.now().strftime('%Y%m%d%H%M%S') ###生成当下的时间
path_nameTime = timestr
# os.mkdir('out/汇总数据/' + path_nameTime)
# os.mkdir('out/清洗数据/' + path_nameTime)
return timestr
print("--开始词频统计--")
bow_model=corpora.Dictionary([w_st_2_str_list_clean])
arr_count=np.array(list(bow_model.doc2bow(w_st_2_str_list_clean)))[:,1]
arr_keys=np.array(list(bow_model.items()))
df_bow=pd.DataFrame(arr_keys,columns=['num','keywords'])
df_bow['count_times']=arr_count
print("--开始抽取关键字--")
tfidf = TfidfVectorizer(smooth_idf=True,norm='l1')
d= tfidf.fit_transform([word_cloud_new]) #" ".join(ciyun_ci)
TF_result = pd.DataFrame(d.toarray())
TF_result.columns = tfidf.get_feature_names()
TF_result_T=TF_result.T
TF_result_T.columns=['times_p']
TF_result_T['keywords']=TF_result_T.index
# TF_result_T['times']=TF_result_T['times_p']*(len(TF_result_T))
col_index=['keywords','count_times','times_p']
file_name='./result/TF_result_T'+path_name_time()
TF_result_T=TF_result_T.merge(df_bow, on='keywords', how='left')
TF_result_T=TF_result_T[col_index]
print("--开始排序导出--")
TF_result_T.sort_values(by='count_times',ascending=False,inplace=True)
TF_result_T.to_excel(file_name+ '.xlsx',index=False)
## 词云
print('--生成词云图ing--')
ciyun_obj = WordCloud(font_path='simhei.ttf',width=600,height=200,max_font_size=80,min_font_size=10,max_words=100,collocations = False, background_color='white',mask=plt.imread('in_files/tt.jpg'))
ciyun_obj.generate(word_cloud_new) #生成指定的词云图
plt.figure(dpi=150) #词云图缩放比例
plt.imshow(ciyun_obj) #显示词云图
plt.axis('off') #去掉坐标轴
ciyun_obj.to_file(file_name+".jpg") #保存词云
print('--导出关键字文件名为:', file_name)
结果:
完整代码在此:
import jieba
# import jieba.posseg as jp #lcut cut 分词,获取词性 i.flag 词性 ,i.word 词
# import jieba.posseg as
import jieba.posseg as jp, jieba
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import datetime
from gensim import corpora, models
import warnings
warnings.filterwarnings("ignore")
# jieba.set_dictionary("./in_files/dict.txt") ## //指定dict.txt加载路径,为了方便部署,使用相对路径。
# # jieba.initialize()
with open(r'.\\in_files\\learn_data.txt','r',encoding='utf8') as f:
txt=f.read() #公主号:captain_data
txt=txt.replace("\\n","").replace("\\t","") #公主号:captain_data
stopwords=pd.read_table("in_files/stopwords.txt", index_col=False, quoting=3, names=['stopword'], encoding="utf-8")
w_st_2_str_list=[w for w in jieba.lcut(txt) if w not in stopwords.values ]
w_st_2_str_list_clean=[i for i in w_st_2_str_list if len(i)>1 and i!='nan'] #词·频格式
# w_st_2_str_list_clean
# w_st_2_str_list_clean
word_cloud_new=" ".join(w_st_2_str_list_clean)# 词云格式
# w_st_2_str_list_clean=
def path_name_time():
global path_nameTime
timestr = datetime.datetime.now().strftime('%Y%m%d%H%M%S') ###生成当下的时间
path_nameTime = timestr
# os.mkdir('out/汇总数据/' + path_nameTime)
# os.mkdir('out/清洗数据/' + path_nameTime)
return timestr
print("--开始词频统计--")
bow_model=corpora.Dictionary([w_st_2_str_list_clean])
arr_count=np.array(list(bow_model.doc2bow(w_st_2_str_list_clean)))[:,1]
arr_keys=np.array(list(bow_model.items()))
df_bow=pd.DataFrame(arr_keys,columns=['num','keywords'])
df_bow['count_times']=arr_count
print("--开始抽取关键字--")
tfidf = TfidfVectorizer(smooth_idf=True,norm='l1')
d= tfidf.fit_transform([word_cloud_new]) #" ".join(ciyun_ci)
TF_result = pd.DataFrame(d.toarray())
TF_result.columns = tfidf.get_feature_names()
TF_result_T=TF_result.T
TF_result_T.columns=['times_p']
TF_result_T['keywords']=TF_result_T.index
# TF_result_T['times']=TF_result_T['times_p']*(len(TF_result_T))
col_index=['keywords','count_times','times_p']
file_name='./result/TF_result_T'+path_name_time()
TF_result_T=TF_result_T.merge(df_bow, on='keywords', how='left')
TF_result_T=TF_result_T[col_index]
print("--开始排序导出--")
TF_result_T.sort_values(by='count_times',ascending=False,inplace=True)
TF_result_T.to_excel(file_name+ '.xlsx',index=False)
## 词云
print('--生成词云图ing--')
ciyun_obj = WordCloud(font_path='simhei.ttf',width=600,height=200,max_font_size=80,min_font_size=10,max_words=100,collocations = False, background_color='white',mask=plt.imread('in_files/tt.jpg'))
ciyun_obj.generate(word_cloud_new) #生成指定的词云图
plt.figure(dpi=150) #词云图缩放比例
plt.imshow(ciyun_obj) #显示词云图
plt.axis('off') #去掉坐标轴
ciyun_obj.to_file(file_name+".jpg") #保存词云
print('--导出关键字文件名为:', file_name)
以上是关于分词模型与关键字提取——当下最热的学习资料是什么?的主要内容,如果未能解决你的问题,请参考以下文章