In [1]:
import rdflib as r, pylab as p, numpy as n, networkx as x, nltk as k
In [9]:
g=r.Graph()
g.load("storeOpaPopulada.rdf")
In [18]:
sub=g.subjects()
sub_=[ss for ss in sub]
Out[18]:
In [20]:
print u"são %i recursos registrados em %i triplas"%(len(set(sub_)),len(sub_))
Todas as informações são especificadas através de triplas de URIs e dados: (recurso,propriedade, valor), também escrita na forma (sujeito, predicado, objeto), adotada pela rdflib. Cada tripla consiste de três partes:
Para maior informatividade, são usadas as URIs mais comuns, de forma a compatibilizar os dados e integrar uma nuvem relevante, por isso os prefixos RDF, SKOS, OPA, OPS, etc. As URIs usadas na "triplificação" dos dados do Participa.br estão especificadas neste documento
In [53]:
OPA=r.Namespace("http://purl.org/socialparticipation/opa#")
OPS=r.Namespace("http://purl.org/socialparticipation/ops#")
In [55]:
participantes=[pessoa for pessoa in g.triples( (None, r.namespace.RDF.type, OPS.Participant) )]
for s,p,o in participantes[-5:]:
print u"%s é um participante"%s
for ss,pp,nome in g.triples( (s, r.namespace.FOAF.name, None) ):
print u"cujo nome é: %s\n"%(nome,)
Usa-se SparQL para navegar e modificar informações em RDF. Por exemplo, para selecionar os nomes "aname" e "bname" de cada amizade, exlicita-se que "?a foaf:knows ?b" e que os nomes são vinculados aos participantes desta relação.
In [44]:
qres = g.query(
"""SELECT DISTINCT ?aname ?bname
WHERE {
?a foaf:knows ?b .
?a foaf:name ?aname .
?b foaf:name ?bname .
}""")
amizades=[tripla for tripla in qres]
for amizade in amizades[:15]:
#print amizade
print("%s __ conhece __ %s" % amizade)
In [70]:
qres = g.query(
"""SELECT DISTINCT ?gname
WHERE {
?a rdf:type foaf:Group .
}""")
grupos=[tripla for tripla in qres]
len(grupos)
#for amizade in amizades[:15]:
#print amizade
# print("%s __ conhece __ %s" % amizade)
Out[70]: