100 lines
2.6 KiB
Python
100 lines
2.6 KiB
Python
|
|
||
|
|
||
|
# Guiao de representacao do conhecimento
|
||
|
# -- Redes semanticas
|
||
|
#
|
||
|
# Inteligencia Artificial & Introducao a Inteligencia Artificial
|
||
|
# DETI / UA
|
||
|
#
|
||
|
# (c) Luis Seabra Lopes, 2012-2020
|
||
|
# v1.9 - 2019/10/20
|
||
|
#
|
||
|
|
||
|
|
||
|
# Classe Relation, com as seguintes classes derivadas:
|
||
|
# - Association - uma associacao generica entre duas entidades
|
||
|
# - Subtype - uma relacao de subtipo entre dois tipos
|
||
|
# - Member - uma relacao de pertenca de uma instancia a um tipo
|
||
|
#
|
||
|
|
||
|
class Relation:
|
||
|
def __init__(self,e1,rel,e2):
|
||
|
self.entity1 = e1
|
||
|
# self.relation = rel # obsoleto
|
||
|
self.name = rel
|
||
|
self.entity2 = e2
|
||
|
def __str__(self):
|
||
|
return self.name + "(" + str(self.entity1) + "," + \
|
||
|
str(self.entity2) + ")"
|
||
|
def __repr__(self):
|
||
|
return str(self)
|
||
|
|
||
|
|
||
|
# Subclasse Association
|
||
|
class Association(Relation):
|
||
|
def __init__(self,e1,assoc,e2):
|
||
|
Relation.__init__(self,e1,assoc,e2)
|
||
|
|
||
|
# Exemplo:
|
||
|
# a = Association('socrates','professor','filosofia')
|
||
|
|
||
|
# Subclasse Subtype
|
||
|
class Subtype(Relation):
|
||
|
def __init__(self,sub,super):
|
||
|
Relation.__init__(self,sub,"subtype",super)
|
||
|
|
||
|
|
||
|
# Exemplo:
|
||
|
# s = Subtype('homem','mamifero')
|
||
|
|
||
|
# Subclasse Member
|
||
|
class Member(Relation):
|
||
|
def __init__(self,obj,type):
|
||
|
Relation.__init__(self,obj,"member",type)
|
||
|
|
||
|
# Exemplo:
|
||
|
# m = Member('socrates','homem')
|
||
|
|
||
|
# classe Declaration
|
||
|
# -- associa um utilizador a uma relacao por si inserida
|
||
|
# na rede semantica
|
||
|
#
|
||
|
class Declaration:
|
||
|
def __init__(self,user,rel):
|
||
|
self.user = user
|
||
|
self.relation = rel
|
||
|
def __str__(self):
|
||
|
return "decl("+str(self.user)+","+str(self.relation)+")"
|
||
|
def __repr__(self):
|
||
|
return str(self)
|
||
|
|
||
|
# Exemplos:
|
||
|
# da = Declaration('descartes',a)
|
||
|
# ds = Declaration('darwin',s)
|
||
|
# dm = Declaration('descartes',m)
|
||
|
|
||
|
# classe SemanticNetwork
|
||
|
# -- composta por um conjunto de declaracoes
|
||
|
# armazenado na forma de uma lista
|
||
|
#
|
||
|
class SemanticNetwork:
|
||
|
def __init__(self,ldecl=None):
|
||
|
self.declarations = [] if ldecl==None else ldecl
|
||
|
def __str__(self):
|
||
|
return str(self.declarations)
|
||
|
def insert(self,decl):
|
||
|
self.declarations.append(decl)
|
||
|
def query_local(self,user=None,e1=None,rel=None,e2=None):
|
||
|
self.query_result = \
|
||
|
[ d for d in self.declarations
|
||
|
if (user == None or d.user==user)
|
||
|
and (e1 == None or d.relation.entity1 == e1)
|
||
|
and (rel == None or d.relation.name == rel)
|
||
|
and (e2 == None or d.relation.entity2 == e2) ]
|
||
|
return self.query_result
|
||
|
def show_query_result(self):
|
||
|
for d in self.query_result:
|
||
|
print(str(d))
|
||
|
|
||
|
|