当前位置:网站首页>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 .
边栏推荐
- Ansible实战系列一 _ 入门
- MySQL other hosts cannot connect to the local database
- 图像识别问题 — pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path
- Solution: log4j:warn please initialize the log4j system properly
- 数数字游戏
- 报错解决 —— io.UnsupportedOperation: can‘t do nonzero end-relative seeks
- [C language foundation] 04 judgment and circulation
- 引入了junit为什么还是用不了@Test注解
- [Li Kou 387] the first unique character in the string
- MySQL flush operation
猜你喜欢
[free setup] asp Net online course selection system design and Implementation (source code +lunwen)
Install mysql5.5 and mysql8.0 under windows at the same time
CSDN blog summary (I) -- a simple first edition implementation
CSDN question and answer module Title Recommendation task (II) -- effect optimization
机器学习--人口普查数据分析
Other new features of mysql18-mysql8
Leetcode 461 Hamming distance
Installation and use of MySQL under MySQL 19 Linux
Classes in C #
Csdn-nlp: difficulty level classification of blog posts based on skill tree and weak supervised learning (I)
随机推荐
打开浏览器的同时会在主页外同时打开芒果TV,抖音等网站
Global and Chinese markets of static transfer switches (STS) 2022-2028: Research Report on technology, participants, trends, market size and share
[recommended by bloggers] C WinForm regularly sends email (with source code)
Install MySQL for Ubuntu 20.04
Introduction to the easy copy module
Ansible实战系列二 _ Playbook入门
Yum prompt another app is currently holding the yum lock; waiting for it to exit...
MySQL other hosts cannot connect to the local database
虚拟机Ping通主机,主机Ping不通虚拟机
Basic use of redis
FRP intranet penetration
windows无法启动MYSQL服务(位于本地计算机)错误1067进程意外终止
[reading notes] rewards efficient and privacy preserving federated deep learning
npm一个错误 npm ERR code ENOENT npm ERR syscall open
[BMZCTF-pwn] 12-csaw-ctf-2016-quals hungman
@Controller, @service, @repository, @component differences
Django运行报错:Error loading MySQLdb module解决方法
Are you monitored by the company for sending resumes and logging in to job search websites? Deeply convinced that the product of "behavior awareness system ba" has not been retrieved on the official w
机器学习--人口普查数据分析
[free setup] asp Net online course selection system design and Implementation (source code +lunwen)