spark CountVectorizer+IDF提取中文关键词(scala)

2024-08-28 20:18

本文主要是介绍spark CountVectorizer+IDF提取中文关键词(scala),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在提取关键词中,TF-IDF是比较常用的算法,spark mlib中也提供了TF以及IDF的方法,但是由于spark提供的TF算法是不可逆的,即无法获取TF的结果对应的原句子的文字,所以需要采用 CountVectorizer。提取关键词的过程如下:

1、中文分词以及去掉停用词:

中文分词使用的是ansj:maven如下:

    <!--ansj--><dependency><groupId>org.ansj</groupId><artifactId>ansj_seg</artifactId><version>5.1.3</version></dependency>

分词代码(其中数据有id,content两列,id为文档id,content为文档内容):

        val filter = new StopRecognition();//val stopWords = List("/","·", ";",""",".","%",":","]","[","-");//过滤停用词val stopWords = com.lina.utils.StopWords.getStopWords("E:\\\\scalaworkspace\\\\stopword.txt");stopWords.foreach((a:String)=>filter.insertStopWords(a));val cgFun = udf((a:String)=>{ToAnalysis.parse(a.toString.replaceAll(",","")).recognition(filter).toStringWithOutNature("/").split("/", 0);});val pplDf = sqlResDf.withColumn("content",cgFun(col("content")));

2、CountVectorizer算法输出词频向量(如果只需要向量,不需要对应的词,也可以使用TF算法):

        val cvModel: CountVectorizerModel = new CountVectorizer().setInputCol("content").setOutputCol("feature").setVocabSize(10000) //向量长度.setMinDF(2) //词汇出现次数必须大于等于2.fit(pplDf)val cvDf = cvModel.transform(pplDf);

3、使用IDF算法输出逆词频向量:

        val idf = new IDF().setInputCol("feature").setOutputCol("features");val idfModel = idf.fit(cvDf);val idfDf = idfModel.transform(cvDf).drop("content").drop("feature")idfDf.show(false);

4、通过结果向量解析出关键词,注意cvModel.vocabulary中存储有向量索引与原句子的词的对应关系:

        val voc= cvModel.vocabulary;val getKeyWordsFun = udf((fea:Vector)=>{var arrW = ArrayBuffer[String]();var arrV = ArrayBuffer[Double]();fea.foreachActive((index:Int,value:Double)=>{arrW += voc(index);arrV += value;});(arrW zip arrV).toList.sortBy(-_._2).take(25).toMap.map(_._1).toArray;});val keyWordsDf = idfDf.withColumn("keywords",getKeyWordsFun(col("features"))).drop("features");

 

这篇关于spark CountVectorizer+IDF提取中文关键词(scala)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115774

相关文章

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

使用Python提取PDF大纲(书签)的完整指南

《使用Python提取PDF大纲(书签)的完整指南》PDF大纲(Outline)​​是PDF文档中的导航结构,通常显示在阅读器的侧边栏中,方便用户快速跳转到文档的不同部分,大纲通常以层级结构组织,包含... 目录一、PDF大纲简介二、准备工作所需工具常见安装问题三、代码实现完整代码核心功能解析四、使用效果控

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结