零时插入,浅层深度学习的自然语言处理下一篇再讲。
首先,必须要感谢ansjsun的无私奉献,给我们提供了一款这么优秀的分词工具,具体的链接
https://github.com/ansjsun,其次,这篇博客没有太高深的技术,就是做了一个实验,算是自己的一个记录吧,下面讲一下具体的操作步骤:
1、下载JAR包。
我是在这里下载的,http://download.csdn.net/detail/jj12345jj198999/6020541
2、创建项目
这一步就不用过多叙述了,都是基本的操作。
3、添加保留词
ansjsun提供了三种方法,https://github.com/ansjsun/ansj_seg/wiki/%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AF%8D%E5%85%B8%E8%B7%AF%E5%BE%84%E8%AE%BE%E7%BD%AE。
我在Eclipse采用了第一种方法,在Netbeans采用了第二种方法。
首先,作者需要建立自己的词典,命名为userLibrary.dic,词典的格式:ansj中文分词 userdefine 1000,中间用tab键,后面两个属性可以自己定义,保存格式utf-8,放在library\userLibrary里面。
对于Eclipse,需要创建library.properties,里面添加内容:
#path of userLibrary this is default library
userLibrary=library/userLibrary/userLibrary.dic
ambiguityLibrary=library/ambiguity.dic
#this have diff library by analysis
userLibraryPath=library/dics
然后将这个文件放在bin里面,就成功添加了保留词典,添加成功之后就可以运行程序了,具体的程序如下:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringReader;
import java.util.Iterator;
import love.cq.util.IOUtil;
import org.ansj.app.newWord.LearnTool;
import org.ansj.domain.Term;
import org.ansj.recognition.NatureRecognition;
import org.ansj.splitWord.Analysis;
import org.ansj.splitWord.analysis.NlpAnalysis;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.ansj.util.*;
import org.ansj.recognition.*;
import org.ansj.library.UserDefineLibrary;
public class main {
//public static final String TAG_START_CONTENT = "";
//public static final String TAG_END_CONTENT = "";
public static void main(String[] args) {
// TODO Auto-generated method stub
String temp = null ;
BufferedReader reader = null;
PrintWriter pw = null;
try {
reader = IOUtil.getReader("D:/testing/Java/Segmentation/Corpus.txt", "UTF-8") ;
pw = new PrintWriter("D:/testing/Java/Segmentation/testresultbig.txt");
long start = System.currentTimeMillis() ;
int allCount =0;
int termcnt = 0;
int temptermcount=0;
int linecount=0;
Set<String> set = new HashSet<String>();
while((temp=reader.readLine())!=null){
temp = temp.trim();
//if (temp.startsWith(TAG_START_CONTENT)) {
// int end = temp.indexOf(TAG_END_CONTENT);
String content = temp;
//System.out.println(content);
if (content.length() > 0) {
allCount += content.length() ;
List<Term> result = ToAnalysis.parse(content);
linecount=linecount+1;
pw.print("Thrpos"+linecount+" ");
for (Term term: result) {
String item = term.getName().trim();
if (item.length() > 0) {
termcnt++;
pw.print(item.trim() + " ");
set.add(item);
temptermcount++;
if (temptermcount>999) {
temptermcount=0;
break;
}
}
}
temptermcount=0;
pw.println();
}
//调试用的文件
if (linecount>=40) break;
}
long end = System.currentTimeMillis() ;
System.out.println("共" + termcnt + "个term," + set.size() + "个不同的词,共 "
+allCount+"个字符,每秒处理了:"+(allCount*1000.0/(end-start)));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != pw) {
pw.close();
}
}
}
}
对于Netbeans,需要采用第二种方法,在程序中增加一句:
MyStaticValue.userLibrary=[你的路径]
路径可以是具体文件也可以是一个目录 如果是一个目录.那么会扫描目录下的dic文件自动加入词典userLibrary=[你的路径]。
当你看到,运行过程中出现:
init user userLibrary ok path is : D:\workplace\WordSegmentation\library\userLibrary\userLibrary.dic
init ambiguityLibrary ok!
证明你的保留词典已经成功添加。
实验结果,我这里就添加了一个保留词在保留词典里面:ansj中文分词 userdefine 1000。
为添加保留词典的时候:
ansj 中文 分词 开 两会 仅 发 只 国产 手表 ,.......
添加保留词典之后:
ansj中文分词 开 两会 仅 发 只 国产 手表 ,.......
整体感觉分词速度很快,但是词还是切得有点碎。