ia-guiao-rc/semantic_network.py

100 lines
2.6 KiB
Python
Executable File

# 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))