spark scala 用ansj分词

本文编辑于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.RDD
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


object 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")  
  } 
}

你可能感兴趣的:(scala)