ltp
LTP4J的编译
1.从github中下载ltp4j源文件。在这里我使用DownGit作为下载工具,将ltp4j的github链接输入DownGit的输入框,如图:
2.下载完成后解压,推荐重命名为ltp4j,如图:
3. 使用Eclipse,可以按照“File > New > Project… > java Project from Existing Ant buildfile”的方式从build.xml(在刚刚下载的ltp4j文件中)中创建项目。
4. 选择next后,在Ant buildfile:一栏中填入build.xml的路径,E:\LTP\ltp4j\build.xml(window用户),如下图所示,点击Finish就导入了项目。
5. 在导入项目后,右键build.xml选择2 Ant Build。
6. 在弹出的对话框中的选择main选项卡,并在Base Directory:中填入刚刚下载的ltp4j源程序的路径E:\LTP\ltp4j。
7. 点击Run,成功运行,在ltp4j文件夹中新生成了一个output文件夹,在可以看到生成的jar包。
下载ltp库
官方文档以及很多博客在这一步都自己编译C++代理程序,过程很麻烦,不熟悉的同学很容易出错,再加上这是一篇入门实例,本着简单的原则为大家准备好了所需的所有库,各位直接下载,链接,下载完成后,如图。
在Eclipse中使用编译好的LTP4J
接下来是最后一步
1. 在Eclipse中新建Java Project。
2. 导入ltp4j.jar,不知道的自行Google“eclipse如何导入jar包”。
3. 将之前下载的所有ltp库复制粘贴到Eclipse项目根目录,如图。
4. 新建测试程序
注:修改cws.model文件路径,cws.model文件在文章一开始下载的文件夹中。
本地接口使用示例
分词接口
import java.util.ArrayList;
import java.util.List;
import edu.hit.ir.ltp4j.segmentor;
public class TestSegment {
public static void main(String[] args) {
// /MyTest/
if (Segmentor.create("ltp_data/cws.model") < 0) {
System.err.println("load failed");
return;
}
String sent = "我是中国人";
List<String> words = new ArrayList<String>();
int size = Segmentor.segment(sent, words);
for (int i = 0; i < size; i++) {
System.out.print(words.get(i));
if (i == size - 1) {
System.out.println();
} else {
System.out.print("\t");
}
}
Segmentor.release();
}
}
词性标注接口
import java.util.ArrayList;
import java.util.List;
import edu.hit.ir.ltp4j.Postagger;
public class TestPostag {
public static void main(String[] args) {
if (Postagger.create("ltp_data/pos.model") < 0) {
System.err.println("load failed");
return;
}
List<String> words = new ArrayList<String>();
words.add("我");
words.add("是");
words.add("中国");
words.add("人");
List<String> postags = new ArrayList<String>();
int size = Postagger.postag(words, postags);
for (int i = 0; i < size; i++) {
System.out.print(words.get(i) + "_" + postags.get(i));
if (i == size - 1) {
System.out.println();
} else {
System.out.print("|");
}
}
Postagger.release();
}
}
命名实体识别接口
import java.util.ArrayList;
import java.util.List;
import edu.hit.ir.ltp4j.NER;
public class TestNer {
public static void main(String[] args) {
if (NER.create("ltp_data/ner.model") < 0) {
System.err.println("load failed");
return;
}
List<String> words = new ArrayList<String>();
List<String> tags = new ArrayList<String>();
List<String> ners = new ArrayList<String>();
words.add("中国");
tags.add("ns");
words.add("国际");
tags.add("n");
words.add("广播");
tags.add("n");
words.add("电台");
tags.add("n");
words.add("创办");
tags.add("v");
words.add("于");
tags.add("p");
words.add("1941年");
tags.add("m");
words.add("12月");
tags.add("m");
words.add("3日");
tags.add("m");
words.add("。");
tags.add("wp");
NER.recognize(words, tags, ners);
for (int i = 0; i < words.size(); i++) {
System.out.println(ners.get(i));
}
NER.release();
}
}
依存句法分析接口
import java.util.ArrayList;
import java.util.List;
import edu.hit.ir.ltp4j.parser;
public class TestParser {
public static void main(String[] args) {
if (Parser.create("ltp_data/parser.model") < 0) {
System.err.println("load failed");
return;
}
List<String> words = new ArrayList<String>();
List<String> tags = new ArrayList<String>();
words.add("一把手");
tags.add("n");
words.add("亲自");
tags.add("d");
words.add("过问");
tags.add("v");
words.add("。");
tags.add("wp");
List<integer> heads = new ArrayList<Integer>();
List<String> deprels = new ArrayList<String>();
int size = Parser.parse(words, tags, heads, deprels);
for (int i = 0; i < size; i++) {
System.out.print(heads.get(i) + ":" + deprels.get(i));
if (i == size - 1) {
System.out.println();
} else {
System.out.print(" ");
}
}
Parser.release();
}
}
语义角色标注接口
import java.util.ArrayList;
import java.util.List;
import edu.hit.ir.ltp4j.Pair;
import edu.hit.ir.ltp4j.SRL;
public class TestSrl {
public static void main(String[] args) {
SRL.create("ltp_data/srl");
ArrayList<String> words = new ArrayList<String>();
words.add("一把手");
words.add("亲自");
words.add("过问");
words.add("。");
ArrayList<String> tags = new ArrayList<String>();
tags.add("n");
tags.add("d");
tags.add("v");
tags.add("wp");
ArrayList<String> ners = new ArrayList<String>();
ners.add("O");
ners.add("O");
ners.add("O");
ners.add("O");
ArrayList<Integer> heads = new ArrayList<Integer>();
heads.add(2);
heads.add(2);
heads.add(-1);
heads.add(2);
ArrayList<String> deprels = new ArrayList<String>();
deprels.add("SBV");
deprels.add("ADV");
deprels.add("HED");
deprels.add("WP");
List<Pair<Integer, List<Pair<String, Pair<Integer, Integer>>>>> srls = new ArrayList<Pair<Integer, List<Pair<String, Pair<Integer, Integer>>>>>();
SRL.srl(words, tags, ners, heads, deprels, srls);
System.out.println(srls.size());
for (int i = 0; i < srls.size(); ++i) {
System.out.println(srls.get(i).first + ":");
for (int j = 0; j < srls.get(i).second.size(); ++j) {
System.out.println(" tpye = " + srls.get(i).second.get(j).first + " beg = "
+ srls.get(i).second.get(j).second.first + " end = " + srls.get(i).second.get(j).second.second);
}
}
SRL.release();
}
}
相关阅读
所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据类型
1.1 java概述Java是一种特殊的解释型语言(编译型语言:在程序执行前,有一个单独的过程,将程序直接编译成机器语言,以后运行时都不用再
Javac编译器是把 *.java 文件转换为 *.class 文件,是一个前端编译器;对应着有一种把字节码转变为机器码的编译器,称为JIT编译器(Jus
Java中有三种移位运算符 << : 左移运算符,0001 << 1,结果是0010 >> : 右移运算符,0010 >> 1,结果是0
作者:知乎用户链接:https://www.zhihu.com/question/37601861/answer/145545371来源:知乎著作权归作者所有。商业转载请联系作者获得