1.HanLP GitHub路径:https://github.com/hankcs/HanLP
2.剖析HanLP依存句法分析的功能(基于神经网络依存句法分析器)
HanLP中有很多句法分析器,结构如下:
句法分析器接口:
/**
* 依存句法分析器接口
*
* @author hankcs
*/
public interface IDependencyParser
{
/**
* 分析句子的依存句法
*
* @param termList 句子,可以是任何具有词性标注功能的分词器的分词结果
* @return CoNLL格式的依存句法树
*/
CoNLLSentence parse(List<Term> termList);
/**
* 分析句子的依存句法
*
* @param sentence 句子
* @return CoNLL格式的依存句法树
*/
CoNLLSentence parse(String sentence);
/**
* 获取Parser使用的分词器
*
* @return
*/
Segment getSegment();
/**
* 设置Parser使用的分词器
*
* @param segment
*/
IDependencyParser setSegment(Segment segment);
/**
* 获取依存关系映射表
*
* @return
*/
Map<String, String> getDeprelTranslator();
/**
* 设置依存关系映射表
*
* @param deprelTranslator
*/
IDependencyParser setDeprelTranslator(Map<String, String> deprelTranslator);
/**
* 依存关系自动转换开关
* @param enable
*/
IDependencyParser enableDeprelTranslator(boolean enable);
}
简单的实例:
/**
* 依存句法分析(神经网络句法模型需要-Xms1g -Xmx1g -Xmn512m)
* @author hankcs
*/
public class DemoDependencyParser
{
public static void main(String[] args)
{
CoNLLSentence sentence = HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。");
System.out.println(sentence);
// 可以方便地遍历它
for (CoNLLWord word : sentence)
{
System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
}
// 也可以直接拿到数组,任意顺序或逆序遍历
CoNLLWord[] wordArray = sentence.getWordArray();
for (int i = wordArray.length - 1; i >= 0; i--)
{
CoNLLWord word = wordArray[i];
System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
}
// 还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根
CoNLLWord head = wordArray[12];
while ((head = head.HEAD) != null)
{
if (head == CoNLLWord.ROOT) System.out.println(head.LEMMA);
else System.out.printf("%s --(%s)--> ", head.LEMMA, head.DEPREL);
}
}
}
运行结果如下:
1 徐先生 徐先生 nh nr _ 4 主谓关系 _ _
2 还 还 d d _ 4 状中结构 _ _
3 具体 具体 a a _ 4 状中结构 _ _
4 帮助 帮助 v v _ 0 核心关系 _ _
5 他 他 r rr _ 4 兼语 _ _
6 确定 确定 v v _ 4 动宾关系 _ _
7 了 了 u ule _ 6 右附加关系 _ _
8 把 把 p pba _ 15 状中结构 _ _
9 画 画 v v _ 8 介宾关系 _ _
10 雄鹰 雄鹰 n n _ 9 动宾关系 _ _
11 、 、 wp w _ 12 标点符号 _ _
12 松鼠 松鼠 n n _ 10 并列关系 _ _
13 和 和 c cc _ 14 左附加关系 _ _
14 麻雀 麻雀 n n _ 10 并列关系 _ _
15 作为 作为 p p _ 6 动宾关系 _ _
16 主攻 主攻 v v _ 17 定中关系 _ _
17 目标 目标 n n _ 15 动宾关系 _ _
18 。 。 wp w _ 4 标点符号 _ _
徐先生 --(主谓关系)--> 帮助
还 --(状中结构)--> 帮助
具体 --(状中结构)--> 帮助
帮助 --(核心关系)--> ##核心##
他 --(兼语)--> 帮助
确定 --(动宾关系)--> 帮助
了 --(右附加关系)--> 确定
把 --(状中结构)--> 作为
画 --(介宾关系)--> 把
雄鹰 --(动宾关系)--> 画
、 --(标点符号)--> 松鼠
松鼠 --(并列关系)--> 雄鹰
和 --(左附加关系)--> 麻雀
麻雀 --(并列关系)--> 雄鹰
作为 --(动宾关系)--> 确定
主攻 --(定中关系)--> 目标
目标 --(动宾关系)--> 作为
。 --(标点符号)--> 帮助
。 --(标点符号)--> 帮助
目标 --(动宾关系)--> 作为
主攻 --(定中关系)--> 目标
作为 --(动宾关系)--> 确定
麻雀 --(并列关系)--> 雄鹰
和 --(左附加关系)--> 麻雀
松鼠 --(并列关系)--> 雄鹰
、 --(标点符号)--> 松鼠
雄鹰 --(动宾关系)--> 画
画 --(介宾关系)--> 把
把 --(状中结构)--> 作为
了 --(右附加关系)--> 确定
确定 --(动宾关系)--> 帮助
他 --(兼语)--> 帮助
帮助 --(核心关系)--> ##核心##
具体 --(状中结构)--> 帮助
还 --(状中结构)--> 帮助
徐先生 --(主谓关系)--> 帮助
麻雀 --(并列关系)--> 雄鹰 --(动宾关系)--> 画 --(介宾关系)--> 把 --(状中结构)--> 作为 --(动宾关系)--> 确定
各类关系的解释:
注意:在运行的前需要设定VM options为 -Xms768m -Xmx768m -XX:PermSize=64M -XX:MaxPermSize=512m(使用的是IDEA开发工具)