陈同学将hanlp做成了服务:https://gitee.com/Erichan/EngineerCMS-HanLPService

用golang应用提交文字给这个hanlp服务,返回json数据格式的依存句法分析结果。

//这个是专门解析json的
package mainimport ("encoding/json""fmt""log""net/url""github.com/astaxie/beego/httplib"
)type Dict struct {SBV []HanlpJsonVOB []HanlpJsonIOB []HanlpJsonFOB []HanlpJsonDBL []HanlpJsonATT []HanlpJsonADV []HanlpJsonCMP []HanlpJsonCOO []HanlpJsonPOB []HanlpJsonLAD []HanlpJsonRAD []HanlpJsonIS  []HanlpJsonHED []HanlpJson
}type HanlpResult struct {Result HanlpWord `json:"result"`
}type HanlpWord struct {Word []HanlpJson `json:"word"`
}//用于json数据解析
type HanlpJson struct {ID      int64LEMMA   stringCPOSTAG stringPOSTAG  stringHEAD    JsonDEPREL  stringNAME    string
}type Json struct {ID      int64LEMMA   stringCPOSTAG stringPOSTAG  stringDEPREL  stringNAME    string
}type Ltp2 struct {Ltptwo []Ltp1
}type Ltp1 struct { //这个办法不行,保留!Ltpone []Ltp
}type Ltp struct {Id        int64  `json:"id"`Cont      string `json:"cont"`Pos       string `json:"pos"`Ne        string `json:"ne"`Parent    int64  `json:"parent"`Relate    string `json:"relate"`Semparent int64  `json:"semparent"`Semrelate string `json:"semrelate"`Arg       []Arg1 `json:"arg"`Sem       []Sem1 `json:"sem"`
}type Sem1 struct {Id     int64  `json:"id"`Parent int64  `json:"parent"`Relate string `json:"relate"`
}type Arg1 struct {Id   int64  `json:"id"`Type string `json:"type"`Beg  int64  `json:"beg"`End  int64  `json:"end"`
}func main() {link := url.QueryEscape("输水干线从佛山市顺德区杏坛镇西江干流中央的鲤鱼洲岛端部取水")req := httplib.Post("http://localhost:8888/max?sentence=" + link)str, err := req.String()if err != nil {log.Fatal(err)}//   fmt.Println(str)//json字符串解析到结构体var hanlpresult HanlpResulterr = json.Unmarshal([]byte(str), &hanlpresult)if err != nil {log.Fatal(err)}// fmt.Println(hanlpresult.Result.Word)hanlp := hanlpresult.Result.Worddict := make([]Dict, 0)for _, w := range hanlp {dict1 := make([]Dict, 1)for _, x := range hanlp {if w.ID == x.HEAD.ID {list1 := make([]HanlpJson, 1)list1[0] = xswitch x.DEPREL {case "主谓关系":dict1[0].SBV = list1case "动宾关系":dict1[0].VOB = list1case "间宾关系":dict1[0].IOB = list1case "前置宾语":dict1[0].FOB = list1case "兼语":dict1[0].DBL = list1case "定中关系":dict1[0].ATT = list1case "状中结构":dict1[0].ADV = list1case "动补结构":dict1[0].CMP = list1case "并列关系":dict1[0].COO = list1case "介宾关系":dict1[0].POB = list1case "左附加关系":dict1[0].LAD = list1case "右附加关系":dict1[0].RAD = list1case "独立结构":dict1[0].IS = list1case "核心关系":dict1[0].HED = list1}//              bb = make([]Hanlp, 0)}}dict = append(dict, dict1...)}//   fmt.Println(dict)for i := 0; i < len(dict); i++ {extract(hanlp, dict, i)}
}func extract(hanlp []HanlpJson, dict []Dict, i int) {w := hanlp[i]ww := dict[i]//主谓宾关系:刘小绪生于四川if len(ww.SBV) > 0 && len(ww.VOB) > 0 {entity1 := ww.SBV[0].LEMMA// 排除:刘小绪和李华是朋友prep := ww.SBV[0]prepIndex := prep.ID - 1prepDict := dict[prepIndex] //这个写法注意,当做dict数组的索引和它ID是一致的if len(prepDict.COO) > 0 {relation := ww.VOB[0].LEMMAentity2 := prepDict.COO[0].LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)} else {entity2 := ww.VOB[0].LEMMArelation := w.LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)}}// 动补结构:刘小绪洗干净了衣服//"主谓关系"]//"动宾关系"]//"动补结构"]if len(ww.SBV) > 0 && len(ww.VOB) > 0 && len(ww.CMP) > 0 {entity1 := ww.SBV[0].LEMMAcomplement := ww.CMP[0].LEMMAentity2 := ww.VOB[0].LEMMAif len(ww.RAD) > 0 { //右附加关系subjoin := ww.RAD[0].LEMMArelation := w.LEMMA + complement + subjoinfmt.Println(entity1 + "," + relation + "," + entity2)} else {relation := w.LEMMA + complementfmt.Println(entity1 + "," + relation + "," + entity2)}}//定中关系if len(ww.ATT) > 0 {entity1 := ww.ATT[0].LEMMArelation := w.LEMMAfor _, ii := range dict { //这里要用dict maps数组//"主谓关系"]//"动宾关系"]if len(ii.SBV) > 0 && len(ii.VOB) > 0 {if ii.SBV[0].LEMMA == relation {entity2 := ii.VOB[0].LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)}}}}// 状动结构:父亲非常喜欢跑步// 非常 是 跑步的状语,关系应该为非常喜欢//"主谓关系"]//动宾关系"]//"状中结构"]if len(ww.SBV) > 0 && len(ww.VOB) > 0 && len(ww.ADV) > 0 {entity1 := ww.SBV[0].LEMMAadverbial := ww.ADV[0].LEMMAentity2 := ww.VOB[0].LEMMArelation := adverbial + w.LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)}// 状动补结构//"主谓关系"]//"动宾关系"]//"状中结构"]//"动补结构"]if len(ww.SBV) > 0 && len(ww.VOB) > 0 && len(ww.ADV) > 0 && len(ww.CMP) > 0 {entity1 := ww.SBV[0].LEMMAadverbial := ww.ADV[0].LEMMAcomplement := ww.CMP[0].LEMMAentity2 := ww.VOB[0].LEMMArelation := adverbial + w.LEMMA + complementfmt.Println(entity1 + "," + relation + "," + entity2)}// 定语后置:父亲是来自肯尼亚的留学生if w.DEPREL == "定中关系" {if len(ww.VOB) > 0 {entity1 := hanlp[w.HEAD.ID-1].LEMMArelation := w.LEMMAentity2 := ww.VOB[0].LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)}}// 介宾关系:刘小绪就职于学校// 于 和 学校 是介宾关系//"主谓关系"]//"动补结构"]if len(ww.SBV) > 0 && len(ww.CMP) > 0 {entity1 := ww.SBV[0].LEMMAprep := ww.CMP[0] //maps["动补结构"][0]prepIndex := prep.ID - 1prepDict := dict[prepIndex] //这个写法注意,当做dict数组的索引和它ID是一致的if len(prepDict.POB) > 0 {entity2 := prepDict.POB[0].LEMMA //"介宾关系"][0]relation := w.LEMMA + prep.LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)}}// 宾语前置结构:海洋由水组成if len(ww.FOB) > 0 {entity2 := ww.FOB[0].LEMMA //maps["前置宾语"][0]if len(ww.ADV) > 0 {adverbial := ww.ADV[0] //maps["状中结构"][0]prepIndex := adverbial.ID - 1prepDict := dict[prepIndex]if len(prepDict.POB) > 0 {entity1 := prepDict.POB[0].LEMMArelation := w.LEMMAfmt.Println(entity1 + "," + relation + "," + entity2)}}}
}

golang知识图谱NLP实战第四节——关系抽取完善逻辑相关推荐

  1. golang知识图谱NLP实战第一节——整体思路

    golang知识图谱NLP实战第一节--整体思路 golang知识图谱NLP实战第二节--解析依存句法分析结果 golang知识图谱NLP实战第三节--关系抽取 最大的愿望是给engineercms工 ...

  2. 知识图谱从哪儿来?实体关系抽取的现状和未来

    12月17日晚,2019年清华特奖获得者之一,清华大学自然语言处理实验室大四本科生高天宇,在智源论坛Live第1期,以<实体关系抽取的现状和未来>为主题,与150位观众进行了在线交流.本文 ...

  3. 技术动态 | 知识图谱从哪里来:实体关系抽取的现状与未来

    本文作者为:韩旭.高天宇.刘知远.转载自刘知远老师的知乎专栏,文章链接:https://zhuanlan.zhihu.com/p/91762831 最近几年深度学习引发的人工智能浪潮席卷全球,在互联网 ...

  4. 知识图谱从哪里来:实体关系抽取的现状与未来

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 最近几年深度学习引发的人工智能浪潮席卷全球,在互联网普及带来的海量数据资源和摩尔定律支 ...

  5. 知识图谱开发实战案例剖析_我从剖析Web开发人员路线图中学到的知识

    知识图谱开发实战案例剖析 by Nicole Archambault 妮可·阿坎巴特(Nicole Archambault) 我从剖析Web开发人员路线图中学到的知识 (What I learned ...

  6. 研讨会 | “人工智能与行业知识图谱技术实战”研讨会

    人工智能时代 2017年7月,国务院<新一代人工智能发展规划>明确提出"建立新一代人工智能关键共性技术体系"的重点任务和设立"新一代人工智能重大科技项目以及& ...

  7. 超详细的golang学习指南,golang知识图谱

    golang知识图谱 基础知识 go 语言关键字.标识符.数据类型.变量.流程控制.函数.数组.闭包 关键字 break - 使用break关键字可以终止循环并继续执行其余代码 case - 这是sw ...

  8. 知识图谱可视化——《间客》人物关系

    知识图谱可视化--<间客>人物关系 借鉴echarts的<间客>人物关系案例完成了知识图谱可视化. 存在疑问是: 1.如何将图谱可视化体现业务价值? 2.如何结合QA问答交互, ...

  9. 知识图谱应用实战案例100篇(一)-阿里巴巴超大规模知识图谱预训练实践:商品分类

    基于电子商务平台上亿级的庞大商品库,电子商务交易得以不断增长. 为了更好地支持日常业务,需要将这些海量的商品以一种更优的方式进行描述.存储和计算,并且需要支持融合不同来源的数据,建立实体之间的语义连接 ...

最新文章

  1. 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)
  2. vue中的axios封装
  3. Cell子刊:MRI有助于揭示睡眠之谜
  4. java中VO、PO、DTO 、DO、POJO、BO、TO
  5. jmeter之关联操作
  6. IE6 IE8下背景图片不显示问题
  7. android拍照功能无预览,Android 无预览拍照
  8. getwayworker timer_Java定时器之Timer学习二
  9. Linux内核中TCP协议实现的关键数据结构
  10. c语言函数指针学习心得,c语言 函数指针 学习C语言笔记
  11. BZOJ 2431: [HAOI2009]逆序对数列( dp )
  12. Linux 下安装python3
  13. APP软件下载导航站源码+带后台版/亲测可用
  14. 《天才在左,疯子在右》读后感
  15. 这图怎么画| 相关性热图+柱状图
  16. oracle配置odbc数据源
  17. 身价10亿的打工皇帝-唐骏
  18. 中国剩余定理和扩展中国剩余定理
  19. Lifekeeper Linux
  20. deepin linux装机指南

热门文章

  1. 计算机毕业设计Java学校旧书交易网站(源码+系统+mysql数据库+lw文档)
  2. [收藏]VS2008下载(包含中文MSDN)序列号 破解版
  3. 如今互联网时代,必须学习黑客的思维模式
  4. iOS 歌词解析(lrc, 非谓词, 仿QQ音乐, 仿卡拉ok模式)
  5. 计算机与网络工程教学大纲,《网络工程与智能综合布线》教学大纲
  6. 列表过滤(百度搜索框用vue来实现)
  7. 2022年PMP认证6月考试,保证通过,拿到PMP认证就能月入5万
  8. 判断网站是哪种数据库
  9. matlab代码搜集网站,欢迎补充
  10. 面对工作生活“叠加态”,我们应该如何应对?