spark使用ansj进行中文分词

author author     2022-10-04     296

关键词:

在Spark中使用ansj分词先要将ansj_seg-5.1.1.jar和nlp-lang-1.7.2.jar加入工程

ansj源码github:https://github.com/NLPchina/ansj_seg

ansj下载链接:https://oss.sonatype.org/content/repositories/releases/org/ansj/ansj_seg/

nlp-lang下载链接:https://oss.sonatype.org/content/repositories/releases/org/nlpcn/nlp-lang/


package com.spark.test

import org.apache.spark.sql.SparkSession
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

import scala.io.Source
import org.ansj.splitWord.analysis.DicAnalysis
import org.ansj.library.DicLibrary
import org.ansj.recognition.impl.StopRecognition
import org.nlpcn.commons.lang.tire.library
import java.util.Arrays

object Participle {
case class Movies(productId:String,userId:String,profileName:String,
helpfulness:String,score:String,time:String,summary:String,text:String)

def main(args: Array[String]){
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)

//分词准备
val stop = new StopRecognition()
stop.insertStopNatures("w")//过滤掉标点
stop.insertStopNatures("m")//过滤掉m词性
stop.insertStopNatures("null")//过滤null词性
stop.insertStopNatures("<br />")//过滤<br />词性
stop.insertStopNatures(":")
stop.insertStopNatures("‘")

val spark = SparkSession.builder().master("local[4]").appName("prepare").getOrCreate()
val data = spark.sparkContext.textFile("/Users/yangyang/Desktop/b.txt")
import spark.implicits._
val splits = data.filter(line => !line.contains("4.0")).map{x =>
val fields = x.split(" ")
if(fields(4).toString <= "3.0"){
fields(4) = "0"
}else if(fields(4).toString == "5.0"){
fields(4) = "1"
}
fields(0)+" "+fields(1)+" "+fields(2)+" "+fields(3)+" "+fields(4)+" "+fields(5)+" "+fields(6)+" "+fields(7)
}
//生成训练数据集
val trains = splits.map(_.split(" ")).map(x => Movies(x(0).toString,x(1).toString,x(2).toString,x(3).toString,x(4).toString,x(5).toString,x(6).toString,x(7).toString)).toDF()
//trains.show()
trains.createOrReplaceTempView("train")
val doc = spark.sql("select text from train").rdd
// println(doc)
// val testsentence = DicAnalysis.parse("好喜欢《武林外传》这部电视剧!").recognition(stop).toStringWithOutNature("|")
// println(testsentence)
//去掉逗号、句号等
val splited = doc.map{ x =>
val str = x.toString()
DicAnalysis.parse(str).recognition(stop).toStringWithOutNature("|")
}.saveAsTextFile("/Users/XXXXX/Desktop/c")
//splited.show()
//.saveAsTextFile("/Users/XXXXX/Desktop/c")
// println(splited)
spark.close()
}
}
部分参考:http://m.blog.csdn.net/ozinco/article/details/70184347

ansj--词性说明

...词准确率更高。工具支持词性标注,所以就可以依据词性进行分词结果的过滤。词性介绍 1.名词(1个一类,7个二类,5个三类)名词分为以下子类: n名词 nr人名 nr1汉语姓氏 nr2汉语名字 nrj日语人 查看详情

ansj中文分词java开发自定义和过滤词库(代码片段)

...(String[]args) Stringstr="不三不四,您好!欢迎使用ansj_seg,深圳有没有城中村这里有宽带吗?(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!"; //过滤词性和... 查看详情

spark集群环境下使用hanlp进行中文分词

1、将下载的hanlp-portable-1.6.2.jar复制到集群spark/jar文件夹下面2、启动spark集群      spark/bin/spark-shell--executor-memory6g --driver-memory1g--executor-cores2--num-executors2--master 查看详情

java使用ansj实现字符串分词

需要两个jar包ansj_seg.jarnlp-langpublicclassWord{publicstaticvoidmain(String[]args){Stringstr="你微微地笑着,不同我说什么话。而我觉得,为了这个,我已等待得很久了。";Resultresult=ToAnalysis.parse(str);Iterator<term>it=result.iterator( 查看详情

4.elk之分词功能(代码片段)

...词插件的实现方式不唯一,比如,ES+ansj,ES+ik等,我这里使用的是ik,所以后面只对ik进行分词操作的演示。   当然这里要说明下,搜索引擎用于搜索,分词才是用于语句分割和依据词典进行识别的这里不要弄混,前几天在一... 查看详情

lucene:ansj分词器(代码片段)

Ansj分词器导入jar包ansj_seg-5.1.6.jarnlp-lang-1.7.8.jar maven配置<dependency><groupId>org.ansj</groupId><artifactId>ansj_seg</artifactId> <version>5.1.1</version> </dependency>代码演示1importorg.ansj.library.DicLibrary;2impor... 查看详情

基于ansj_seg的分词实现(代码片段)

  ansj_seg,常用的分词工具,基于Java,简单好用  依赖  mvn依赖如下:<dependency><groupId>org.ansj</groupId><artifactId>ansj_seg</artifactId><version>5.1.6</version></dependency> 查看详情

jieba分词(rvs.python)

...应用进行比较。R实现通过函数worker()来初始化分词引擎,使用segment()进行分词。有四种分词模式:最大概率法(MP)、隐马尔科夫模型(HMM)、混合模型(Mix)及索引模型(query),默认为混合模型。具体可查看help(worker).#install.packa... 查看详情

使用es对中文文章进行分词,并进行词频统计排序

前言:首先有这样一个需求,需要统计一篇10000字的文章,需要统计里面哪些词出现的频率比较高,这里面比较重要的是如何对文章中的一段话进行分词,例如“北京是中华人民共和国的首都”,“北京”,“中华人民共和国”... 查看详情

ansj构造最短路径

...切分和全切分。切分完成之后,就要构建最短路径,得到分词结果。以“商品和服务”为例,调用ansj的标准分词:Stringstr="商品和服务";Resultresult=ToAnalysis.parse(str);System.out.println(result.getTerms());先不管数字发现、人名识别、用户自... 查看详情

如何利用python对中文进行分词处理

...词组件,或许从现在来看它没做到最好,但是已经做到了使用的人最多。结巴分词网上的学习资料和使用案例比较多,上手相对比较轻松,速度也比较快。结巴的优点:支持三种分词模式支持繁体分词支持自定义词典MIT授权协议... 查看详情

go语言中文分词技术使用技巧

...词方法和基于统计的分词方法。今天为大家分享一个国内使用人数最多的中文分词工具GoJieba,源代码地址:GoJieba ,官方文档:GoJieba官方文档?官方介绍支持多种分词方式,包括:最大概率模式,HMM新词发现模式,搜索引擎模式,... 查看详情

java在一串中文中,怎么只拿机场或者港口的名字

...实现方式:1.利用正则表达式进行匹配:针对中文,可以使用正则表达式来匹配机场或者港口的名称,例如匹配以“机场”或者“港口”结尾的词语。然后再筛选出符合要求的名称。2.利用分词工具进行分词:可以利用中文分词... 查看详情

中文分词的原理是啥?

我想要知道中文分词工具的原理什么?求大神帮帮忙?我使用的是python的jieba分词,它的原理是首先将要分词的字符串与自身的词典进行匹配查找,如果字典中有词语就返回该词语,然后使用HMM模型对其余为分出词语的词进行算... 查看详情

30.ik中文分词器的安装和简单使用

在之前我们学的都是英文,用的也是英文的standard分词器。从这一节开始,学习中文分词器。中国人基本上都是中文应用,很少是英文的,而standard分词器是没有办法对中文进行合理分词的,只是将每个中文字符一个一个的切割... 查看详情

sparkmllib实现的基于朴素贝叶斯(naivebayes)的中文文本自动分类(代码片段)

...于统计的方法和向量空间模型可以对常见的文本网页信息进行分类,分类的准确率可以达到85%以上。分类速度50篇/秒。2.要想分类必须先分词,进行文本分词的文章链接常见的四种文本自动分词详解及IKAnalyze的代码实现3.废话不... 查看详情

编程实践golang实现中文分词

...词方法和基于统计的分词方法。今天为大家分享一个国内使用人数最多的中文分词工具GoJieba。源代码地址:GitHub-yanyiwu/gojieba:"结巴"中文分词的Golang版本官方文档:http://www.github.com/yanyiwu/gojieba/wiki1.1.1.官方介绍支持多种分词方式... 查看详情

结巴分词

...组合对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法安装( 查看详情