Importadas as bibliotecas:
In [10]:
from SPARQLWrapper import SPARQLWrapper, JSON
import time, operator, numpy as n, networkx as x
Guardados os prefixos mais úteis no domínio:
In [31]:
PREFIX="""PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ops: <http://purl.org/socialparticipation/ops#>
PREFIX opa: <http://purl.org/socialparticipation/opa#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX tsioc: <http://rdfs.org/sioc/types#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX schema: <http://schema.org/>"""
Baixadas todas as amizades do participa
In [51]:
NOW=time.time()
q="""SELECT DISTINCT ?a ?b ?aname ?bname
WHERE {
?a foaf:knows ?b .
?a foaf:name ?aname .
?b foaf:name ?bname .
}"""
sparql3 = SPARQLWrapper("http://localhost:82/participabr/query")
sparql3.setQuery(PREFIX+q)
sparql3.setReturnFormat(JSON)
results4 = sparql3.query().convert()
print("%.2f segundos para puxar todas as amizades do Participa.br"%
(time.time()-NOW,))
Feita rede de amizades do Participa.br:
In [52]:
g=x.Graph()
for amizade in results4["results"]["bindings"]:
nome1=amizade["a"]["value"]
nome2=amizade["b"]["value"]
g.add_edge(nome1,nome2)
Baixadas interações no Participa.br:
In [17]:
NOW=time.time()
q2="""SELECT ?participante1 ?participante2 ?aname ?bname
WHERE {
?comentario dc:type tsioc:Comment.
?participante1 ops:performsParticipation ?comentario.
?participante1 foaf:name ?aname.
?artigo sioc:has_reply ?comentario.
?participante2 ops:performsParticipation ?artigo.
?participante2 foaf:name ?bname.
}"""
sparql3.setQuery(PREFIX+q2)
sparql3.setReturnFormat(JSON)
results = sparql3.query().convert()
print("%.2f segundos para puxar as interações do Participa.br"%
(time.time()-NOW,))
Feita rede de interações:
In [18]:
d=x.DiGraph()
for interacao in results["results"]["bindings"]:
nome_chegada=interacao["participante1"]["value"]
nome_partida=interacao["participante2"]["value"]
if (nome_partida,nome_chegada) in d.edges():
d[nome_partida][nome_chegada]["weight"]+=1
else:
d.add_edge(nome_partida,nome_chegada,weight=1.)
Listando os mais conectados para ver suas URIs e verificar bom andamento das buscas SparQL:
In [53]:
sorted_g = sorted(g.degree().iteritems(), key=operator.itemgetter(1))
sorted_g[::-1][:15]
Out[53]:
In [54]:
sorted_d = sorted(d.degree().iteritems(), key=operator.itemgetter(1))
sorted_d[::-1][:15]
Out[54]:
Pode-se selecionar mensagens de periféricos, hubs e intermediários. Por simplicidade, aqui estão 5 mensagens dos 5 mais conectados nas atividades:
In [55]:
uris=[i[0] for i in sorted_d[::-1][:5]]
for uri in uris:
q=""" SELECT ?texto
WHERE {
?comentario dc:creator <%s> .
?comentario dc:type tsioc:Comment.
?comentario schema:text ?texto .
} LIMIT 2"""%(uri,)
#print q
sparql3.setQuery(PREFIX+q)
results4 = sparql3.query().convert()
#print results4
print "\n"
try:
print uri+"\n"+ results4["results"]["bindings"][0]["texto"]["value"]
except:
pass
Pode-se selecionar mensagens de periféricos, hubs e intermediários. Por simplicidade, aqui estão 5 mensagens dos 5 mais conectados nas amizades:
In [56]:
uris=[i[0] for i in sorted_g[::-1][:5]]
for uri in uris:
q=""" SELECT ?texto
WHERE {
?comentario dc:creator <%s> .
?comentario dc:type tsioc:Comment.
?comentario schema:text ?texto .
} LIMIT 2"""%(uri,)
#print q
sparql3.setQuery(PREFIX+q)
results4 = sparql3.query().convert()
#print results4
print "\n"
try:
print uri+"\n"+ results4["results"]["bindings"][0]["texto"]["value"]
except:
pass