NLPIR汉语分词系统
官网:http://ictclas.nlpir.org/ 含有下载地址及网站事例
工具github地址:https://github.com/NLPIR-team
首先NLPIR拥有非常强大的功能
看到首页下面这些工具的位置
NLPIR种包含这些功能的许可证,SDK开发文档,NLPIR是一个开源系统,许可证免费下载,使用期一个月,过期后重新下载
一. NLPIR-ICTCLAS 中文分词工具
(1)介绍
在https://github.com/NLPIR-team页面可以找到NLPIR-ICTCLAS项目
点击clone and download ,加压压缩包,得到的目录如下
在idea或eclipse中打开项目(该项目是由eclipse编译的,使用eclipse能更少出错),我在这里使用的是idea
文件目录下看到文件结构如下
data_train代表测试数据
lib代表需要依赖的包
resources代表一些操作系统上的支持工具 支持linux和windows
seg.txt代表运行结果产生的文本
/src/.../test 里面的NLPIRTest代表测试写的类
/src/... 中的NLPIR代表开发的类,类中的函数代表可以调用的函数 ,开发文档为https://github.com/NLPIR-team/NLPIR/tree/master/NLPIR%20SDK/NLPIR-ICTCLAS/doc
(2)运行sample
在运行sample的时候可能会遇到问题,比如不兼容,项目找不到资源文件,许可证过期的情况
对于许可证过期的情况:
在地址https://github.com/NLPIR-team/NLPIR/tree/master/License/license%20for%20a%20month/NLPIR-ICTCLAS%E5%88%86%E8%AF%8D%E7%B3%BB%E7%BB%9F%E6%8E%88%E6%9D%83中下载许可证
将下载的许可证复制到项目的/lib/data下面,替代原来的许可证
运行之后,看到下图代表成功
结果在seg.txt中
(3)NLPIRTest.java代码解析
package com.lingjoin.nlpir.test;
import java.io.File;
import java.io.FileWriter;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;
import com.lingjoin.nlpir.NLPIR;
public class NLPIRTest {
Listfiles=new ArrayList();
public void getAllfiles(File filePath){//遍历路径下的所有文件
File[] fsFiles=filePath.listFiles();
for(File f:fsFiles){
if(f.isFile()&&!f.getName().equals(".DS_Store"))files.add(f.getPath());
if(f.isDirectory())this.getAllfiles(f);
}
}
public StringgetContent(File file)throws Exception{//获取每个文本的内容,并处理
RandomAccessFile f=new RandomAccessFile(file, "r");
byte[] b=new byte[(int) file.length()];
f.read(b);
f.close();
String c=new String(b,"GBK").replaceAll("\\s", "");//每两个字节组成一个汉字并去掉空格
return c;
}
public static void main(String[] args)throws Exception{
NLPIR.init("lib");//初始化支持库
//NLPIR.importUserDict("");
FileWriter fw=new FileWriter(new File("seg.txt"));
String fPath="data_train";
NLPIRTest test=new NLPIRTest();
test.getAllfiles(new File(fPath));
for(String f:test.files){//遍历每一个文件
System.out.println(f);//输出文件名
String con=test.getContent(new File(f));//获取文本内容
fw.write(new File(f).getName()+"\t"+NLPIR.paragraphProcess(con, 1).replaceAll(" ", "\t")+"\n");
//文件输出到seg.txt,格式为文件名+每个分词+空格;分完一个文本后回车
}
fw.flush();
fw.close();
}
}
(4)结果部分展示
4-1_01 新华社/nt 照片/n ,/wd 枣庄/ns (/wkz 山东/ns )/wky ,/wd 2016年/t 8月/t 30日/t 山东/ns 枣庄/ns 出现/v “/wyz 鱼鳞/n 云/vg ”/wyy 这/rzv 是/vshi 8月/t 30日/t 在/p 山东省/ns 枣庄市/ns 山亭区/ns
(5)分词后缀解释
汉语词性对照表地址:https://blog.csdn.net/kevin_darkelf/article/details/39520881