本文编辑于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")
}
}