Merge branch 'master' of gitlab.com:matteodelabre/wikimedica-disease-search
This commit is contained in:
commit
e551df60ec
|
@ -1,14 +1,14 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
from fetch import wikidata
|
from fetch import wikidata, wikimedica
|
||||||
from neo4j import GraphDatabase
|
from neo4j import GraphDatabase
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
NEO4J_URI = "bolt://localhost:7687"
|
NEO4J_URI = "bolt://localhost:7687"
|
||||||
NEO4J_USR = "neo4j"
|
NEO4J_USR = "neo4j"
|
||||||
NEO4J_PSW = "test"
|
NEO4J_PSW = "test"
|
||||||
|
|
||||||
# Conection with Neo4j
|
ALIGNEMENT_FILE_PATH = "data/alignment_result.json"
|
||||||
driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USR, NEO4J_PSW))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,6 +28,10 @@ def define_link_from_type(link_id):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def create_graph():
|
||||||
|
"""
|
||||||
|
Build and insert graph from wikidata to neo4j
|
||||||
|
"""
|
||||||
# Create indexes
|
# Create indexes
|
||||||
with driver.session() as session:
|
with driver.session() as session:
|
||||||
session.run("CREATE INDEX ON :Disease(id);")
|
session.run("CREATE INDEX ON :Disease(id);")
|
||||||
|
@ -85,5 +89,36 @@ for link in request_disease_links:
|
||||||
signe_symptome_id=signe_symptome_id
|
signe_symptome_id=signe_symptome_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def align_with_wikimedica():
|
||||||
|
"""
|
||||||
|
Align neo4j graph and Wikidata
|
||||||
|
"""
|
||||||
|
with open(ALIGNEMENT_FILE_PATH, "r") as align_file:
|
||||||
|
align = json.loads(align_file.read())
|
||||||
|
|
||||||
|
for entity in align:
|
||||||
|
if 'wikidata_id' in entity:
|
||||||
|
|
||||||
|
with driver.session() as session:
|
||||||
|
wikidata_id = entity['wikidata_id']
|
||||||
|
wikidata_page = wikimedica.get_web_page(entity['wikimedica_uri'])
|
||||||
|
|
||||||
|
session.run(
|
||||||
|
"MATCH (d {id:$wikidata_id})"
|
||||||
|
"SET d.wikimedia_id = $wikimedica_uri",
|
||||||
|
wikidata_id=wikidata_id,
|
||||||
|
wikimedica_uri=wikidata_page,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Conection with Neo4j
|
||||||
|
driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USR, NEO4J_PSW))
|
||||||
|
|
||||||
|
create_graph()
|
||||||
|
align_with_wikimedica()
|
||||||
|
|
||||||
# Close Neo4j connection
|
# Close Neo4j connection
|
||||||
driver.close()
|
driver.close()
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
from .http import session
|
from .http import session
|
||||||
import rdflib
|
|
||||||
|
|
||||||
def request(page, request):
|
def request(uri, request):
|
||||||
"""
|
"""
|
||||||
Effectue une requête SPARQL sur une page de WikiMedica
|
Effectue une requête SPARQL depuis une uri de WikiMedica
|
||||||
|
|
||||||
:param page: Page de WikiMedica ciblé
|
:param uri: uri de WikiMedica ciblé
|
||||||
:param request: Requête SPARQL appliqué
|
:param request: Requête SPARQL appliqué
|
||||||
:return: Réponse du point d'accés sous forme d'un tableau de dictionaire
|
:return: Réponse du point d'accés sous forme d'un tableau de dictionaire
|
||||||
"""
|
"""
|
||||||
data = session.get(page, stream=True)
|
data = session.get(uri, stream=True)
|
||||||
|
|
||||||
g = rdflib.Graph()
|
g = rdflib.Graph()
|
||||||
g.parse(data.raw)
|
g.parse(data.raw)
|
||||||
qres = g.query(request)
|
qres = g.query(request)
|
||||||
|
|
||||||
return [row.asdict() for row in qres]
|
return [row.asdict() for row in qres]
|
||||||
|
|
||||||
|
def get_web_page(uri):
|
||||||
|
return uri.replace("/Special:ExportRDF", "")
|
||||||
|
|
Loading…
Reference in New Issue