golang知识图谱NLP实战第二节——解析依存句法分析结果
最大的愿望是给engineercms工程师知识管理系统添加人工智能——知识图谱功能
它包含了自然语言处理(NLP)的十大任务里的几项(Salesforce总结的十大任务,简单来说包括:问答、机器翻译、摘要、自然语言推理、情感分析、语义角色标注、关系抽取、目标导向对话、语义分析、常识代词消解。)
最最简单的可操作的实现方式如下:
(1)基于依存句法分析的开放式中文实体关系抽取https://blog.csdn.net/heuguangxu/article/details/80088489
较复杂的如下:
最简单的实现思路为:
给定文章(一段文字)——a用hanlp进行依存句法解析——b用上述(1)方法提取关系——c存入图数据库dgraph——d查询得到关系图谱……
下图是dgraph展示的关系数据查询效果(另外文章记录dgraph的docker安装和使用)
上文思路中,最最麻烦的是关系提取,其实还包含了实体确定吧,最近看得晕……但是上文(1)采用简化处理,就不去纠结了。
当然,一些人的观点我很赞同,这些算法都是有现成的代码,已经实现了,问题是我们组装起来,在自己系统里集成,去实现它们一整套流程……
下面是hanlp的安装和使用:目的就是上文思路的a步骤,提取句子的依存关系,基于《基于神经网络的高性能依存句法分析器》
(6)hanlp的基本使用--python(自然语言处理)https://www.cnblogs.com/ybf-yyj/p/7801429.html
提取出了依存关系如下图:
package engineercms;
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLSentence;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord;
public class TestHanlp {
public static void main(String[] args) {
System.out.println(HanLP.segment("你好,欢迎使用HanLP!"));
System.out.println(HanLP.parseDependency("李白的诗有哪些?"));
System.out.println(HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。"));
String text = "算法工程师n 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法工程师就是利用算法处理事物的人。n n 1职位简介n 算法工程师是一个非常高端的职位;n 专业要求:计算机、电子、通信、数学等相关专业;n 学历要求:本科及其以上的学历,大多数是硕士学历及其以上;n 语言要求:英语要求是熟练,基本上能阅读国外专业书刊;n 必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。nn2研究方向n 视频算法工程师、图像处理算法工程师、音频算法工程师 通信基带算法工程师n n 3目前国内外状况n 目前国内从事算法研究的工程师不少,但是高级算法工程师却很少,是一个非常紧缺的专业工程师。算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。n 在计算机音视频和图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。n 在通信物理层等一维信息领域目前常用的算法:无线领域的RRM、RTT,传送领域的调制解调、信道均衡、信号检测、网络优化、信号分解等。n 另外数据挖掘、互联网搜索算法也成为当今的热门方向。n";
System.out.println(HanLP.extractPhrase(text, 10));
CoNLLSentence sentence = HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。");
for (CoNLLWord word : sentence)
{
System.out.printf("%s --(%s)--> %sn", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
}
}
}
下一步参考文章(1)进行关系提取,存入图数据库。
当然,依存句法的实现有很多api接口可用,比如baiduai……但是想集成到系统内,还是找现成开源的。
问题是没有go语言的类似hanlp的工具。dgraph是go语言的,但是也需要在docker中运行。