下拉神器是一款专业的下拉词平台,为用户提供各种下拉功能:百度下拉丶360搜索下拉丶必应搜索下拉丶哔哩哔哩下拉丶抖音下拉等等,里面还有批量做词教程技术,可以一次性做10-50个词,省心高效!不用一个一个做了,而且批量做词,批量出词,可以实现霸屏效果!
有的客户想删除下拉,但是百度不受理,就可以使用批量做词,霸屏技术,实现把那些负面信息顶下去,顶掉的效果=删除效果!欢迎您前来使用!新手不懂使用,请多看2遍视频教程哦!下拉神器100%有效果的!
给大家看一个下拉神器介绍的视频,看完后,直接打开64xl.com进入下拉神器
看完上面视频,相信大家对下拉神器有初步的了解,欢迎使用下拉神器,下拉行业老品牌,如果下拉神器都不好使,整个行业其他平台一样不好使,但是大家一定要多学习多看教程,先学会做词出词的技巧!
下一篇文章内容预览:
作者:黄天远,复旦大学博士生,目前研究方向涉及文本挖掘、社交网络分析、机器学习等,希望将学习心得分享给大家,推动和深化R语言在工业界的应用。
邮件:
本文希望讲解如何使用TF-IDF方法从文本中提取关键词。关键词提取的输入是大量的文本素材,而输出的是少量的关键词。比如我们每天看的论文都会有关键词。但这些通常是作者根据文章内容提供给杂志的关键词。其实,如果我们有文章的文本,我们就可以用计算机自动提取关键词(在某些数据库中,这些关键词的名称叫做,即索引关键词,以区别于作者关键词)。
关键词抽取的主要任务是提取出代表大量文本文档内容的少量关键词,掌握这项技能可以自动对文本进行标注,非常有用。根据大多数从业者和学者的实践证明,TF-IDF算法可以解决大多数关键词抽取场景,简单有效。其实大部分的工作并不在算法上,而是在中文分词和词性标注上,因此掌握这种简单有效的方法,并利用它进行关键词抽取非常重要。本文将首先对TF-IDF算法进行简单介绍,然后提供此算法在R语言中的实现代码。
TF-IDF 简介
TF-IDF的基本思想是:一个词的重要性和它在一篇文档中出现的次数成正比关键词提取工具,但和它在语料库中出现的频率成反比。在一篇演讲中,我们反复提到某些词,那么这些词可能比其他词更重要,但是如果这些词也被别人使用,那么这些词就不能称之为我们文章或者演讲的特征了(例如,大量的文本中出现了大量的词),为了提取出文本中最有特色的代表性关键词,就使用了TF-IDF算法。也就是说,如果某个词或短语在一篇文档中出现多次,但在其他文档中没有出现,或者某个词或短语在一篇文档中很少出现,那么可以认为它具有很好的区分性,适合用来表征该文档。
TF(Term)表示某个单词在一篇文档中出现的次数。
DF()表示整个语料库中包含某个单词的文档数量
IDF()为逆文档频率,计算公式为:IDF=log(语料库总文档数/(包含该单词的文档数+1))。如果不加1,分母为零时会出现错误,所以必须加1。图中没有加1,一般认为既然算上单词,那么该单词应该至少出现一次,在训练模型的时候这是正确的,但在使用模型的时候就不一定了,为了保险起见,加1是正确的。
TF-IDF = TF * IDF
从公式中我们可以看出,一个词在一篇文档中出现的次数越多,它的TF值就越大,整个语料库中包含某个词的文档越少,它的IDF值就越大,因此,一个词的TF-IDF值越大,说明该词是关键词的概率越大。
TF-IDF关键词提取算法的一大弊端就是为了能够精准的从一篇文档中提取关键词,需要一整套语料库来支撑。解决这个问题的办法通常是在通用语料库上预先计算好关键词,所有词的IDF值就是这样计算出来的。这种方案对于普通文档的关键词提取有一定效果,但是对于专业度稍微强一点的文档,效果就差很多了。因此如果是垂直领域的话,需要先自己训练模型,形成IDF库(内容是一个数据框,一列是词,另一列是词的IDF),用人民日报语料库来训练,对新闻特征的提取有一定效果。但是随着时代的变化和人们语言习惯的变化,无论是分词库还是IDF分词库都需要定期更新才能达到好的效果。
在 R 中的实现
基本准备
首先安装必要的软件包。
1library(pacman)
2p_load(tidyverse,tidytext,data.table,rio,jiebaR)
然后,导入数据。数据可以从我的网站下载:/hope-data-sc。我们将其导入 R 环境
1import("./hire_text.rda") -> hire_text
2hire_text
该数据为一些互联网公司的招聘信息,一共有4102条记录,只有一个列name,即公司对职位要求的描述。
接下来我们需要对这些文本进行分词,提取出能够代表这些文本的关键词,这样我们就能知道这些公司想要什么样的人才。
分词
首先,要进行高质量的分析,需要使用外部词库。这里我会使用搜狗词库,网址为/dict/。通过观察数据,我觉得这些互联网公司主要招IT人,有些是金融行业的,所以我会用到两个词库:计算机词库(/dict/d//dict/d)和金融词库(/dict/d)。下载到本地之后,我会把它们转换成文本格式,然后复制粘贴到用户词库中(详细方法见上一篇文章 R语言自然语言处理:中文分词)。接下来,把scel文件转换成新的格式。
1p_load(cidian)
2decode_scel(scel = "./财经金融词汇大全【官方推荐】.scel", output = "./finance.utf8", cpp = TRUE)
3
4decode_scel(scel = "./计算机词汇大全【官方推荐】.scel", output = "./it1.utf8", cpp = TRUE)
5
6decode_scel(scel = "./开发大神专用词库【官方推荐】.scel", output = "./it2.utf8", cpp = TRUE)
7
然后将这些词典加载到用户词典中。进入目录,找到“user.dict.utf8”,将转换后的文本复制粘贴到其中。
现在我们的分词能力已经有了一定的提升,现在需要找到每一篇文本的关键词,首先给每篇文档一个ID。
1hire_text %>%
2 mutate(id = 1:n()) -> hire_txt
然后,我们利用工具开始分词。
1worker() -> wk
2
3hire_txt %>%
4 mutate(words = map(hire_text,segment,jieba = wk)) %>%
5 select(id,words) -> corpus
6
7corpus
8# # A tibble: 4,102 x 2
9# id words
10#
11# 1 1
12# 2 2
13# 3 3
14# 4 4
15# 5 5
16# 6 6
17# 7 7
18# 8 8
19# 9 9
20# 10 10
21# # ... with 4,092 more rows
因为这一步不太容易理解,所以我就停下来解释一下。我首先建了一个程序叫wk,这个程序会默认调用自定义分词库和原分词库。然后,我使用这个分词库。这里用到了map函数,它会对函数的每一个元素进行处理,并且参数会设置为wk,也就是说,我们对所有的分词都使用同一个。最后,我们得到一个新的列,我命名的,里面就是每次文本处理的分词结果。但是因为每个文本分词的长度不一样,所以我们把它们都放到一个列表中,然后放到一个数据框中。
但是这种格式还是不能用,我们最终想要得到整洁的格式:即id是文本编号,另一列应该是文本分词中的每个词,还有一列是这个词的词频(TF)。然后我们计算IDF和TF-IDF。听起来很复杂,但让我们看看在R中它可以有多简单。
1corpus %>%
2 unnest() %>%
3 count(id,words) -> f_table
4
5f_table
6# # A tibble: 172,877 x 3
7# id words n
8#
9# 1 1 1228 1
10# 2 1 1279 1
11# 3 1 1666 1
12# 4 1 360 1
13# 5 1 567 1
14# 6 1 6 1
15# 7 1 D 1
16# 8 1 大厦 1
17# 9 1 栋 1
18# 10 1 高宝 1
19# # ... with 172,867 more rows
现在这其中,id是文档编号,n是该词在当前文档中出现的频率。
查找 TF、IDF 和 TF-IDF
到这一步,按照原理,其实我们所需要的数据已经全部有了,所以既能求出TF,又能求出IDF,得出乘积TF-IDF就行了。不过,这个包我们已经装好了,所以这个任务基本上就立刻完成了。
1f_table %>%
2 bind_tf_idf(term = words,document = id,n = n) -> tf_idf_table
3
4tf_idf_table
5# # A tibble: 172,877 x 6
6# id words n tf idf tf_idf
7#
8# 1 1 1228 1 0.0244 8.32 0.203
9# 2 1 1279 1 0.0244 8.32 0.203
10# 3 1 1666 1 0.0244 7.22 0.176
11# 4 1 360 1 0.0244 5.37 0.131
12# 5 1 567 1 0.0244 8.32 0.203
13# 6 1 6 1 0.0244 2.75 0.0671
14# 7 1 D 1 0.0244 5.14 0.125
15# 8 1 大厦 1 0.0244 5.23 0.128
16# 9 1 栋 1 0.0244 5.83 0.142
17# 10 1 高宝 1 0.0244 7.22 0.176
18# # ... with 172,867 more rows
我把所有参数都特意贴出来,让大家一看就明白要放什么。term接收分词结果,n接收文档编号,n接收该词在文档中出现的频率。一个函数,搞定一切。
关键词提取
由于关键词提取是基于TF-IDF的,我们现在只需要提取每个文档中TF-IDF最高的n个词,也就是这个文档最重要的关键词。比如我需要提取最重要的3个关键词。可以使用分组操作来提取单词。
1tf_idf_table %>%
2 group_by(id) %>%
3 top_n(3,tf_idf) %>%
4 ungroup() -> top3
需要说明的是,函数在选出前三名的时候,如果有并列第三名,那么都会被纳入表中。最后我们来做个词云看一下。
1p_load(wordcloud2)
2
3top3 %>%
4 count(words) %>%
5 top_n(200) %>% #只显示出现次数最多的200个关键词
6 wordcloud2(size = 2, fontFamily = "微软雅黑",
7 color = "random-light", backgroundColor = "grey")
因为数据是随机选取的,所以不需要太关注结果。另外,使用分词时会自动调用停用词库。但实际上,可以根据个性化需求定义更多的停用词。
參考
往期亮点: