broken coference chains (connected components) in PCC

repo: ~/repos/pcc-development-repo
commit 872ef40c435f2d67c6cd45f51e396767b92ba005
Date: Sat Jan 24 11:18:25 2015 +0100


In [54]:
# %load_ext gvmagic

In [10]:
import os
import glob
from itertools import combinations

import discoursegraphs as dg

MMAX_DIR = os.path.expanduser('~/repos/pcc-development-repo/maz176/coreference/')

get all mmax documents in which a markable occurs in more than one coreference chain


In [12]:
def get_ambiguous_markables(mmax_docgraph):
    """returns a list of markables that occur in more than one coreference chain"""
    ambiguous_markables = []
    chain_sets = (set(chain) for chain in dg.get_pointing_chains(mmax_docgraph))
    for chain1, chain2 in combinations(chain_sets, 2):
        chain_intersect = chain1.intersection(chain2)
        if chain_intersect:
            ambiguous_markables.extend(chain_intersect)
    return ambiguous_markables

In [16]:
files_with_ambigious_chains = {}
for mmax_file in glob.glob(os.path.join(MMAX_DIR, '*.mmax')):
    mdg = dg.read_mmax2(mmax_file)
    ambigous_markables = get_ambiguous_markables(mdg)
    if ambigous_markables:
        files_with_ambigious_chains[mmax_file] = ambigous_markables

In [17]:
len(files_with_ambigious_chains)


Out[17]:
25

In [22]:
# for filename in files_with_ambigious_chains:
#     print os.path.basename(filename), len(files_with_ambigious_chains[filename])

from operator import itemgetter

In [34]:
sorted([(os.path.basename(fpath), len(ambig_elems))
        for (fpath, ambig_elems) in files_with_ambigious_chains.items()],
       key=itemgetter(1), reverse=True)


Out[34]:
[('maz-11299.mmax', 70),
 ('maz-19074.mmax', 9),
 ('maz-10205.mmax', 7),
 ('maz-9884.mmax', 7),
 ('maz-00001.mmax', 6),
 ('maz-18712.mmax', 4),
 ('maz-1453.mmax', 3),
 ('maz-16294.mmax', 3),
 ('maz-13915.mmax', 3),
 ('maz-17539.mmax', 2),
 ('maz-14399.mmax', 2),
 ('maz-8134.mmax', 2),
 ('maz-18171.mmax', 2),
 ('maz-10207.mmax', 2),
 ('maz-18354.mmax', 2),
 ('maz-12576.mmax', 2),
 ('maz-6728.mmax', 2),
 ('maz-18480.mmax', 1),
 ('maz-19372.mmax', 1),
 ('maz-6488.mmax', 1),
 ('maz-18377.mmax', 1),
 ('maz-3377.mmax', 1),
 ('maz-3073.mmax', 1),
 ('maz-2611.mmax', 1),
 ('maz-16987.mmax', 1)]

Visualizing ambiguous coreference annotations with discoursegraphs


In [39]:
from collections import defaultdict
import networkx as nx

from discoursegraphs import get_text

def get_ambiguous_chains(mmax_docgraph, token_labels=False):
    """
    Returns a list of networkx graphs that represent ambiguous
    coreference chains. An ambiguous chain represents two or more
    coreference chains that share at least one markable.
    
    There should be no ambiguous coreference chains, but the
    current version of our annotation guidelines allow them. // SRSLY?
    """
    ambiguous_markables = get_ambiguous_markables(mmax_docgraph)    
    coreference_chains = dg.get_pointing_chains(mmax_docgraph)
    markable2chain = defaultdict(list)
    for i, chain in enumerate(coreference_chains):
        for markable in chain:
            if markable in ambiguous_markables:
                markable2chain[markable].append(i)
    
    chain_graphs = []
    for markable in markable2chain:
        ambig_chain_ids = markable2chain[markable]
        chain_graph = nx.MultiDiGraph()
        chain_graph.name = mmax_docgraph.name
        for chain_id in ambig_chain_ids:
            ambig_chain = coreference_chains[chain_id]
            for i, markable in enumerate(ambig_chain[:-1]):
                chain_graph.add_edge(markable, ambig_chain[i+1])

        if token_labels:
            for markable in chain_graph.nodes_iter():
                markable_text = get_text(mmax_docgraph, markable)
                chain_graph.node[markable]['label'] = markable_text
        
        chain_graphs.append(chain_graph)
    return chain_graphs

In [71]:
# docs_with_ambiguous_chains = {}

# for mmax_file in glob.glob(os.path.join(MMAX_DIR, '*.mmax')):
#     mdg = dg.read_mmax2(mmax_file)
#     ambigous_chains = get_ambiguous_chains(mdg)
#     if ambigous_chains:
#         docs_with_ambiguous_chains[mmax_file] = ambigous_chains

In [70]:
docs_with_merged_chains = {}

for mmax_file in glob.glob(os.path.join(MMAX_DIR, '*.mmax')):
    mdg = dg.read_mmax2(mmax_file)
    ambigous_chains = get_ambiguous_chains(mdg, token_labels=True)
    if ambigous_chains:
        merged_chain = merge_ambiguous_chains(ambigous_chains)
        docs_with_merged_chains[mmax_file] = merged_chain

In [57]:
print len(docs_with_ambiguous_chains), len(docs_with_merged_chains)


25 25

In [72]:
%dotstr dg.print_dot(docs_with_merged_chains.items()[0][1])


maz-10205.mmax name maz-10205.mmax markable_26 die meisten jüngeren Autoren markable_49 Die markable_48 auf die alten markable_49->markable_48 markable_28 der Altgedienten markable_48->markable_28 markable_34 die öffentliche Meinung markable_55 Günter Grass , Christa Wolf oder Stefan Heym markable_55->markable_28 markable_22 Unter den namhaften deutschen Schriftstellern die von Gerhard Schröder am Samstagabend empfangen wurden , markable_28->markable_22 markable_43 sie markable_42 Die jungen Autoren markable_43->markable_42 markable_42->markable_26 markable_32 ein großer Teil der deutschen Intellektuellen markable_32->markable_26 markable_41 sie markable_40 zu den Meinungsführern markable_41->markable_40 markable_40->markable_34 markable_40->markable_22

In [37]:
def merge_ambiguous_chains(ambiguous_chains):
    """
    Parameters
    ----------
    ambiguous_chains : list of MultiDiGraph
        a list of graphs, each representing an ambiguous coreference chain
    """
    merged_chain = nx.DiGraph(nx.compose_all(ambiguous_chains))
    merged_chain.add_node('name', shape='tab',
                          color='blue',
                          label=ambiguous_chains[0].name)
    for node in merged_chain:
        if merged_chain.in_degree(node) > 1 \
        or merged_chain.out_degree(node) > 1:
            merged_chain.node[node]['color'] = 'red'
    return merged_chain

In [73]:
for doc in docs_with_merged_chains:
    print doc
    %dotstr dg.print_dot(docs_with_merged_chains[doc])
#     dg.print_dot(merged_graph)

# %dotstr dg.print_dot(docs_with_ambiguous_chains[docs_with_ambiguous_chains.keys()[0]][0])


/home/arne/repos/pcc-development-repo/maz176/coreference/maz-10205.mmax
maz-10205.mmax name maz-10205.mmax markable_26 die meisten jüngeren Autoren markable_49 Die markable_48 auf die alten markable_49->markable_48 markable_28 der Altgedienten markable_48->markable_28 markable_34 die öffentliche Meinung markable_55 Günter Grass , Christa Wolf oder Stefan Heym markable_55->markable_28 markable_22 Unter den namhaften deutschen Schriftstellern die von Gerhard Schröder am Samstagabend empfangen wurden , markable_28->markable_22 markable_43 sie markable_42 Die jungen Autoren markable_43->markable_42 markable_42->markable_26 markable_32 ein großer Teil der deutschen Intellektuellen markable_32->markable_26 markable_41 sie markable_40 zu den Meinungsführern markable_41->markable_40 markable_40->markable_34 markable_40->markable_22
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-18480.mmax
maz-18480.mmax markable_6 die Schule markable_20 in den Schulen markable_20->markable_6 markable_10 Sie markable_10->markable_6 name maz-18480.mmax
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-17539.mmax
maz-17539.mmax name maz-17539.mmax markable_100025 sie markable_100016 ihrer markable_100025->markable_100016 markable_1000128 ihrer markable_47 den Güterfelder Gemeindevertretern markable_1000128->markable_47 markable_1 die Güterfelder Gemeindevertreter markable_100010 ihrer markable_47->markable_100010 markable_100016->markable_100010 markable_100010->markable_1
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-19372.mmax
maz-19372.mmax name maz-19372.mmax markable_7 auf die Wittstocker Region markable_24 die Stadt markable_22 die Stadt Wittstock markable_24->markable_22 markable_21 der Region markable_21->markable_7 markable_22->markable_7
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-14399.mmax
maz-14399.mmax name maz-14399.mmax markable_1 zwei Frischlinge markable_9 den Gegnern der Jägerei markable_18 der Jagdgegner markable_18->markable_9 markable_10 die " Initiative zur Abschaffung der Jagd " markable_10->markable_9 markable_3 Kotelett markable_3->markable_1 markable_2 Schnitzel markable_2->markable_1
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-18712.mmax
maz-18712.mmax name maz-18712.mmax markable_26 mit Giersberg markable_25 er markable_26->markable_25 markable_20 ihm markable_8 der frühere Generaldirektor der Schlösserstiftung markable_20->markable_8 markable_5 ihm markable_8->markable_5 markable_33 seinem markable_32 Sein markable_33->markable_32 markable_3 ihm markable_5->markable_3 markable_29 Giersberg markable_35 Sein markable_29->markable_35 markable_24 er markable_24->markable_20 markable_35->markable_26 markable_14 Giersberg markable_32->markable_14 markable_2 für Hans-Joachim Giersberg markable_3->markable_2 markable_25->markable_24 markable_14->markable_8
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-1453.mmax
maz-1453.mmax markable_27 die Bevölkerung markable_26 Die Damsdorfer markable_27->markable_26 name maz-1453.mmax markable_2 die Damsdorfer markable_26->markable_2 markable_100015 für Lehnin markable_1000172 zu Lehnin markable_1000172->markable_100015 markable_1000165 sie markable_1000158 Sie markable_1000165->markable_1000158 markable_76 die Damsdorfer markable_42 Die Damsdorfer markable_76->markable_42 markable_57 Die Lehniner Gemeinden markable_57->markable_100015 markable_1000176 sie markable_1000176->markable_1000165 markable_1000158->markable_76 markable_42->markable_26
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-16294.mmax
maz-16294.mmax name maz-16294.mmax markable_78 von der PDS markable_100020 ihre markable_78->markable_100020 markable_8 mit der SPD markable_2 für die PDS markable_100020->markable_2 markable_12 die Genossen in der Region markable_12->markable_8 markable_12->markable_100020
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-6488.mmax
maz-6488.mmax name maz-6488.mmax markable_49 Ein multifunktionales Objekt mit Umkleide- und Treffmöglichkeiten als angeblich bessere Variante markable_50 eine fiktive Idee markable_36 diese markable_36->markable_49 markable_36->markable_50
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-8134.mmax
maz-8134.mmax name maz-8134.mmax markable_100014 Karwe markable_16 die Karwer markable_16->markable_100014 markable_100041 sie markable_100041->markable_16 markable_1000129 Karwe markable_1000129->markable_16
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-19074.mmax
maz-19074.mmax markable_30 Arafat markable_29 Arafat markable_30->markable_29 name maz-19074.mmax markable_31 Scharon markable_28 Scharon markable_31->markable_28 markable_49 für Arafat markable_49->markable_30 markable_48 vom israelischen Premier markable_48->markable_31 markable_27 Jassir Arafat markable_22 für Arafat markable_27->markable_22 markable_39 die Palästinenser markable_39->markable_30 markable_34 diesen Poker markable_57 Ein Schachspiel mit Konsequenzen für Leben und Tod . markable_34->markable_57 markable_29->markable_27 markable_38 sie markable_35 die Israelis markable_38->markable_35 markable_43 Die Folge markable_43->markable_34 markable_26 Ariel Scharon markable_42 sie markable_42->markable_39 markable_28->markable_26 markable_35->markable_31 markable_52 für den Palästinenserchef markable_52->markable_49 markable_53 im Duell der alten Haudegen markable_53->markable_34
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-18377.mmax
maz-18377.mmax name maz-18377.mmax markable_100056 sie markable_100047 sie markable_100056->markable_100047 markable_48 Die einen markable_3 Die Kränzliner Mankerer Wustrauer Walchower und Protzener markable_48->markable_3 markable_100016 Sie markable_100016->markable_3 markable_1000138 die die später dazugekommen sind markable_1000110 ihr markable_1000138->markable_1000110 markable_1000110->markable_48 markable_14 der Bürger markable_14->markable_100016 markable_100047->markable_14
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-9884.mmax
maz-9884.mmax name maz-9884.mmax markable_38 auf Schröder und Fischer markable_90 auf Abgeordnete markable_39 beide markable_39->markable_38 markable_46 ihr markable_46->markable_90 markable_97 von Kanzler und Außenminister markable_58 der Regierung markable_97->markable_58 markable_63 ihr markable_62 den Kritikern markable_63->markable_62 markable_40 ihre markable_40->markable_39 markable_57 aus dem pazifistischen Lager markable_62->markable_90 markable_62->markable_57 markable_66 sie markable_66->markable_97 markable_58->markable_38 markable_53 der Regierenden markable_53->markable_39
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-00001.mmax
maz-00001.mmax name maz-00001.mmax markable_31 der Finanzministerin markable_100019 sie markable_31->markable_100019 markable_1000194 zu Reiches Personalpapier markable_50 das Konzept markable_1000194->markable_50 markable_18 eine seit mehr als einem Jahr erarbeitete Kabinettsvorlage markable_23 das Finanz- markable_23->markable_100019 markable_25 das Lehrerpersonalkonzept markable_50->markable_25 markable_64 die Angebote des vorzeitigen Ausstiegs markable_64->markable_50 markable_100038 darüber markable_25->markable_100038 markable_3 Dagmar Ziegler markable_100019->markable_3 markable_100038->markable_18
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-18171.mmax
maz-18171.mmax name maz-18171.mmax markable_100030 sie markable_11 die Bauaufsicht markable_100030->markable_11 markable_100031 ihren markable_100031->markable_100030 markable_1000142 ihre markable_64 Die Bauverwaltung markable_1000142->markable_64 markable_53 die Bauaufsicht markable_64->markable_53 markable_53->markable_100030
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-3377.mmax
maz-3377.mmax name maz-3377.mmax markable_3 alle markable_1 unter den Dallgower Kommunalpolitikern markable_3->markable_1 markable_9 die SPD-Fraktion markable_9->markable_1 markable_13 sie markable_13->markable_9 markable_14 sie markable_14->markable_13
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-3073.mmax
maz-3073.mmax markable_1 Während der vergangenen Monate markable_10 in diesen Tagen markable_5 In der Erntezeit markable_10->markable_5 markable_2 für die Wochenenden markable_2->markable_1 markable_5->markable_1 name maz-3073.mmax
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-10207.mmax
maz-10207.mmax name maz-10207.mmax markable_1 an der Verwaltungsspitze der Städte Perleberg und Pritzwalk markable_8 an beide markable_5 beide markable_8->markable_5 markable_4 Die Amtsinhaber markable_5->markable_4 markable_4->markable_1 markable_25 mit den alten Namen der Amtsträger markable_25->markable_4
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-18354.mmax
maz-18354.mmax markable_24 Die Trasse markable_8 der Ortsumgehung Jüterbog markable_24->markable_8 markable_100056 die markable_100056->markable_24 markable_1000160 trotz Umgehung markable_1000160->markable_24 name maz-18354.mmax
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-11299.mmax
maz-11299.mmax name maz-11299.mmax markable_70 die Politiker markable_1000132 ihnen markable_70->markable_1000132 markable_1000131 sie markable_70->markable_1000131 markable_1000208 drei Erwachsene markable_1000207 Karola Andrae ( Bürgerbündnis/FDP ) , Susanne Michler ( CDU ) und Joachim Zanow ( SPD markable_1000207->markable_1000208 markable_23 die beiden geladenen Jugendlichen markable_3 Die Jugendlichen in Zossen markable_23->markable_3 markable_1000132->markable_1000207 markable_1000122 sie markable_1000132->markable_1000122 markable_63 Die Jugendlichen markable_63->markable_1000132 markable_63->markable_1000131 markable_1000184 sie markable_1000149 mit ihnen markable_1000184->markable_1000149 markable_1000149->markable_63 markable_100011 sie markable_100011->markable_3 markable_1000122->markable_23 markable_1000131->markable_1000207 markable_1000131->markable_1000122
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-2611.mmax
maz-2611.mmax name maz-2611.mmax markable_1000119 Timm markable_51 der Abgeordnete Otto Timm markable_1000119->markable_51 markable_1000106 seiner markable_1000106->markable_51
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-12576.mmax
maz-12576.mmax name maz-12576.mmax markable_9 die Stadtverordneten markable_100037 Sie markable_100037->markable_9 markable_63 der Stadtverordneten markable_63->markable_100037 markable_1000162 ihrer markable_74 bei den Abgeordneten markable_1000162->markable_74 markable_100041 ihnen markable_100041->markable_100037 markable_74->markable_63
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-6728.mmax
maz-6728.mmax markable_1000148 Er markable_1000141 seiner markable_1000148->markable_1000141 name maz-6728.mmax markable_67 Der Verein Historisches Reckahn mit seinem Vorsitzenden Otto-Günther Beckmann markable_1000141->markable_67 markable_65 mit seinem Vorsitzenden Otto-Günther Beckmann markable_1000141->markable_65
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-16987.mmax
maz-16987.mmax name maz-16987.mmax markable_1000119 dies markable_52 eine Erklärung markable_1000119->markable_52 markable_62 Aus der Erklärung markable_62->markable_52
/home/arne/repos/pcc-development-repo/maz176/coreference/maz-13915.mmax
maz-13915.mmax markable_1 die Stadt markable_7 sie markable_6 sie markable_7->markable_6 markable_5 die Stadt markable_6->markable_5 markable_5->markable_1 markable_25 ihr markable_25->markable_7 markable_24 die Stadt markable_24->markable_6 name maz-13915.mmax

In [76]:
dg.get_text(dg.read_mmax2('/home/arne/repos/pcc-development-repo/maz176/coreference/maz-9884.mmax'))


Out[76]:
u'Dilemma Verrat , hat Talleyrand einmal zynisch bemerkt , ist nur eine Frage des Datums . Und des Gewissens , m\xf6chte man mit Blick auf Schr\xf6der und Fischer hinzuf\xfcgen . Nicht , dass beide eine Mehrheit f\xfcr ihre Koalition suchten , war das \xc4rgerliche in den vergangenen Tagen , sondern das Wie , der Druck auf Abgeordnete , die kein Regierungsamt haben und ihr Gewissen deshalb auch nicht in den Vorzimmern der Macht abgeben k\xf6nnen . Gut , dass wir eine rot-gr\xfcne Koalition haben , sto\xdfseufzen viele hinter vorgehaltener Hand , andernfalls w\xfcrde die Republik brennen . Und das ist das Dilemma der Regierenden . Wer in der Zeit , da er noch nach \xc4mtern strebte , mit eben denselben Argumenten , die heute aus dem pazifistischen Lager der Regierung entgegenschallen , Kohl , Genscher und Kinkel verteufelte , hat kein Recht , den Kritikern ihr Gewissen abzusprechen . Die anf\xe4ngliche \xdcberreaktion von Kanzler und Au\xdfenminister hat eben auch damit zu tun , dass sie als Bekehrte das Misstrauen jener f\xfcrchten , die mit Amerika schon kritische Solidarit\xe4t \xfcbten , als Schr\xf6der noch Schmidt wegen dessen Amerikah\xf6rigkeit beschimpfte und Fischer in Mutlangen gegen die Nachr\xfcstung demonstrierte . Es stimmt schon , Schmidt , Kohl und Genscher h\xe4tten in Washington sehr viel genauer nach Strategie und Zielen fragen k\xf6nnen , da sie nicht vor der eigenen Vergangenheit weglaufen mussten . Wie hat das Bismarck einmal formuliert ? Die Geschichte ist so genau wie die preu\xdfische Oberrechnungskammer .'

In [80]:
%dotstr dg.print_dot(docs_with_merged_chains['/home/arne/repos/pcc-development-repo/maz176/coreference/maz-9884.mmax'])


maz-9884.mmax name maz-9884.mmax markable_38 auf Schröder und Fischer markable_90 auf Abgeordnete markable_39 beide markable_39->markable_38 markable_46 ihr markable_46->markable_90 markable_97 von Kanzler und Außenminister markable_58 der Regierung markable_97->markable_58 markable_63 ihr markable_62 den Kritikern markable_63->markable_62 markable_40 ihre markable_40->markable_39 markable_57 aus dem pazifistischen Lager markable_62->markable_90 markable_62->markable_57 markable_66 sie markable_66->markable_97 markable_58->markable_38 markable_53 der Regierenden markable_53->markable_39

In [91]:
simple_digraph = u"""
digraph "maz-9884.mmax" {
"markable_38" [label="auf Schröder und Fischer"];
"markable_39" [label="beide"];
"markable_97" [label="von Kanzler und Außenminister"];
"markable_40" [label="ihre"];
"markable_66" [label="sie"];
"markable_58" [label="der Regierung"];
"markable_53" [label="der Regierenden"];

"markable_39" -> "markable_38"  [key=0];
"markable_97" -> "markable_58"  [key=0];
"markable_40" -> "markable_39"  [key=0];
"markable_66" -> "markable_97"  [key=0];
"markable_58" -> "markable_38"  [key=0];
"markable_53" -> "markable_39"  [key=0];
}"""

simple_digraph2 = u"""
digraph "maz-9884.mmax" {
"markable_38" [shape=box, label="auf Schröder und Fischer\non Schröder and Fischer"];
"markable_39" [shape=box, label="beide\nboth"];
"markable_97" [shape=box, label="von Kanzler und Außenminister\nof Chancellor and Foreign Minister"];
"markable_40" [shape=box, label="ihre\ntheir"];
"markable_66" [shape=box, label="sie\nthey"];
"markable_58" [shape=box, label="der Regierung\nthe government"];
"markable_53" [shape=box, label="der Regierenden\nthe rulers"];

"markable_39" -> "markable_38"  [key=0];
"markable_97" -> "markable_58"  [key=0];
"markable_40" -> "markable_39"  [key=0];
"markable_66" -> "markable_97"  [key=0];
"markable_58" -> "markable_38"  [key=0];
"markable_53" -> "markable_39"  [key=0];
}"""

%dotstr simple_digraph2


maz-9884.mmax markable_38 auf Schröder und Fischer on Schröder and Fischer markable_39 beide both markable_39->markable_38 markable_97 von Kanzler und Außenminister of Chancellor and Foreign Minister markable_58 der Regierung the government markable_97->markable_58 markable_40 ihre their markable_40->markable_39 markable_66 sie they markable_66->markable_97 markable_58->markable_38 markable_53 der Regierenden the rulers markable_53->markable_39

In [ ]:


In [ ]: