word2vec的spark实现_Spark Word2Vec算法代码实现

1 import com.hankcs.hanlp.tokenizer.NLPTokenizer

import org.apache.hadoop.io.{LongWritable, Text}

import org.apache.hadoop.mapred.TextInputFormat

import org.apache.log4j.{Level, Logger}

import org.apache.spark.ml.feature.Word2Vec

import org.apache.spark.sql.SparkSession

/**

* Created by zhen on 2018/11/20.

*/

object Word2Vec {

Logger.getLogger("org").setLevel(Level.WARN) // 设置日志级别

def main(args: Array[String]) {

val spark = SparkSession.builder()

.appName("Word2Vec")

.master("local[2]")

.getOrCreate()

val sc = spark.sparkContext

val trainDataPath = "E://BDS/newsparkml/src/news_tensite_xml.smarty.dat"

// 数据预处理

val rdd = sc.hadoopFile(trainDataPath, classOf[TextInputFormat], classOf[LongWritable], classOf[Text])

.map(pair => new String(pair._2.getBytes, 0, pair._2.getLength, "GBK"))

.filter(row => row.contains("content"))

.map(row =>

if(row.contains("content")){

row.substring(row.indexOf(">")+1, row.lastIndexOf("

}else{

null

}

)

.filter(row => !row.equals(null))

// 分词

val segmentResult = rdd.mapPartitions( row =>{

row.map(word => {

val nlpList = NLPTokenizer.segment(word)

import scala.collection.JavaConverters._

nlpList.asScala.map(term => {

term.word.trim()

})

.filter(word => word.length>1) //过滤掉长度小于2的词

.mkString(" ")

})

})

val regex = """^\d+$""".r

//val size = 5

segmentResult.saveAsTextFile("E:/BDS/newsparkml/src/分词结果")

// 加载分词训练数据

val input = sc.textFile("E:/BDS/newsparkml/src/分词结果")

//.filter(row => row.split(" ").length>=size)

.filter(row => regex.findFirstMatchIn(row) == None) //过滤掉无用的数字关键词

.map(row => {

val split = row.split(" ")

val array : Array[String] = new Array[String](split.length)

for(i

array(i) = split(i)

}

new Tuple1(array)

})

val dataFrame = spark.sqlContext.createDataFrame(input).toDF("text")

dataFrame.foreach(println(_))

//创建Word2Vec对象

val word2Vec = new Word2Vec()

.setInputCol("text")

.setOutputCol("result")

.setVectorSize(50)

.setNumPartitions(64)

//训练模型

val model = word2Vec.fit(dataFrame)

//缓存模型

model.save("E:/BDS/newsparkml/src/Word2VecModel")

//保存词向量数据

/*val vector = model.getVectors.map{

case (word, vector) => Seq(word, vector)

}

vector.toJavaRDD.saveAsTextFile("E:/BDS/newsparkml/src/Word2VecData")*/

//预测

val like = model.findSynonyms("中国", 10)

like.foreach(println(_))

/*for((item, literacy)

print(s"$item $literacy")

}*/

}

}

分词结果:

分词结果部分数据:

模型:

结果:

分析:

预测结果与训练集数据紧密相关,Word2Vec会根据训练集中各词之间的紧密程度设置不同的相识度,因此,要想获得较好的预测结果,需要有合适的训练集!

LaTeX 算法代码排版 --latex2e范例总结

LaTeX 写作: 算法代码排版 --latex2e范例总结 latex2e 宏包的使用范例: \usepackage[ruled]{algorithm2e}                     ...

KMP算法代码

以下是本人根据上一篇博客随笔http://www.cnblogs.com/jiayouwyhit/p/3251832.html,所写的KMP算法代码(暂未优化),个人认为在基于上一篇博客的基础上,代码 ...

算法代码[置顶] 机器学习实战之KNN算法详解

改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...

经常使用MD5算法代码

经常使用的MD5算法代码日期: 2014年8月4日作者: 铁锚 MD5,全称为 Message Digest Algorithm 5(消息摘要算法第五版).详情请參考 维基百科:MD5  MD5加密后 ...

带你找到五一最省的旅游路线【dijkstra算法代码实现】

算法推导过程参见[dijkstra算法推导详解] 此文为[dijkstra算法代码实现] https://www.cnblogs.com/Halburt/p/10767389.html package ...

LDPC译码算法代码概述

程序说明 V0.0 2015/1/24 LDPC译码算法代码概述   概述   本文介绍了包括LDPC_Simulation.m, ldpcdecoderbp1.m,ldpcdecoderminsum ...

『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&;代码讲解+资源打包下载】

一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...

【图像处理】Haar Adaboost 检测自定义目标(视频车辆检测算法代码)

阅读须知 本博客涉及到的资源: 正样本:http://download.csdn.net/detail/zhuangxiaobin/7326197 负样本:http://download.csdn.n ...

编程算法 - 高速排序算法 代码(C)

高速排序算法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 经典的高速排序算法, 作为一个编程者, 不论什么时候都要完整的手写. 代码: /* * m ...

随机推荐

DLL导出函数和类的定义区别 __declspec(dllexport)

DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...

sql 查询服务器硬盘剩余空间

DECLARE @tb1 Table( drive varchar(20), [MB 可用空间] varchar(20)) INSERT INTO @tb1 Exec master.dbo.xp_fi ...

vs2008中使用正则删除空行

起因 今天下了段代码复制到VS2008中想好好学习下,结果发现每隔一行都有一行空白行(如下图),如果只有几行么手动删下就好了,但是这边估计有几百行,我也不知道VS2008有没有什么支持快速删除空白行的 ...

使用Linq 来解决Datatable 去除数据重复

在这也说明下,除此之外还可以通过 DataView 的方式来处理,当个人觉得这有点不好用.这里就不多作说明了 代码比较简单,直接看代码 using System; using System.Colle ...

Codeforces 430B Balls Game(Two Pointers)

[题目链接] http://codeforces.com/contest/430/problem/B [题目大意] 祖玛游戏,给出一个序列,表示祖玛球的颜色序列,三个或者以上的球碰在一起就会发生消除, ...

C#Windows Form简易计算器实现(中)

昨天花了一天的时间弄计算器.也算是做出来了,还是简易的(怀疑猿生!!).在此先感谢昨天被我骚扰的朋友. 先贴一张界面看看 其实健壮性还是挺差的,用户体验也是极差的.比如说用户输入了不合理运算式子,我就 ...

PADS Layout VX.2.3 制作PCB封装(Decal)时,导入DXF文件

操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 进入PCB封装编辑器(Decal Editor),点击Drafting Toolbar > Import D ...

网站模仿——LOFTER个人主页

代码片段 码云链接:https://gitee.com/gulveig/codes/e7q95kub6clvxt2ydi84g83

JavaOO面向对象中的注意点(一)

1.JavaOO宗旨思想: ★万物皆对象,对象因关注而产生★ ☆类是对象的抽取,对象是类的实例☆ 2.JavaOO的三大特征: 封装.继承.多态  (第四大特征 抽象 现还有争议) 3.属性与行为: ...

动态规划-线性dp-hdu-4055

https://www.cnblogs.com/31415926535x/p/10423047.html 这道题是大连的某一年的现场赛的题hdu-4055 ,,,刚开始做线性dp的题,,看了好半天才看 ...

你可能感兴趣的:(word2vec的spark实现_Spark Word2Vec算法代码实现)