画语义树

工具:
Hanlp 包
Dependence Viewer 小程序
(参考于自然语言处理 依存树的可视化
效果:
在这里插入图片描述

一,在Java中导入Hanlp包

网上资料

Hanlp官网介绍(有导入教程与使用方法)
直接跳转到官网分开下载 data 和 hanlp(ctrl+f 找到 data)
菜鸟如何使用Hanlp
HanLP自然语言处理包开源
HanLP使用
我的笔记:

(1)下载hanlp-1.7.3以及data-for-1.7.3

注意这是两个压缩包,官网好像会把这两个包压缩在一个包里。我把这两个文件上传到百度云了,但是我的 data 包莫名大,如果能从官网下就不要用我的。提取码:dxtq

(2)导入jar包

打开eclipse,创建一个项目,右击项目选择Build Path >Add External Achives…
在这里插入图片描述
在弹出的文件夹里找到hanlp-1.7.3`的解压文件夹,点击hanlp-1.7.3。
在这里插入图片描述

(3)建立寻找 data 路径

在scr里创建主类之后,再在主类的同一级别创建file文档,命名hanlp.propertise,然后在文档里输入

root = E:\eclipse  

在这里插入图片描述
路径 E:\eclipse 是data解压后的文件夹的位置(不包含data本身)。然后在保存主类的文件夹下面依次找到这个file文档,复制粘贴到 bin 目录中。
在这里插入图片描述

注:如果这样子程序还是发生找不到 data 路径异常,那就干脆把整个data文件夹移动到该项目目录中好了(就是那么粗暴哈哈)

二,在主类中编程

网上资料
基于神经网络的高性能依存句法分析器
汉语树库(evsam05)

我的笔记:

(1)利用 hanlp 获得 conll 的格式

在主类中输入以下代码,具体用法参照网上资料,这里先不多说了。

package do_hanlp;
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLSentence;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord;
public class my_one {

	public static void main(String[] args) {
		
	    CoNLLSentence coNLLSentence=HanLP.parseDependency("不知道怎么导入自定义词典文件,"
	    		+ "想把一个文本转换但是file没学好。。不知道这个是不是语义树哈哈一问三不知");
	    System.out.println(coNLLSentence);

//	    int i=1;
//	    for(CoNLLWord word:coNLLSentence) {
//	    	System.out.printf("%d---%s---(%s)---%s---%s\n",i,
//	    			word.LEMMA,word.DEPREL,word.HEAD.LEMMA,word.HEAD.DEPREL);
//	    i++;
//	    }
		System.out.println();
	}
}

运行,得到正确的 conll 格式文本。
在这里插入图片描述

(2)新建文本文档

注意,要求使用以下应用程序打开,否则可能会出现字符识别不出的情况。打开后,将运行成功的文本复制粘贴,然后保存。
在这里插入图片描述

三,在 Dependence View 中画树

网上资料
依存可视化︱Dependency Viewer——南京大学自然语言处理研究组
Dependency Viewer 官址 (非常感谢提供了如此方便的工具)

我的笔记:

(1)下载 Dependence View

应用程序网盘:提取码:snm4

(2)在 Dependence View 中依次点击 File > Read Conll File,点击刚刚创建的文本文档。即可看到自己的树树树树树啦哈哈哈哈啊哈哈。
在这里插入图片描述

四,关于语义树

(1)conll 文件

格式
———————————————————————————
ID FORM LEMMA CPOSTAG POSTAG FEATS HEAD DEPREL PHEAD PDEPREL
———————————————————————————
只用到前8列,其含义分别为:

1 ID 当前词在句子中的序号,1开始.
2 FORM 当前词语或标点
3 LEMMA 当前词语(或标点)的原型或词干,在中文中,此列与FORM相同
4 CPOSTAG 当前词语的词性(粗粒度)
5 POSTAG 当前词语的词性(细粒度)
6 FEATS 句法特征,在本次评测中,此列未被使用,全部以下划线代替。
7 HEAD 当前词语的中心词
8 DEPREL 当前词语与中心词的依存关系

在CONLL格式中,每个词语占一行,无值列用下划线’_‘代替,列的分隔符为制表符’\t’,行的分隔符为换行符’\n’;句子与句子之间用空行分隔。
在这里插入图片描述

(2)依存关系语法

自然语言处理4 – 句法分析

依存关系标识

句法依存关系接口可以解析出的依存关系标识如下:

1.定中关系ATT

定中关系就是定语和中心词之间的关系,定语对中心词起修饰或限制作用。

如:工人/n师傅/n(工人/n ← 师傅/n)。

2. 数量关系QUN(quantity)

数量关系是指量词或名词同前面的数词之间的关系,该关系中,数词作修饰成分,依存于量词或名词。

如:三/m天/q(三/m ← 天/q)。

3.并列关系COO(coordinate)

并列关系是指两个相同类型的词并列在一起。

如:奔腾/v咆哮/v的怒江激流(奔腾/v → 咆哮/v)。

4.同位关系APP(appositive)

同位语是指所指相同、句法功能也相同的两个并列的词或词组。

如:我们大家 (我们 → 大家)。

5.附加关系ADJ(adjunct)

附加关系是一些附属词语对名词等成分的一种补充说明,使意思更加完整,有时候去掉也不影响意思。

如:约/d 二十/m 多/m 米/q 远/a 处/n (二十/m → 多/m,米/q → 远/a)。

6.动宾关系VOB(verb-object)

对于动词和宾语之间的关系我们定义了两个层次,一是句子的谓语动词及其宾语之间的关系,我们定为OBJ,在下面的单句依存关系中说明;二是非谓语动词及其宾语的关系,即VOB。这两种关系在结构上没有区别,只是在语法功能上,OBJ中的两个词充当句子的谓语动词和宾语,VOB中的两个词构成动宾短语,作为句子的其他修饰成分。

如:历时/v 三/m 天/q 三/m夜/q(历时/v → 天/q)。

7.介宾关系POB(preposition-object)

介词和宾语之间的关系,介词的属性同动词相似。

如:距/p球门/n(距/p → 球门/n)。

8.主谓关系SBV(subject-verb)

主谓关系是指名词和动作之间的关系。

如:父亲/n 逝世/v 10/m 周年/q 之际/nd(父亲/n ← 逝世/v)。

9.比拟关系SIM(similarity)

比拟关系是汉语中用于表达比喻的一种修辞结构。

如:炮筒/n 似的/u 望远镜/n(炮筒/n ← 似的/u)。

10.时间关系TMP(temporal)

时间关系定义的是时间状语和其所修饰的中心动词之间的关系。

如:十点以前到公司(以前 ← 到)。

11.处所关系LOC(locative)

处所关系定义的是处所状语和其所修饰的中心动词之间的关系,如:在公园里玩耍(在 ← 玩耍)。

12.“的”字结构DE

“的”字结构是指结构助词“的”和其前面的修饰语以及后面的中心词之间的关系。

如:上海/ns 的/u 工人/n(上海/ns ← 的/u,的/u ← 工人/n)。

13.“地”字结构DI

“地”字结构在构成上同DE类似,只是在功能上不同,DI通常作状语修饰动词。

如: 方便/a 地/u 告诉/v 计算机/n(方便/a ← 地/u,地/u ← 告诉/v)。

14.“得”字结构DEI

助词“得”同其后的形容词或动词短语等构成“得”字结构,对前面的动词进行补充说明。

如:讲/v 得/u 很/d 对/a(讲/v → 得/u,得/u → 对/a)。

15.“所”字结构SUO

“所”字为一结构助词,后接一宾语悬空的动词做“的”字结构的修饰语,“的”字经常被省略,使结构更加简洁。

如:机电/b 产品/n 所/u 占/v 比重/n 稳步/d 上升/v(所/u ← 占/v)。

16.“把”字结构BA

把字句是主谓句的一种,句中谓语一般都是及物动词。

如:我们把豹子打死了(把/p → 豹子/n)。

17.“被”字结构BEI

被字句是被动句,是主语接受动作的句子。

如:豹子被我们打死了(豹子/n ← 被/p)。

18.状中结构ADV(adverbial)

状中结构是谓词性的中心词和其前面的修饰语之间的关系,中心词做谓语时,前面的修饰成分即为句子的状语,中心词多为动词、形容词,修饰语多为副词,介词短语等。

如:连夜/d 安排/v 就位/v(连夜/d ← 安排/v)。

19.动补结构CMP(complement)

补语用于对核心动词的补充说明。

如:做完了作业(做/v → 完)。

20.兼语结构DBL(double)

兼语句一般有两个动词,第二个动词是第一个动作所要表达的目的或产生的结果。

如:[7]曾经/d [8]使/v [9]多少/r [10]旅游/n [11]人/n [12]隔/v [13]岸/n [14]惊叹/v [15]!/wp(使 → 人/n ,/v使/v → 惊叹/v)。

21.关联词CNJ(conjunction)

关联词语是复句的有机部分。

如:只要他请客,我就来。(只要 ← 请 ,就 ← 来)。

22.关联结构 CS(conjunctive structure)

当句子中存在关联结构时,关联词所在的两个句子(或者两个部分)之间通过各部分的核心词发生依存关系CS。

如:只要他请客,我就来。(请 ← 来)。

23.语态结构MT(mood-tense)

汉语中,经常用一些助词表达句子的时态和语气,这些助词分语气助词,如:吧,啊,呢等;还有时态助词,如:着,了,过。

如: [12]答应/v [13]孩子/n [14]们/k [15]的/u [16]要求/n [17]吧/u [18],/wp [19]他们/r [20]这/r [21]是/v [22]干/v [23]事业/n [24]啊/u [25]!/wp([12]答应/v ← [17]吧/u,[21]是/v ← [24]啊/u)。

24.连谓结构VV(verb-verb)

连谓结构是同多项谓词性成分连用、这些成分间没有语音停顿、书面标点,也没有关联词语,没有分句间的逻辑关系,且共用一个主语。

如:美国总统来华访问。(来华/v → 访问/v)。

25.核心HED(head)

该核心是指整个句子的核心,一般是句子的核心词和虚拟词(或ROOT)的依存关系。

如:这/r 就是/v恩施/ns最/d]便宜/a的/u出租车/n,/wp相当于/v北京/ns的/u “/wp 面的/n ”/wp 。/wp /(就是/v ← /)

26.前置宾语FOB(fronting object)

在汉语中,有时将句子的宾语前置,或移置句首,或移置主语和谓语之间,以起强调作用,我认识这个人 ← 这个人我认识。

如:他什么书都读(书/n ← 读/v)。

27.双宾语DOB(double object)

动词后出现两个宾语的句子叫双宾语句,分别是直接宾语和间接宾语。

如:我送她一束花。(送/v → 她/r,送/v → 花/n)。

28.主题TOP(topic)

在表达中,我们经常会先提出一个主题性的内容,然后对其进行阐述说明;而主题部分与后面的说明部分并没有直接的语法关系,主题部分依存于后面的核心成分,且依存关系为TOP。

如:西直门,怎么走?(西直门 ← 走)。

29.独立结构IS(independent structure)

独立成分在句子中不与其他成分产生结构关系,但意义上又是全句所必需的,具有相对独立性的一种成分。

如:事情明摆着,我们能不管吗?

30.独立分句IC(independent clause)

两个单句在结构上彼此独立,都有各自的主语和谓语。

如:我是中国人,我们爱自己的祖国。(是 → 爱)

31.依存分句DC(dependent clause)

两个单句在结构上不是各自独立的,后一个分句的主语在形式上被省略,但不是前一个分句的主语,而是存在于前一个分句的其他成分中,如宾语、主题等成分。规定后一个分句的核心词依存于前一个分句的核心词。该关系同连谓结构的区别是两个谓词是否为同一主语,如为同一主语,则为VV,否则为DC。

如:大家/r叫/v 它/r “/wp 麻木/a 车/n ”/wp ,/wp 听/v起来/v 怪怪的/a 。/wp(叫/v → 听/v)。

32.叠词关系VNV (verb-no-verb or verb-one-verb)

如果叠词被分开了,如“是 不 是”、“看一看”,那么这几个词先合并在一起,然后预存到其他词上,叠词的内部关系定义为:(是1→不;不→是2) 。

33.一个词YGC

当专名或者联绵词等切散后,他们之间本身没有语法关系,应该合起来才是一个词。如:百 度。

34.标点 WP

大部分标点依存于其前面句子的核心词上,依存关系WP。
在这里插入图片描述

附言:在网上找了个接口,改天慢慢研究。

package do_hanlp;
import java.util.List;
import java.util.Map;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLSentence;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;
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);
}
版权声明:本文为weixin_44014654原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44014654/article/details/90075551