# HG changeset patch # User casties # Date 1443703196 -7200 # Node ID 45dad9e38c825674a64d8116912e17b829a3400d # Parent aeef1fedd899da8e65e803d6fc01003e453e6116 first functional version of commentary visualisation. diff -r aeef1fedd899 -r 45dad9e38c82 ismi-python-neo4jrestclient/ismi-vis.py --- a/ismi-python-neo4jrestclient/ismi-vis.py Mon Sep 28 18:15:35 2015 +0200 +++ b/ismi-python-neo4jrestclient/ismi-vis.py Thu Oct 01 14:39:56 2015 +0200 @@ -3,7 +3,7 @@ from flask import Flask, Response, request -from neo4jrestclient.client import GraphDatabase, Node +from neo4jrestclient.client import GraphDatabase, Node, Relationship app = Flask(__name__, static_url_path='/static/') gdb = GraphDatabase("http://localhost:7474", username="neo4j", password="neo5j") @@ -16,27 +16,41 @@ @app.route("/graph") def get_graph(): - query = ("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) " - "RETURN m.title as movie, collect(a.name) as cast " - "LIMIT {limit}") - results = gdb.query(query, - params={"limit": request.args.get("limit", 100)}) + query = ("match (t1:TEXT)-[r:is_commentary_on]->(t2:TEXT) return t1,r,t2") + results = gdb.query(query, returns=(Node,Relationship,Node)) + n4j_nodes = {} + node_idx = {} nodes = [] rels = [] i = 0 - for movie, cast in results: - nodes.append({"title": movie, "label": "movie"}) - target = i - i += 1 - for name in cast: - actor = {"title": name, "label": "actor"} - try: - source = nodes.index(actor) - except ValueError: - nodes.append(actor) - source = i - i += 1 - rels.append({"source": source, "target": target}) + for node1, rel, node2 in results: + # source node + id1 = node1['ismi_id'] + if id1 not in n4j_nodes: + n4j_nodes[id1] = node1 + nodes.append({"title": node1['label'], "label": "TEXT"}) + node_idx[id1] = i + source = i + i += 1 + + else: + source = node_idx[id1] + + # target node + id2 = node2['ismi_id'] + if id2 not in n4j_nodes: + n4j_nodes[id2] = node2 + nodes.append({"title": node2['label'], "label": "TEXT"}) + node_idx[id2] = i + target = i + i += 1 + + else: + target = node_idx[id2] + + # relation + rels.append({"source": source, "target": target}) + return Response(dumps({"nodes": nodes, "links": rels}), mimetype="application/json") @@ -48,32 +62,27 @@ except KeyError: return [] else: - query = ("MATCH (movie:Movie) " - "WHERE movie.title =~ {title} " - "RETURN movie") + query = ("MATCH (text:TEXT) " + "WHERE text.label =~ {title} " + "RETURN text") results = gdb.query( query, returns=Node, params={"title": "(?i).*" + q + ".*"} ) - return Response(dumps([{"movie": row.properties} - for [row] in results]), + return Response(dumps([{"text": row.properties} for [row] in results]), mimetype="application/json") -@app.route("/movie/
Movie | -Released | -Tagline | +Title (translit) | +ismi_id | +Title (arabic) |
---|