mirror of https://github.com/CIRCL/AIL-framework
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
import networkx as nx
|
|
import xml.sax.saxutils as xlm
|
|
import redis
|
|
|
|
def Gephi_Graph(r_serv, graphpath, mincard, maxcard, insert_type):
|
|
"""Create Gephi Graph by calling a "Sub function": Create_Graph
|
|
|
|
:param r_serv: -- connexion to redis database
|
|
:param graphpath: -- the absolute path of the .gephi graph created.
|
|
:param mincard: -- the minimum links between 2 nodes to be created
|
|
:param maxcard: -- the maximum links between 2 nodes to be created
|
|
:param insert_type: -- the type of datastructure used to create the graph.
|
|
|
|
In fact this function is juste here to be able to choose between two kind of
|
|
Redis database structure: One which is a Sorted set and the other a simple
|
|
set.
|
|
|
|
"""
|
|
g = nx.Graph()
|
|
|
|
if (insert_type == 0):
|
|
|
|
for h in r_serv.smembers("hash"):
|
|
Create_Graph(r_serv, g, h, graphpath, mincard, maxcard)
|
|
|
|
elif (insert_type == 2):
|
|
|
|
for h in r_serv.zrange("hash", 0, -1):
|
|
Create_Graph(r_serv, g, h, graphpath, mincard, maxcard)
|
|
|
|
nx.write_gexf(g,graphpath)
|
|
print nx.info(g)
|
|
|
|
|
|
|
|
|
|
def Create_Graph(r_serv, graph, h, graphpath, mincard, maxcard):
|
|
"""Create Gephi Graph.
|
|
|
|
:param r_serv: -- connexion to redis database
|
|
:param graph: -- networkx graph object
|
|
:param h: -- (str) the hash which will be transform into a node.
|
|
:param graphpath: -- the absolute path of the .gephi graph created.
|
|
:param mincard: -- the minimum links between 2 nodes to be created
|
|
:param maxcard: -- the maximum links between 2 nodes to be created
|
|
|
|
This function link all the pastes with theirs own hashed lines.
|
|
Of course a paste can have multiple hashed lines and an hashed line can be
|
|
contained in multiple paste.
|
|
In this case it's a common hash.
|
|
|
|
"""
|
|
if (r_serv.scard(h) >= mincard) and (r_serv.scard(h) <= maxcard):
|
|
|
|
for filename in r_serv.smembers(h):
|
|
|
|
for line in r_serv.smembers(filename):
|
|
|
|
line = line.decode('UTF-8', errors='ignore')
|
|
line = xlm.quoteattr(line, {'"':'"', "'":"'"})
|
|
|
|
graph.add_edge(h, line+" -- "+filename)
|
|
|
|
#OK |