<commit_before>import csv
import igraph as G
from SPARQLWrapper import SPARQLWrapper, JSON
from datetime import datetime
import sys
 
if len(sys.argv) > 1:
    LEGISLATURA=int(sys.argv[1])
else:
    LEGISLATURA=16

print "ELABORO LEGISLATURA %d" % (LEGISLATURA,)

sparql = SPARQLWrapper("http://dati.senato.it/sparql")

g = G.Graph(directed=True)

# ddl e legislatura
maxIdDdl = 0

Found = True

while Found:
    print "chunk offset %s" % (maxIdDdl)
    q_sequenza_fasi = """PREFIX osr: <http://dati.senato.it/osr/>
    SELECT DISTINCT ?idddl ?iterDdl ?progrFase ?codiceFase ?dataStato ?dataPresentazione
    {
    ?iterDdl a osr:IterDdl; osr:idDdl ?idddl; osr:fase ?fase.
    ?fase osr:progrIter ?progrFase; osr:ddl ?ddl.
    ?ddl osr:fase ?codiceFase; osr:dataStatoDdl ?dataStato; osr:dataPresentazione ?dataPresentazione;
    osr:legislatura %s.
    FILTER (?idddl > %s)
    }
    ORDER BY ?ddl ?progrFase
    """ % (LEGISLATURA,maxIdDdl)

    sparql.setQuery(q_sequenza_fasi)
    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()

    if results["results"]["bindings"]:
        print "GOT %d ROWS" % len(results["results"]["bindings"])
        for result in results["results"]["bindings"]:
            g.add_vertex(name=result['codiceFase']['value'],
                         idddl=result['idddl']['value'],
                         iterDdl=result['iterDdl']['value'],
                         progrFase=result['progrFase']['value'],
                         dataStato=result['dataStato']['value'],
                         dataPresentazione=result['dataPresentazione']['value']
                         )

        for iterDdl in set(g.vs['iterDdl']):
            fasiIter = g.vs(iterDdl=iterDdl)
            for i in range(len(fasiIter) - 1):
                fasePrec = fasiIter[i]
                faseSucc = fasiIter[i+1]
                g.add_edge(fasePrec, faseSucc, iterDdl=iterDdl)

        maxIdDdl = max(g.vs['idddl'])

    else:
        Found = False

q_assorbimento = """PREFIX osr: <http://dati.senato.it/osr/>
SELECT DISTINCT  ?codiceFaseAssorbito  ?codiceFaseAssorbente 
{
# tutte le relazioni di assorbimento
?iterDdl osr:assorbimento ?ddlAssorbito.

# info sul ddl che viene assorbito
?ddlAssorbito a osr:Ddl; osr:statoDdl ?statoDdl; osr:dataStatoDdl ?dataAssorbimento; osr:fase ?codiceFaseAssorbito;
osr:legislatura ?legislatura.

#qual è l'iter che assorbe
?iterDdl osr:idDdl ?idddl; osr:fase ?faseIterAssorbente.

?faseIterAssorbente osr:ddl ?ddlAssorbente.<commit_msg>Spezzata la prima query in chunk per non raggiungere i limiti dell'endpoint SPARQL<commit_after>#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv
import igraph as G
from SPARQLWrapper import SPARQLWrapper, JSON
from datetime import datetime
import sys
 
if len(sys.argv) > 1:
    LEGISLATURA=int(sys.argv[1])
else:
    LEGISLATURA=16

print "ELABORO LEGISLATURA %d" % (LEGISLATURA,)

sparql = SPARQLWrapper("http://dati.senato.it/sparql")

g = G.Graph(directed=True)

# ddl e legislatura
maxIdDdl = -1
idddlList=[]

Found = True

while Found:
    print "chunk offset %s" % (maxIdDdl)
    q_idddl = """PREFIX osr: <http://dati.senato.it/osr/>
    SELECT DISTINCT ?idddl
    {
    ?iterDdl a osr:IterDdl; osr:idDdl ?idddl.
    ?ddl a osr:Ddl; osr:idDdl ?idddl; osr:legislatura ?legislatura

    FILTER (?legislatura = %s)
    FILTER (?idddl > %s)
    }
    ORDER BY ?idddl
    LIMIT 1000
    """ % (LEGISLATURA,maxIdDdl)

    sparql.setQuery(q_idddl)
    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()

    if results["results"]["bindings"]:
        print "GOT %d ROWS" % len(results["results"]["bindings"])
        for result in results["results"]["bindings"]:
            idddlList.append(result['idddl']['value'])

        maxIdDdl = max(idddlList)

    else:
        Found = False


CHUNK=1000
idddlList = sorted(idddlList)
while idddlList:
    idddlChunk = idddlList[:CHUNK]
    idddlList = idddlList[CHUNK:]
    minIdddl = min(idddlChunk)
    maxIdddl = max(idddlChunk)

    print "idddl [%s,%s]" % (minIdddl,maxIdddl)
    q_sequenza_fasi = """PREFIX osr: <http://dati.senato.it/osr/>
    SELECT DISTINCT ?idddl ?iterDdl ?progrFase ?codiceFase ?dataStato ?dataPresentazione
    {
    ?iterDdl a osr:IterDdl; osr:idDdl ?idddl; osr:fase ?fase.
    ?fase osr:progrIter ?progrFase; osr:ddl ?ddl.
    ?ddl osr:fase ?codiceFase; osr:dataStatoDdl ?dataStato; osr:dataPresentazione ?dataPresentazione;
    osr:legislatura %s.
    FILTER (?idddl >= %s AND ?idddl <= %s)
    }
    ORDER BY ?ddl ?progrFase
    """ % (LEGISLATURA,minIdddl, maxIdddl)

    sparql.setQuery(q_sequenza_fasi)
    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()

    if results["results"]["bindings"]:
        print "GOT %d ROWS" % len(results["results"]["bindings"])
        for result in results["results"]["bindings"]:
            g.add_vertex(name=result['codiceFase']['value'],
                         idddl=result['idddl']['value'],
                         iterDdl=result['iterDdl']['value'],
                         progrFase=result['progrFase']['value'],
                         dataStato=result['dataStato']['value'],
                         dataPresentazione=result['dataPresentazione']['value']
                         )

        for iterDdl in set(g.vs['iterDdl']):
            fasiIter = g.vs(iterDdl=iterDdl)
            for i in range(len(fasiIter) - 1):
                fasePrec = fasiIter[i]
                faseSucc = fasiIter[i+1]
                g.add_edge(fasePrec, faseSucc, iterDdl=iterDdl)


q_assorbimento = """PREFIX osr: <http://dati.senato.it/osr/>
SELECT DISTINCT  ?codiceFaseAssorbito  ?codiceFaseAssorbente 
{
# tutte le relazioni di assorbimento
?iterDdl osr:assorbimento ?ddlAssorbito.

# info sul ddl che viene assorbito
?ddlAssorbito a osr:Ddl; osr:statoDdl ?statoDdl; osr:dataStatoDdl ?dataAssorbimento; osr:fase ?codiceFaseAssorbito;
osr:legislatura ?legislatura.

#qual è l'iter che assorbe
?iterDdl osr:idDdl ?idddl; osr:fase ?faseIterAssorbente.

?faseIterAssorbente osr:ddl ?ddlAssorbente.
{'fraction_non_alphanumeric': 0.12943116240725475, 'fraction_numerical': 0.003792250618301731, 'mean_word_length': 3.1519507186858315, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '47597', 'n_tokens_mistral': 2408, 'n_tokens_neox': 2316, 'n_words': 438}