mecab分词组建更新的比较快,而且开源,使用起来也很方便。 项目地址:https://code.google.com/p/mecab/
1. 下载词典:
如果是linux上使用 下载 https://code.google.com/p/mecab/downloads/detail?name=mecab-jumandic-7.0-20130310.tar.gz&can=2&q=
如果是windows上使用 下载 https://code.google.com/p/mecab/downloads/detail?name=mecab-0.996.exe&can=2&q=
2. 安装,这个分词组建和别的不一样,需要安装然后指定目录就可以使用。一般的自由软件安装顺序相同。
linux下安装:
% tar zxfv mecab-X.X.tar.gz
% cd mecab-X.X
% ./configure
% make
% make check
% su
# make install
% tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
% mecab-ipadic-2.7.0-XXXX
% ./configure
% make
% su
# make install
Windows 上直接执行 exe文件,按说明安装。比如安装到了 C:\Program Files\MeCab 目录下。
3. 分词,在windows上做的例子。
下载java开发的sdk工具 https://code.google.com/p/mecab/downloads/detail?name=mecab-java-0.996.tar.gz&can=2&q=
需要在环境变量中设置 path路径 指向 C:\Program Files\MeCab\bin,如果是linux 需要设定 LD)LIBRARY_APTH
如果在eclipse下开发,需要在执行文件时设置环境变量 path = C:\Program Files\MeCab\bin
public class test {
static {
try {
System.loadLibrary("MeCab");
} catch (UnsatisfiedLinkError e) {
System.err.println("Cannot load the example native code.\nMake sure your LD_LIBRARY_PATH contains \'.\'\n" + e);
System.exit(1);
}
}
public static void main(String[] argv) {
System.out.println(MeCab.VERSION);
Tagger tagger = new Tagger();
String str = "太郎は二郎にこの本を渡した。";
System.out.println(tagger.parse(str));
Node node = tagger.parseToNode(str);
for (;node != null; node = node.getNext()) {
System.out.println(node.getSurface() + "\t" + node.getFeature());
}
System.out.println ("EOS\n");
Model model = new Model();
Tagger tagger2 = model.createTagger();
System.out.println (tagger2.parse(str));
Lattice lattice = model.createLattice();
System.out.println(str);
lattice.set_sentence(str);
if (tagger2.parse(lattice)) {
System.out.println(lattice.toString());
for (node = lattice.bos_node(); node != null; node = node.getNext()) {
System.out.println(node.getSurface() + "\t" + node.getFeature());
}
System.out.println("EOS\n");
}
lattice.add_request_type(MeCab.MECAB_NBEST);
lattice.set_sentence(str);
tagger2.parse(lattice);
for (int i = 0; i < 10; ++i) {
if (lattice.next()) {
System.out.println("nbest:" + i + "\n" +
lattice.toString());
}
}
}
4. 还有一个组件是基于 mecab,叫cmecab-java, 项目地址 http://code.google.com/p/cmecab-java/
http://code.google.com/p/cmecab-java/downloads/detail?name=mecab-0.996_x64.zip&can=2&q= 这个是支持 win 64位系统。
mecab 的安装和以上一样,只是提供的 sdk 功能比较强大。
sdk 下载地址 http://code.google.com/p/cmecab-java/downloads/detail?name=cmecab-java-2.0.1.zip&can=2&q=
要先设置环境变量 path = C:\Program Files\MeCab\bin
import net.moraleboost.mecab.Lattice;
import net.moraleboost.mecab.Tagger;
import net.moraleboost.mecab.impl.StandardTagger;
import net.moraleboost.mecab.Node;
public static void main(String[] args) throws Exception
{
// Taggerを構築。
// 引数には、MeCabのcreateTagger()関数に与える引数を与える。
StandardTagger tagger = new StandardTagger("");
// バージョン文字列を取得
System.out.println("MeCab version " + tagger.version());
// Lattice(形態素解析に必要な実行時情報が格納されるオブジェクト)を構築
Lattice lattice = tagger.createLattice();
// 解析対象文字列をセット
String text = "本日は晴天なり。";
lattice.setSentence(text);
// tagger.parse()を呼び出して、文字列を形態素解析する。
tagger.parse(lattice);
// 形態素解析結果を出力
System.out.println(lattice.toString());
// 一つずつ形態素をたどりながら、表層形と素性を出力
Node node = lattice.bosNode();
while (node != null) {
String surface = node.surface();
String feature = node.feature();
System.out.println(surface + "\t" + feature);
node = node.next();
}
// lattice, taggerを破壊
lattice.destroy();
tagger.destroy();
}
如果要在eclipse下执行,一定要记住 在eclipse中设置环境变量,不然会报错,还要导入 cmecab-2.0.1.jar bridj-0.6.1.jar 包
java.lang.UnsatisfiedLinkError?:
net.moraleboost.mecab.impl.StandardTagger?.mecab_new2(Lorg/bridj/Pointer;)Lorg/bridj/Pointer;
Lucene使用方法
StandardMeCabAnalzyer、StandardMeCabTokenizer、FeatureRegexFilter 和其他分析器一样使用。
Solr使用方法
Solr的lib包、cmecab-(ver).jar、bridj-0.6.1.jar 都需要导入
schema.xml 中修改 分析器 StandardMeCabTokenizerFactory 等类型的定义。第一个是设置 mecab分词的。一般中文分词常用的是 cjk(第三个配置)