当前位置:网站首页>Knowledge Q & A based on Apache Jena
Knowledge Q & A based on Apache Jena
2022-07-06 11:06:00 【zkkkkkkkkkkkkk】
Preface
This article is mainly about how to use Python Yes apache-jena Interactive query . Specific triple data establishment 、 transformation 、 Please see : Knowledge Q & a triplet data preparation stage . This paper is based on the data preparation stage of Knowledge Q & a triplet , Then write down .
notes : The case code of this article uses https://github.com/zhangtao-seu/Jay_KG The code in
Catalog
One 、 Code directory structure
Two 、 Knowledge Q & A implementation
3、 ... and 、 Run the code for question and answer
One 、 Code directory structure
The following figure for Jay_KG The code directory structure of the project . The important thing is query_main.py and question_temp.py file , The former is the main entry of the program , The latter is the definition of knowledge question and answer template .
Two 、 Knowledge Q & A implementation
2.1、 Triple data acquisition
This case uses potege Software modeling , Finally, export owl file , Then continue according to Knowledge Q & a triplet data preparation stage In this paper, the 2.2 Section content is done step by step . Use in this case potege After modeling, see the following figure
2.1、 Define the entity
stay Jay_KG/KB_query/external_dict There is one of them. sanguo.txt, This is the entity file defined by the blogger , The content is shown in the figure below
2.2、 Define problem templates
open question_temp.py file , Define templates , As shown in the following code ,QuestionSet Under class o_name、rides Function defines Guan Yu word ( Alias 、 nickname ) What is it? ? By 、 And Guan Yu's Mount ( Riding a 、 War horse ) What is it? ? Two templates .
# encoding=utf-8
"""
@desc:
Set the problem template , Set the corresponding... For each template SPARQL sentence .demo Provide the following template :
"""
from refo import finditer, Predicate, Star, Any, Disjunction
import re
# # TODO SPARQL Prefix and template
# SPARQL_PREXIX = u"""
# PREFIX owl: <http://www.w3.org/2002/07/owl#>
# PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
# PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# PREFIX : <http://www.semanticweb.org/ zhang /ontologies/2019/1/untitled-ontology-32#>
# """
SPARQL_PREXIX = u"""
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX : <http://www.semanticweb.org/dell/ontologies/2022/0/untitled-ontology-3#>
"""
SPARQL_SELECT_TEM = u"{prefix}\n" + \
u"SELECT {select} WHERE {
{\n" + \
u"{expression}\n" + \
u"}}\n"
class W(Predicate):
def __init__(self, token=".*", pos=".*"):
self.token = re.compile(token + "$")
self.pos = re.compile(pos + "$")
super(W, self).__init__(self.match)
def match(self, word):
m1 = self.token.match(word.token.decode("utf-8"))
m2 = self.pos.match(word.pos)
return m1 and m2
class Rule(object):
def __init__(self, condition_num, condition=None, action=None):
assert condition and action
self.condition = condition
self.action = action
self.condition_num = condition_num
# word_object : [ word , The part of speech ]
def apply1(self, sentence):
matches = []
# 【person_entity】
for m in finditer(self.condition, sentence):
i, j = m.span()
matches.extend(sentence[i:j])
return self.action(matches), self.condition_num
class QuestionSet:
def __init__(self):
pass
@staticmethod
def o_name(word_object):
# What is Guan Yu's word ?
select = u"?o"
sparql = None
for w in word_object:
if w.pos == pos_person:
e = u" :{person} : word ?o.".format(person=w.token.decode('utf-8'))
sparql = SPARQL_SELECT_TEM.format(prefix=SPARQL_PREXIX,
select=select,
expression=e)
print(sparql)
break
return sparql
@staticmethod
def rides(word_object):
# What is Guan Yu's war horse ?
select = u"?o"
sparql = None
for w in word_object:
if w.pos == pos_person:
e = u" :{person} : Riding a ?o.".format(person=w.token.decode('utf-8'))
sparql = SPARQL_SELECT_TEM.format(prefix=SPARQL_PREXIX,
select=select,
expression=e)
print(sparql)
break
return sparql
# TODO Define keywords
pos_person = "nr"
person_entity = (W(pos=pos_person))
other_name = (W(" word ") | W(" Alias ") | W(" nickname "))
ride = (W(" Riding a ") | W(" mount ") | W(" War horse "))
# TODO Question template / Matching rules
"""
# What is Guan Yu's word ?
# What is Guan Yu's war horse ?
"""
rules = [
# What is Guan Yu's word ?
Rule(condition_num=0, condition=person_entity + Star(Any(), greedy=False) + other_name + Star(Any(), greedy=False), action=QuestionSet.o_name),
Rule(condition_num=0, condition=person_entity + Star(Any(), greedy=False) + ride + Star(Any(), greedy=False), action=QuestionSet.rides),
]
3、 ... and 、 Run the code for question and answer
Get into query_main File run , The template defined before console input , You can receive the return .
边栏推荐
- Mysql21 - gestion des utilisateurs et des droits
- Mysql 其他主机无法连接本地数据库
- @Controller, @service, @repository, @component differences
- Windows cannot start the MySQL service (located on the local computer) error 1067 the process terminated unexpectedly
- Deoldify项目问题——OMP:Error#15:Initializing libiomp5md.dll,but found libiomp5md.dll already initialized.
- Ansible practical series I_ introduction
- The virtual machine Ping is connected to the host, and the host Ping is not connected to the virtual machine
- 数数字游戏
- TCP/IP协议(UDP)
- CSDN question and answer module Title Recommendation task (I) -- Construction of basic framework
猜你喜欢
CSDN question and answer module Title Recommendation task (II) -- effect optimization
【博主推荐】C# Winform定时发送邮箱(附源码)
CSDN问答标签技能树(一) —— 基本框架的构建
[download app for free]ineukernel OCR image data recognition and acquisition principle and product application
[Thesis Writing] how to write function description of jsp online examination system
CSDN blog summary (I) -- a simple first edition implementation
02-项目实战之后台员工信息管理
CSDN question and answer module Title Recommendation task (I) -- Construction of basic framework
csdn-Markdown编辑器
Esp8266 at+cipstart= "", "", 8080 error closed ultimate solution
随机推荐
neo4j安装教程
Invalid default value for 'create appears when importing SQL_ Time 'error reporting solution
SSM integrated notes easy to understand version
Ansible实战系列三 _ task常用命令
CSDN markdown editor
Remember a company interview question: merge ordered arrays
Some notes of MySQL
软件测试-面试题分享
【博主推荐】SSM框架的后台管理系统(附源码)
Remember the interview algorithm of a company: find the number of times a number appears in an ordered array
Ansible practical Series III_ Task common commands
JDBC原理
[leectode 2022.2.13] maximum number of "balloons"
[number theory] divisor
Copy constructor template and copy assignment operator template
[BMZCTF-pwn] 12-csaw-ctf-2016-quals hungman
安全测试涉及的测试对象
CSDN question and answer tag skill tree (II) -- effect optimization
Ansible practical Series II_ Getting started with Playbook
Csdn-nlp: difficulty level classification of blog posts based on skill tree and weak supervised learning (I)