簡單構建基於RDF和SPARQL的KBQA(知識圖譜問答系統)

本文主要經過python實例講解基於RDF和SPARQL的KBQA系統的構建。該項目可在python2和python3上運行經過。python

注:KBQA便是咱們一般所說的基於知識圖譜的問答系統。這裏簡單構建的EasyKBQA,數據來源於網絡,源碼地址看下面補充說明。正則表達式

目錄:數據庫

  -流程原理apache

  -實際過程windows

  -程序運行服務器

  -補充說明網絡

流程原理:app

該問答系統能夠解析輸入的天然語言問句,主要運用REFO庫的"對象正則表達式"匹配獲得結果, 進而生成對應 SPARQL 查詢語句,再經過API請求後臺基於TDB知識譜圖數據庫的 Apache Jena Fuseki 服務, 獲得結果。spa

實際過程:.net

1. 預約義 3 ​類共 5 ​個示例問題,​包括:
  ● "誰是苑茵?",
  ● "丁洪奎是誰?",
  ● "蘇進木來自哪裏?",
  ● "苑茵哪一個族的?",
  ● "苑茵是什麼民族的人?".
2. 利用結巴分詞對中文句子進行分詞, ​同時進行詞性標註;
3. 將詞的文本和詞性打包, ​視爲"詞對象",對應 :class:Word(token,​ ​pos)​;
4. 利用 REfO ​模塊對詞進行對象級別 (object-level) ​的正則匹配,判斷問題屬於的​種類​併產生對應的 SPARQL,對應 :class:Rule(condition,​ ​action)​;
5. 若是成功匹配併成功產生 SPARQL ​查詢語句, ​馬上請求 Fuseki ​服務並返回結果,打印相關內容;

程序運行:

1、配置第三方庫:pip install refo jieba sparqlwrapper

2安裝JAVA JDK1.8,配置好環境變量。

3、項目根目錄主要包括backend​​文件夾和test.py文件(同一級),backendJena​的Fuseki 模塊,​運行第4步後在本地監聽(http://localhost:3030/),如圖:

 

4cd backend/apache-jena-fuseki-3.5.0windows下啓動SPARQL endpoint服務:

fuseki-server.bat --loc=../DB /demo > log.txt 2>&1

對應Linux命令爲:

nohup ./fuseki-server --loc=../DB /demo > log.txt 2>&1 &

5、運行根目錄代碼:python test.py,結果以下圖:

 

補充說明:

一、啓動fuseki服務器參數,--loc=../DB設置在線服務數據庫位置,參數/demo設置服務器數據集名稱(自定義),對應的SPARQL查詢地址爲:http://localhost:3030/demo/query

二、天然語言問句進行正則匹配的邏輯REfO. ​主要參考根目錄下的代碼:words.py

三、後續改進可參考: 使用鄰接鏈表表示天然語言問句, 經過遍歷有向圖或子圖匹配方法構造 SPAPQL ​查詢語句

代碼下載地址:https://download.csdn.net/download/starbaby01/10621927

相關文章
相關標籤/搜索