spark scala 用ansj分词

来源:互联网 发布:淘宝客服招聘网站 编辑:程序博客网 时间:2024/06/05 16:17

本文编辑于2017.4.15,使用ansj最新的版本5.1.1分词

先要将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/


下面的scala代码展示:从一个文本文件中读入用户自定义的词、停用标点、用spark的RDD分词:

import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.rdd.RDDimport scala.io.Sourceimport org.ansj.splitWord.analysis.DicAnalysisimport org.ansj.library.DicLibraryimport org.ansj.recognition.impl.StopRecognitionimport org.nlpcn.commons.lang.tire.libraryobject TextClassificationDemo {  def main (args: Array[String]) {    Logger.getLogger("org").setLevel(Level.OFF)    System.setProperty("spark.ui.showConsoleProgress","False")    //----添加自定义词典----    val dicfile = raw"/xxx/xxx/ExtendDic" //ExtendDic为一个文本文件的名字,里面每一行存放一个词    for (word <- Source.fromFile(dicfile).getLines) { DicLibrary.insert(DicLibrary.DEFAULT,word)} //逐行读入文本文件,将其添加到自定义词典中    println("done")    //----添加停用词----    val filter = new StopRecognition()    filter.insertStopNatures("w") //过滤掉标点    //----先分一句话测试----    val testsentence = DicAnalysis.parse("好喜欢《武林外传》这部电视剧!"). //用DicAnalysis分词,这是一个优先用户自定义词典分词的分词方式      recognition(filter).  // 过滤停用词      toStringWithOutNature("|") // 分词默认会打出词性,此语句用于不打出词性,并且分好的词用“|”隔开    println(testsentence)    // ----构建spark对象----    val conf = new SparkConf().setAppName("TextClassificationDemo").setMaster("local[2]")    val sc = new SparkContext(conf)    //----读入要分词的文件----    val filename = raw"/WorkSpace/TextClassificationDemo/data/SampleText.csv"        val CSVFile = sc.textFile(filename) // 用sc读入文件,此时文件的数据是RDD结构,注意textFile只能读UTF-8编码    val splited = CSVFile.map( x => DicAnalysis.parse(x).recognition(filter).toStringWithOutNature("|") )    splited.foreach(println)     println("done")    } }

0 0
原创粉丝点击