漫談·知識圖譜

1、關係抽取

1.1 專家系統

  • 以兩家公司有 投資 關係爲例
key_words = ["收購","競拍","轉讓","擴張","併購","注資","整合","併入","競購","競買","支付","收購價","收購價格","承購","購得","購進",
             "購入","買進","買入","贖買","購銷","議購","函購","函售","拋售","售賣","銷售","轉售"]

1.2 句法依存

  • 根據人的說話習慣來抽取
  • 主謂賓
if 'SBV' in child_dict and 'VOB' in child_dict:
	r = words[index]
	e1 = complete_e(words, postags, child_dict_list, child_dict['SBV'][0])
	e2 = complete_e(words, postags, child_dict_list, child_dict['VOB'][0])
	svos.append([e1, r, e2])

1.3 遠程監督

在這裏插入圖片描述

2、知識圖譜的常見表示(Neo4j)

2.1 數據

字段 描述
Person_a 實體a(人名,如:賈寶玉)
Person_b 實體b(人名,如:薛寶釵)
Relation 實體間關係(丈夫)
Family_a 實體a的家族(賈家榮國府)
Family_b 實體b的家族(薛家)

2.2 導入

with open("./raw_data/relation.txt") as f:
    for line in f.readlines():
        rela_array=line.strip("\n").split(",")
        print(rela_array)
        graph.run("MERGE(p: Person{cate:'%s',Name: '%s'})"%(rela_array[3],rela_array[0]))
        graph.run("MERGE(p: Person{cate:'%s',Name: '%s'})" % (rela_array[4], rela_array[1]))
        graph.run(
            "MATCH(e: Person), (cc: Person) \
            WHERE e.Name='%s' AND cc.Name='%s'\
            CREATE(e)-[r:%s{relation: '%s'}]->(cc)\
            RETURN r" % (rela_array[0], rela_array[1], rela_array[2], rela_array[2])
        )

2.3 查詢

match(p )-[r]->(n:Person{Name:'%s'}) return  p.Name,r.relation,n.Name,p.cate,n.cate Union all match(p:Person {Name:'%s'}) -[r]->(n) return p.Name, r.relation, n.Name, p.cate, n.cate

2.4 效果

  • 賈寶玉 的關係圖譜
    在這裏插入圖片描述
  • 李紈 的關係圖譜
    在這裏插入圖片描述
  • 林黛玉 的關係圖譜
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章