Spark+ansjはビッグデータ量の中国語を分詞する

2795 ワード

現在の分詞器の大部分は,単機サーバで分詞するか,hadoop mapreduceを用いてhdfsに格納された大量のデータテキストを分詞する.mapreduceの速度が遅いため,sparkに比べてコード書き込みが煩雑である.本稿では,hdfsに格納された中国語テキストデータをspark+ansjを用いて分詞する. 
まずansjソースファイルをダウンロードし、ダウンロードアドレスはhttps://github.com/NLPchina/ansj_seg
また、nlp-lang.jarパッケージをダウンロードする必要があります.ダウンロードアドレスは上記のサイトでご覧いただけます.spark伝送データはシーケンス化されなければならないため、ansjの属性クラスはシーケンス化されていないため、ansj_seg-master/src/main/java/org/ansj/domainの属性クラスAnsjItem、Nature、NewWord、NumNatureAttr、PersonNatureAttr、Term、TermNature、TermNaturesはそれぞれSerializableインタフェースを実現します.次にmavenのmvn installを使用してansj_を生成します.seg-2.0.8.jarパッケージ、コンパイルされるansj_seg-2.0.8.jarパケットと以前にダウンロードしたnlp-lang-0.3.jarパケットがspark依存に組み込まれ、sparkはhdfsのテキストを分詞することができる.また,シーケンス化してコンパイルしたjarをcsdnにアップロードし,直接ダウンロードして使用することができる. 
例は次のとおりです.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import org.apache.spark.SparkContext import org.ansj.domain.Term import org.ansj.splitWord.analysis.ToAnalysis import org.ansj.util.FilterModifWord import org.ansj.library.UserDefineLibrary import java.util.Arrays
  object TokenTest  extends App {    val sc =  new SparkContext    val numpatitions =  100    val text = sc.textFile( "/path/to/ChineseFile" , numpatitions).map { x =>       val temp = ToAnalysis.parse(x) // FilterModifWord.insertStopWords(Arrays.asList( "r" , "n" )) //      FilterModifWord.insertStopNatures( "w" , null , "ns" , "r" , "u" , "e" ) val filter = FilterModifWord.modifResult(temp) // , val word =  for (i 0 ,filter.size())) yield filter.get(i).getName       word.mkString( "\t" )      }    text.saveAsTextFile( "/pathr/to/TokenFile" ) }