In [3]:
sentences_str = \
"""
1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	hat	haben	V	VAFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Fem|_|Sg	4	det	_	_ 
4	Angst	Angst	N	NN	Fem|_|Sg	2	obja	_	_ 
5	vor	vor	PREP	APPR	Dat	4	pp	_	_ 
6	ihnen	sie	PRO	PPER	3|Pl|_|Dat	5	pn	_	_ 
7	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	,	,	$,	$,	_	0	root	_	_ 
6	er	er	PRO	PPER	3|Sg|Masc|Nom	7	subj	_	_ 
7	hat	haben	V	VAFIN	3|Sg|Pres|Ind	2	kon	_	_ 
8	allerdings	allerdings	ADV	ADV	_	7	adv	_	_ 
9	keine	keine	ART	PIAT	Fem|_|Sg	10	det	_	_ 
10	Angst	Angst	N	NN	Fem|_|Sg	7	obja	_	_ 
11	vor	vor	PREP	APPR	Dat	10	pp	_	_ 
12	ihnen	sie	PRO	PPER	3|Pl|_|Dat	11	pn	_	_ 
13	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	,	,	$,	$,	_	0	root	_	_ 
6	allerdings	allerdings	ADV	ADV	_	7	adv	_	_ 
7	hat	haben	V	VAFIN	3|Sg|Pres|Ind	2	kon	_	_ 
8	er	er	PRO	PPER	3|Sg|Masc|Nom	7	subj	_	_ 
9	keine	keine	ART	PIAT	Fem|_|Sg	10	det	_	_ 
10	Angst	Angst	N	NN	Fem|_|Sg	7	obja	_	_ 
11	vor	vor	PREP	APPR	Dat	10	pp	_	_ 
12	ihnen	sie	PRO	PPER	3|Pl|_|Dat	11	pn	_	_ 
13	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	,	,	$,	$,	_	0	root	_	_ 
6	allerdings	allerdings	ADV	ADV	_	7	adv	_	_ 
7	hat	haben	V	VAFIN	3|Sg|Pres|Ind	2	kon	_	_ 
8	er	er	PRO	PPER	3|Sg|Masc|Nom	7	subj	_	_ 
9	auch	auch	ADV	ADV	_	7	adv	_	_ 
10	keine	keine	ART	PIAT	Fem|_|Sg	11	det	_	_ 
11	Angst	Angst	N	NN	Fem|_|Sg	7	obja	_	_ 
12	vor	vor	PREP	APPR	Dat	11	pp	_	_ 
13	ihnen	sie	PRO	PPER	3|Pl|_|Dat	12	pn	_	_ 
14	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	,	,	$,	$,	_	0	root	_	_ 
6	aber	aber	KON	KON	_	2	kon	_	_ 
7	er	er	PRO	PPER	3|Sg|Masc|Nom	8	subj	_	_ 
8	hat	haben	V	VAFIN	3|Sg|Pres|Ind	6	cj	_	_ 
9	auch	auch	ADV	ADV	_	8	adv	_	_ 
10	keine	keine	ART	PIAT	Fem|_|Sg	11	det	_	_ 
11	Angst	Angst	N	NN	Fem|_|Sg	8	obja	_	_ 
12	vor	vor	PREP	APPR	Dat	11	pp	_	_ 
13	ihnen	sie	PRO	PPER	3|Pl|_|Dat	12	pn	_	_ 
14	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	,	,	$,	$,	_	0	root	_	_ 
6	hat	haben	V	VAFIN	3|Sg|Pres|Ind	2	kon	_	_ 
7	aber	aber	ADV	ADV	_	6	adv	_	_ 
8	auch	auch	ADV	ADV	_	6	adv	_	_ 
9	keine	keine	ART	PIAT	Fem|_|Sg	10	det	_	_ 
10	Angst	Angst	N	NN	Fem|_|Sg	6	obja	_	_ 
11	vor	vor	PREP	APPR	Dat	10	pp	_	_ 
12	ihnen	sie	PRO	PPER	3|Pl|_|Dat	11	pn	_	_ 
13	.	.	$.	$.	_	0	root	_	_ 

1	Er	er	PRO	PPER	3|Sg|Masc|Nom	2	subj	_	_ 
2	mag	mögen	V	VMFIN	3|Sg|Pres|Ind	0	root	_	_ 
3	keine	keine	ART	PIAT	Neut|_|Pl	4	det	_	_ 
4	Tiere	Tier	N	NN	Neut|_|Pl	2	obja	_	_ 
5	,	,	$,	$,	_	0	root	_	_ 
6	aber	aber	KON	KON	_	2	kon	_	_ 
7	hat	haben	V	VAFIN	3|Sg|Pres|Ind	6	cj	_	_ 
8	auch	auch	ADV	ADV	_	7	adv	_	_ 
9	keine	keine	ART	PIAT	Fem|Nom|Sg	10	det	_	_ 
10	Angst	Angst	N	NN	Fem|Nom|Sg	7	subj	_	_ 
11	vor	vor	PREP	APPR	Dat	10	pp	_	_ 
12	ihnen	sie	PRO	PPER	3|Pl|_|Dat	11	pn	_	_ 
13	.	.	$.	$.	_	0	root	_	_ 
"""

In [4]:
sentences = sentences_str.split('\n\n')

In [20]:
sdict = {}
for line in sentences[0].splitlines():
    if line:
        split_line = line.split('\t')
        print split_line
        sdict[int(split_line[0])] = split_line[1:]


['1', 'Er', 'er', 'PRO', 'PPER', '3|Sg|Masc|Nom', '2', 'subj', '_', '_ ']
['2', 'mag', 'm\xc3\xb6gen', 'V', 'VMFIN', '3|Sg|Pres|Ind', '0', 'root', '_', '_ ']
['3', 'keine', 'keine', 'ART', 'PIAT', 'Neut|_|Pl', '4', 'det', '_', '_ ']
['4', 'Tiere', 'Tier', 'N', 'NN', 'Neut|_|Pl', '2', 'obja', '_', '_ ']
['5', '.', '.', '$.', '$.', '_', '0', 'root', '_', '_ ']

In [27]:
def get_sentence_relations(sentence_dict):
    relations = set()
    for key in sentence_dict:
        tok, lemma, cat, finecat, morph, head, deprel, _, _ = sentence_dict[key]
        if deprel != 'root':
            relations.add("{deprel}({head_lemma}, {dominated_lemma})".format(
                deprel=deprel, head_lemma=sdict[int(head)][1],
                dominated_lemma=lemma))
    return relations

In [29]:
def create_sentence_dicts(sentences):
    sentence_dicts = []
    for sentence in sentences:
        sdict = {}
        for line in sentence.splitlines():
            if line:
                split_line = line.split('\t')
                sdict[int(split_line[0])] = split_line[1:]
        sentence_dicts.append(sdict)
    return sentence_dicts

In [30]:
sentence_dicts = create_sentence_dicts(sentences)

In [38]:
sent_rels = []
for sdict in sentence_dicts:
    sent_rels.append(get_sentence_relations(sdict))

In [42]:
merged_rels = sent_rels[0] | sent_rels[1] # first two sentences belong together

In [43]:
fixed_sent_rels = []
fixed_sent_rels.append(merged_rels)
fixed_sent_rels.extend(sent_rels[2:])

In [45]:
fixed_sent_rels[1]


Out[45]:
{'adv(haben, allerdings)',
 'det(Angst, keine)',
 'det(Tier, keine)',
 'kon(m\xc3\xb6gen, haben)',
 'obja(haben, Angst)',
 'obja(m\xc3\xb6gen, Tier)',
 'pn(vor, sie)',
 'pp(Angst, vor)',
 'subj(haben, er)',
 'subj(m\xc3\xb6gen, er)'}

In [46]:
import itertools

In [51]:
for i in fixed_sent_rels:
    for j in fixed_sent_rels:
        print i ^ j


set([])
set(['adv(haben, allerdings)', 'kon(m\xc3\xb6gen, haben)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)', 'adv(haben, auch)'])
set(['kon(m\xc3\xb6gen, aber)', 'adv(haben, auch)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, haben)', 'adv(haben, aber)', 'adv(haben, auch)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, aber)', 'subj(haben, Angst)', 'adv(haben, auch)', 'obja(haben, Angst)', 'cj(aber, haben)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)'])
set([])
set([])
set(['adv(haben, auch)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, auch)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, allerdings)', 'adv(haben, auch)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, haben)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, allerdings)', 'subj(haben, Angst)', 'adv(haben, auch)', 'obja(haben, Angst)', 'cj(aber, haben)'])
set(['adv(haben, allerdings)', 'kon(m\xc3\xb6gen, haben)'])
set([])
set([])
set(['adv(haben, auch)'])
set(['adv(haben, allerdings)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, allerdings)', 'adv(haben, auch)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, allerdings)', 'subj(haben, Angst)', 'adv(haben, auch)', 'obja(haben, Angst)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['adv(haben, allerdings)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, haben)'])
set(['adv(haben, auch)'])
set(['adv(haben, auch)'])
set([])
set(['adv(haben, allerdings)', 'kon(m\xc3\xb6gen, aber)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, allerdings)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, allerdings)', 'subj(haben, Angst)', 'obja(haben, Angst)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['kon(m\xc3\xb6gen, aber)', 'adv(haben, auch)', 'cj(aber, haben)'])
set(['adv(haben, allerdings)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)', 'kon(m\xc3\xb6gen, aber)', 'adv(haben, auch)', 'cj(aber, haben)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)', 'kon(m\xc3\xb6gen, aber)', 'cj(aber, haben)'])
set([])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, haben)', 'adv(haben, aber)', 'kon(m\xc3\xb6gen, aber)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'subj(haben, Angst)', 'obja(haben, Angst)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, haben)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, allerdings)', 'adv(haben, auch)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, allerdings)', 'adv(haben, auch)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'adv(haben, allerdings)'])
set(['subj(haben, er)', 'adv(haben, aber)', 'kon(m\xc3\xb6gen, aber)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set([])
set(['adv(haben, aber)', 'kon(m\xc3\xb6gen, aber)', 'subj(haben, Angst)', 'obja(haben, Angst)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'subj(haben, Angst)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, aber)', 'obja(haben, Angst)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'adv(haben, allerdings)', 'subj(haben, Angst)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, aber)', 'obja(haben, Angst)', 'kon(m\xc3\xb6gen, haben)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)', 'subj(haben, Angst)', 'adv(haben, auch)', 'kon(m\xc3\xb6gen, aber)', 'obja(haben, Angst)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'kon(m\xc3\xb6gen, haben)', 'adv(haben, allerdings)', 'subj(haben, Angst)', 'kon(m\xc3\xb6gen, aber)', 'obja(haben, Angst)', 'cj(aber, haben)'])
set(['subj(haben, er)', 'subj(haben, Angst)', 'obja(haben, Angst)'])
set(['kon(m\xc3\xb6gen, haben)', 'adv(haben, aber)', 'subj(haben, Angst)', 'kon(m\xc3\xb6gen, aber)', 'obja(haben, Angst)', 'cj(aber, haben)'])
set([])

In [53]:
a =

In [56]:
fixed_sent_rels[0].intersection(*fixed_sent_rels[1:])


Out[56]:
{'det(Angst, keine)',
 'det(Tier, keine)',
 'obja(m\xc3\xb6gen, Tier)',
 'pn(vor, sie)',
 'pp(Angst, vor)',
 'subj(m\xc3\xb6gen, er)'}

In [59]:
for i, sent in enumerate(fixed_sent_rels):
    print i
    for rel in sent:
        print "\t", rel


0
	det(Angst, keine)
	subj(haben, er)
	pn(vor, sie)
	pp(Angst, vor)
	det(Tier, keine)
	obja(haben, Angst)
	obja(mögen, Tier)
	subj(mögen, er)
1
	det(Angst, keine)
	subj(haben, er)
	kon(mögen, haben)
	pn(vor, sie)
	pp(Angst, vor)
	det(Tier, keine)
	adv(haben, allerdings)
	obja(haben, Angst)
	obja(mögen, Tier)
	subj(mögen, er)
2
	det(Angst, keine)
	subj(haben, er)
	obja(mögen, Tier)
	pn(vor, sie)
	pp(Angst, vor)
	det(Tier, keine)
	adv(haben, allerdings)
	obja(haben, Angst)
	kon(mögen, haben)
	subj(mögen, er)
3
	det(Angst, keine)
	subj(haben, er)
	obja(mögen, Tier)
	pn(vor, sie)
	pp(Angst, vor)
	det(Tier, keine)
	adv(haben, allerdings)
	adv(haben, auch)
	obja(haben, Angst)
	kon(mögen, haben)
	subj(mögen, er)
4
	det(Angst, keine)
	subj(haben, er)
	pn(vor, sie)
	pp(Angst, vor)
	det(Tier, keine)
	kon(mögen, aber)
	adv(haben, auch)
	obja(haben, Angst)
	obja(mögen, Tier)
	subj(mögen, er)
	cj(aber, haben)
5
	det(Angst, keine)
	obja(mögen, Tier)
	pn(vor, sie)
	adv(haben, aber)
	pp(Angst, vor)
	det(Tier, keine)
	adv(haben, auch)
	obja(haben, Angst)
	kon(mögen, haben)
	subj(mögen, er)
6
	det(Angst, keine)
	pn(vor, sie)
	subj(haben, Angst)
	det(Tier, keine)
	kon(mögen, aber)
	adv(haben, auch)
	pp(Angst, vor)
	obja(mögen, Tier)
	subj(mögen, er)
	cj(aber, haben)

In [ ]: