对于切词确实是一个复杂的功能,足以写上好几篇论文,但是如果仅仅想对一个句子、一个段落、一篇文章进行切词,可以利用中国自然语言开源组织中各位大牛写好的工具。已经打包成jar包,可以直接调用了,无须自己再考虑复杂的算法。

当然这种切词是对于自然语言的,对于一些有规律的字符串,请自行利用indexOf、substring、split的各类Java自带函数,没有使用额外java包的必要。

首先假如有如下的一个节选自梁启超《最苦与最乐》段落:

人生若能永远像两三岁小孩,本来没有责任,那就本来没有苦。到了长成,责任自然压在你的肩头上,如何能躲?不过有大小的分别罢了。尽得大的责任,就得大快乐;尽得小的责任,就得小快乐。你若是要躲,倒是自投苦海,永远不能解除了。

要对其进行词语的分割成以下形式:


划分成中文,并且标识各个词语的词性,做法如下:

1、先到http://maven.ansj.org/org/ansj/ansj_seg/下载最新版ansj_seg.jar,建议使用2.0x以上的版本,再到http://maven.ansj.org/org/nlpcn/nlp-lang/下载其辅助包nlp-lang.jar,如果是使用1.0x版本的ansj_seg.jar,则到http://maven.ansj.org/org/ansj/tree_split/下载1.0x的辅助包tree_split.jar。下载之后,在Eclipse新建java工程文件夹下,新建一个lib文件夹,并且把ansj_seg-2.0.8.jar与nlp-lang-1.0.jar扔过去,在Eclipse刷新,右击相应工程,选择属性,Java Build Path把两个jar添加到工程当中。


2、之后,到https://github.com/NLPchina/ansj_seg下载其切词字典,


下载之后解压,将其library文件夹扔到你Java工程的根目录,再把library.properties扔到Java工程的bin目录。

3、之后,新建一个WordSegment.java写入如下代码,编译运行,则得到结果:

import java.util.List;

import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;

public class WordSegmentTest {
	public static void main(String[] args) {
		String str = "人生若能永远像两三岁小孩,本来没有责任,那就本来没有苦。到了长成,责任自然压在你的肩头上,如何能躲?不过有大小的分别罢了。尽得大的责任,就得大快乐;尽得小的责任,就得小快乐。你若是要躲,倒是自投苦海,永远不能解除了。";
		List<Term> term = ToAnalysis.parse(str);
		for (int i = 0; i < term.size(); i++) {
			String words = term.get(i).getName();// 获取单词
			String nominal = term.get(i).getNatureStr();// 获取词性
			System.out.print(words + "\t" + nominal + "\n");
		}
	}
}

其中str是要被切割的中文自然语言段落,切割后的结果是一个存放Term对象的List,对这个List进行遍历,可以利用getName()获取切割的单词,利用getNatureStr()获取到词性。其中词性表如下:点击打开链接


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐