ANSJ分词工具的具体操作!

       零时插入,浅层深度学习的自然语言处理下一篇再讲。

       首先,必须要感谢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中文分词 开 两会 仅 发 只 国产 手表 ,.......

     整体感觉分词速度很快,但是词还是切得有点碎。

      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值