当前位置:网站首页>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 .
边栏推荐
- MySQL flush operation
- 35 is not a stumbling block in the career of programmers
- Win10: how to modify the priority of dual network cards?
- Mysql21 user and permission management
- There are three iPhone se 2022 models in the Eurasian Economic Commission database
- MySQL master-slave replication, read-write separation
- 基于apache-jena的知识问答
- Did you forget to register or load this tag 报错解决方法
- Solve the problem that XML, YML and properties file configurations cannot be scanned
- [reading notes] rewards efficient and privacy preserving federated deep learning
猜你喜欢

Copie maître - esclave MySQL, séparation lecture - écriture

Redis的基础使用

API learning of OpenGL (2003) gl_ TEXTURE_ WRAP_ S GL_ TEXTURE_ WRAP_ T

IDEA 导入导出 settings 设置文件

Some problems in the development of unity3d upgraded 2020 VR

QT creator create button

Valentine's Day is coming, are you still worried about eating dog food? Teach you to make a confession wall hand in hand. Express your love to the person you want

Other new features of mysql18-mysql8
![[C language foundation] 04 judgment and circulation](/img/59/4100971f15a1a9bf3527cbe181d868.jpg)
[C language foundation] 04 judgment and circulation

图像识别问题 — pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path
随机推荐
API learning of OpenGL (2002) smooth flat of glsl
Global and Chinese markets for aprotic solvents 2022-2028: Research Report on technology, participants, trends, market size and share
[number theory] divisor
Global and Chinese market of wafer processing robots 2022-2028: Research Report on technology, participants, trends, market size and share
解决:log4j:WARN Please initialize the log4j system properly.
CSDN question and answer tag skill tree (II) -- effect optimization
QT creator create button
CSDN博文摘要(一) —— 一个简单的初版实现
CSDN问答模块标题推荐任务(一) —— 基本框架的搭建
安装numpy问题总结
SSM integrated notes easy to understand version
JDBC原理
QT creator specifies dependencies
MySQL18-MySQL8其它新特性
Other new features of mysql18-mysql8
记一次某公司面试题:合并有序数组
Data dictionary in C #
CSDN question and answer module Title Recommendation task (I) -- Construction of basic framework
Solution: log4j:warn please initialize the log4j system properly
Invalid global search in idea/pychar, etc. (win10)