使用ictclas4j进行中文分词

使用ictclas4j进行中文分词


   ictclas4j是中科院计算所开发的中文分词工具ICTCLAS的Java版本,因其分词准确率较高,而备受青睐。

  1、ictclas4j的下载及使用
        1>先从 http://ishare.iask.sina.com.cn/f/12821600.html下载ictclas4j的源码包ictclas4j.zip
        2>在myeclipse中新建Java项目ictclastest
        3>解压ictclas4j.zip,将其中的Data文件夹放入ictclastest项目文件夹下,将其中的bin和src文件夹中的内容分别拷到ictclastest项目文件夹下的bin和src文件夹中
        4>导入外部包commons-lang-2.0.jar
        5>ictclas4j配置完毕,可进行分词测试。
        示例:
import org.ictclas4j.bean.SegResult;
import org.ictclas4j.segment.SegTag;

public class Test {
    public static void main(String[] args) throws Exception{
        SegTag st = new SegTag(1);
        String line = "这是ictclas4j中文分词测试程序。";
        SegResult sr = st.split(line);
        System.out.println(sr.getFinalResult());
        }
    }


   2、遇到的问题及解决方案
          1>分词的结果中不需要进行词性的标注
              打开.../src/org/ictclas4j/segment中的SegTag.java文件,修改outputResult()函数,将
result += sn.getSrcWord() + "/" + temp + " ";

改为
result += sn.getSrcWord() + "  ";

即可去掉标注的词性
          2>在读取外部文件的内容进行分词时出现错误,如下所示:
              Exception in thread "main" java.lang.NullPointerException at org.ictclas4j.bean.Dictionary.getMaxMatch
              打开../src/org/ictclas4j/bean中的Dictionary.java文件,修改getMaxMatch()函数,在
for (int j = 0; j < wis.size(); j++) {
之前加上如下语句,判断为空条件:
if (wis == null) { return null; }
         3>读取外部文件时由于编码问题引起的错误

              注意文件的读取方式,在打开文件的同时注意指定文件的编码:

InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");

举例如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;

import org.ictclas4j.bean.SegResult;
import org.ictclas4j.segment.SegTag;

public class Test {
	public static void main(String[] args) throws Exception{
		SegTag st = new SegTag(1);
		String str = "";
		int n = 0;
		File f = new File("E:/corpus/traindatas/train_uy2ch.ch.txt");
		InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");
		BufferedReader reader=new BufferedReader(read);
		String line;
		while ((line = reader.readLine()) != null&&n<20) {
			SegResult sr = st.split(line);
			System.out.println(sr.getFinalResult());
			n ++;
			}
		}
	}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值