diff options
Diffstat (limited to 'diagram.py')
| -rwxr-xr-x | diagram.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/diagram.py b/diagram.py new file mode 100755 index 0000000..ecef7a6 --- /dev/null +++ b/diagram.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +#-*- coding:utf-8 -*- + +import networkx as nx +from html.parser import HTMLParser +import re, os + +G = nx.Graph() +node_colors = [] + +# gescrapte Daten laden +f = open("data/users.txt", encoding = "utf-8") +addresses = eval(f.read()) +f.close() + +class User(object): + def __init__(self, name, firstname, lastname, mail, nick, provider): + self.name = name + self.firstname = firstname + self.lastname = lastname + self.mail = mail + self.nick = nick + self.provider = provider + +users = [] + +# Adressen durchgehen und Edges / Nodes erstellen +for user in addresses: + if len(addresses[user]) < 1: + continue + + firstname, lastname = re.match("(.+) ([^ ]+)", user).groups() + nick, provider = re.match("(.*?)@([^@]+)", addresses[user]).groups() + + users.append(User(user, firstname, lastname, addresses[user], nick, provider)) + +for user in users: + G.add_node(user.name) + + # nicht weiter verarbeiten + users.remove(user) + + userswithprovider = len([i for i in users if i.provider == user.provider]) + if userswithprovider > 0: + G.add_node(user.provider) + G.add_edge(user.name, user.provider) + + brothersisters = [i for i in users if i.lastname == user.lastname] + if len(brothersisters) > 0: + for brothersister in brothersisters: + G.add_edge(user.name, brothersister.name) + + samenicks = [i for i in users if i.nick == user.nick] + if len(samenicks) > 0: + for samenick in samenicks: + G.add_edge(user.name, samenick.name) + +nx.write_gml(G, 'data/graph.gml') + +# Encoding fixen +p = HTMLParser() +f = open('data/graph.gml', 'r') +s = p.unescape(f.read()) +f.close() +os.remove('data/graph.gml') +f = open('data/graph.gml', 'w') +f.write(s) +f.close() |
