In [2]:
import unicodecsv as csv

reader = csv.reader(open('../from_box/Master_Files_Fall_2018/CHUNKED.aligned_hand_deu_eng_2018_07_16.csv'), 
                    encoding='utf-8')

header = None
source_data = []
for rn, row in enumerate(reader):
    if rn == 0:
        header = row
    else:
        source_data.append(row)

print 'Loaded!'
Loaded!
In [3]:
import spacy

print spacy.__version__

en_nlp = spacy.load('en')
de_nlp = spacy.load('de')
2.0.11
In [9]:
import copy
from collections import defaultdict

all_ratios = []

for rn, row in enumerate(source_data):
    
    collected_nodes = defaultdict(int)
    collected_edges = defaultdict(int)
    
    n_german_tokens = 0
    
    for cn, cell in enumerate(row[2:]):
        
        if cn == 0:
            
            doc = de_nlp(unicode(cell))
            for token in doc:
                if token.is_stop == False and token.pos_ not in ['PUNCT', 'SPACE']:
                    n_german_tokens += 1
            
            continue
        
        doc = en_nlp(unicode(cell))
           
        all_tokens = ['START',]
        for token in doc:
            if token.is_stop == False and token.pos_ not in ['PUNCT', 'SPACE'] \
                and token.text.lower() not in ['n\'t', '\'ll', 'and', '\'s']:
                
                all_tokens.append(token.text.lower())
        all_tokens.append('END')
            
        for a in range(0, len(all_tokens)):
            collected_nodes[all_tokens[a]] += 1
            if a + 1 < len(all_tokens):
                collected_edges[(all_tokens[a], all_tokens[a + 1])] += 1
    
    all_ratios.append([(len(collected_nodes) / float(n_german_tokens)), rn])
 
sorted_all_ratios = copy.deepcopy(all_ratios)

sorted_all_ratios.sort()

print '5 lowest ratios', sorted_all_ratios[:5]
    
sorted_all_ratios.sort(reverse=True)

print '5 highest ratios', sorted_all_ratios[:5]
5 lowest ratios [[1.0, 187], [1.0198019801980198, 33], [1.043956043956044, 80], [1.127906976744186, 114], [1.1287128712871286, 122]]
5 highest ratios [[2.4857142857142858, 202], [2.4262295081967213, 144], [2.233009708737864, 140], [2.21875, 58], [2.183098591549296, 194]]
In [20]:
from collections import defaultdict
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import seaborn as sns

def graph_chunks(scored_rn_to_graph):

    from pylab import rcParams
    rcParams['figure.figsize'] = 30, 30

    sns.set_style("whitegrid")

    for rn, row in enumerate(source_data):
        
        if rn in scored_rn_to_graph:
            pass
        else: 
            continue

        print
        print (rn + 2), '-----------------------------------------------------------------------------'

        print
        print row[1]

        collected_nodes = defaultdict(int)
        collected_edges = defaultdict(int)

        n_german_tokens = 0

        for cn, cell in enumerate(row[2:]):

            if cn == 0:

                doc = de_nlp(unicode(cell))
                for token in doc:
                    if token.is_stop == False and token.pos_ not in ['PUNCT', 'SPACE']:
                        n_german_tokens += 1

                continue
                
            doc = en_nlp(unicode(cell))

            all_tokens = ['START',]
            for token in doc:
                if token.is_stop == False and token.pos_ not in ['PUNCT', 'SPACE'] \
                    and token.text.lower() not in ['n\'t', '\'ll', 'and', '\'s']:

                    all_tokens.append(token.text.lower())
            all_tokens.append('END')

            for a in range(0, len(all_tokens)):
                collected_nodes[all_tokens[a]] += 1
                if a + 1 < len(all_tokens):
                    collected_edges[(all_tokens[a], all_tokens[a + 1])] += 1

        print
        print 'n_german_tokens', n_german_tokens, 'n collected_nodes', len(collected_nodes)
        print 'RATIO', (len(collected_nodes) / float(n_german_tokens))

        G = nx.Graph()

        for k, v in collected_edges.iteritems():
            G.add_edge(k[0], k[1], weight=v)

        pos = nx.drawing.layout.spring_layout(G, iterations=100, weight="weight")

        fig, ax = plt.subplots()

        for k, v in collected_edges.iteritems():

            from_node = pos[k[0]]
            to_node = pos[k[1]]

            ax.plot([from_node[0], to_node[0]], 
                    [from_node[1], to_node[1]], 
                    color='#999999', linestyle='-', linewidth=(v * 2), zorder=1)

        for k, v in collected_nodes.iteritems():
            selected_color = '#000000'
            if k == 'START' or k == 'END':
                selected_color = '#FF0000'
            ax.text(pos[k][0], pos[k][1], k, fontsize=(v * 2), color=selected_color)

        ax.set_xlim(-1.1, 1.1)
        ax.set_ylim(-1.1, 1.1)
        plt.axis('off')
        plt.show()
In [21]:
print '----------------------------------------------------'
print '5 LOWEST RATIO CHUNKS'
print '----------------------------------------------------'

sorted_all_ratios.sort()

ratio_indexes = []
for r in sorted_all_ratios[:5]:
    ratio_indexes.append(r[1])
    
graph_chunks(ratio_indexes)
----------------------------------------------------
5 LOWEST RATIO CHUNKS
----------------------------------------------------

35 -----------------------------------------------------------------------------

 "Also kann der Herr Prokurist schon zu dir hinein?" fragte der ungeduldige Vater und klopfte wiederum an die Tür.  "Nein," sagte Gregor. Im Nebenzimmer links trat eine peinliche Stille ein, im Nebenzimmer rechts begann die Schwester zu schluchzen. Warum ging denn die Schwester nicht zu den anderen? Sie war wohl erst jetzt aus dem Bett aufgestanden und hatte noch gar nicht angefangen sich anzuziehen. Und warum weinte sie denn? Weil er nicht aufstand und den Prokuristen nicht hereinließ, weil er in Gefahr war, den Posten zu verlieren und weil dann der Chef die Eltern mit den alten Forderungen wieder verfolgen würde?

n_german_tokens 101 n collected_nodes 103
RATIO 1.0198019802
82 -----------------------------------------------------------------------------

Früh, als die Türen versperrt waren, hatten alle zu ihm hereinkommen wollen, jetzt, da er die eine Tür geöffnet hatte und die anderen offenbar während des Tages geöffnet worden waren, kam keiner mehr, und die Schlüssel steckten nun auch von außen. Spät erst in der Nacht wurde das Licht im Wohnzimmer ausgelöscht, und nun war leicht festzustellen, daß die Eltern und die Schwester so lange wachgeblieben waren, denn wie man genau hören konnte, entfernten sich jetzt alle drei auf den Fußspitzen.

n_german_tokens 91 n collected_nodes 95
RATIO 1.04395604396
116 -----------------------------------------------------------------------------

Später aber mußte man sie mit Gewalt zurückhalten, und wenn sie dann rief: "Laßt mich doch zu Gregor, er ist ja mein unglücklicher Sohn! Begreift ihr es denn nicht, daß ich zu ihm muß?", dann dachte Gregor, daß es vielleicht doch gut wäre, wenn die Mutter hereinkäme, nicht jeden Tag natürlich, aber vielleicht einmal in der Woche; sie verstand doch alles viel besser als die Schwester, die trotz all ihrem Mute doch nur ein Kind war und im letzten Grunde vielleicht nur aus kindlichem Leichtsinn eine so schwere Aufgabe übernommen hatte.

n_german_tokens 86 n collected_nodes 97
RATIO 1.12790697674
124 -----------------------------------------------------------------------------

Ich glaube, es wäre das beste, wir suchen das Zimmer genau in dem Zustand zu erhalten, in dem es früher war, damit Gregor, wenn er wieder zu uns zurückkommt, alles unverändert findet und um so leichter die Zwischenzeit vergessen kann." Beim Anhören dieser Worte der Mutter erkannte Gregor, daß der Mangel jeder unmittelbaren menschlichen Ansprache, verbunden mit dem einförmigen Leben inmitten der Familie, im Laufe dieser zwei Monate seinen Verstand hatte verwirren müssen, denn anders konnte er es sich nicht erklären, daß er ernsthaft darnach hatte verlangen können, daß sein Zimmer ausgeleert würde.

n_german_tokens 101 n collected_nodes 114
RATIO 1.12871287129
189 -----------------------------------------------------------------------------

 "Liebe Eltern," sagte die Schwester und schlug zur Einleitung mit der Hand auf den Tisch, "so geht es nicht weiter. Wenn ihr das vielleicht nicht einsehet, ich sehe es ein. Ich will vor diesem Untier nicht den Namen meines Bruders aussprechen und sage daher bloß: wir müssen versuchen es loszuwerden. Wir haben das Menschenmögliche versucht, es zu pflegen und zu dulden, ich glaube, es kann uns niemand den geringsten Vorwurf machen."

n_german_tokens 82 n collected_nodes 82
RATIO 1.0
In [22]:
print '----------------------------------------------------'
print '5 HIGHEST RATIO CHUNKS'
print '----------------------------------------------------'

sorted_all_ratios.sort(reverse=True)

ratio_indexes = []
for r in sorted_all_ratios[:5]:
    ratio_indexes.append(r[1])
    
graph_chunks(ratio_indexes)
----------------------------------------------------
5 HIGHEST RATIO CHUNKS
----------------------------------------------------

60 -----------------------------------------------------------------------------

Ich bin ja dem Herrn Chef so sehr verpflichtet, das wissen Sie doch recht gut. Andererseits habe ich die Sorge um meine Eltern und die Schwester. Ich bin in der Klemme, ich werde mich aber auch wieder herausarbeiten. Machen Sie es mir aber nicht schwieriger, als es schon ist. Halten Sie im Geschäft meine Partei! Man liebt den Reisenden nicht, ich weiß. Man denkt, er verdient ein Heidengeld und führt dabei ein schönes Leben.

n_german_tokens 64 n collected_nodes 142
RATIO 2.21875
142 -----------------------------------------------------------------------------

Nun aber war er doch gut aufgerichtet; in eine straffe blaue Uniform mit Goldknöpfen gekleidet, wie sie Diener der Bankinstitute tragen; über dem hohen steifen Kragen des Rockes entwickelte sich sein starkes Doppelkinn; unter den buschigen Augenbrauen drang der Blick der schwarzen Augen frisch und aufmerksam hervor; das sonst zerzauste weiße Haar war zu einer peinlich genauen, leuchtenden Scheitelfrisur niedergekämmt. Er warf seine Mütze, auf der ein Goldmonogramm, wahrscheinlich das einer Bank, angebracht war, über das ganze Zimmer im Bogen auf das Kanapee hin und ging, die Enden seines langen Uniformrockes zurückgeschlagen, die Hände in den Hosentaschen, mit verbissenem Gesicht auf Gregor zu.

n_german_tokens 103 n collected_nodes 230
RATIO 2.23300970874
146 -----------------------------------------------------------------------------

Es war ein Apfel; gleich flog ihm ein zweiter nach; Gregor blieb vor Schrecken stehen; ein Weiterlaufen war nutzlos, denn der Vater hatte sich entschlossen, ihn zu bombardieren. Aus der Obstschale auf der Kredenz hatte er sich die Taschen gefüllt und warf nun, ohne vorläufig scharf zu zielen, Apfel für Apfel. Diese kleinen roten Äpfel rollten wie elektrisiert auf dem Boden herum und stießen aneinander. Ein schwach geworfener Apfel streifte Gregors Rücken, glitt aber unschädlich ab.

n_german_tokens 61 n collected_nodes 148
RATIO 2.4262295082
196 -----------------------------------------------------------------------------

Er hatte bloß angefangen sich umzudrehen, um in sein Zimmer zurückzuwandern, und das nahm sich allerdings auffallend aus, da er infolge seines leidenden Zustandes bei den schwierigen Umdrehungen mit seinem Kopfe nachhelfen mußte, den er hierbei viele Male hob und gegen den Boden schlug. Er hielt inne und sah sich um. Seine gute Absicht schien erkannt worden zu sein; es war nur ein augenblicklicher Schrecken gewesen. Nun sahen ihn alle schweigend und traurig an.

n_german_tokens 71 n collected_nodes 155
RATIO 2.18309859155
204 -----------------------------------------------------------------------------

Als sie bald den wahren Sachverhalt erkannte, machte sie große Augen, pfiff vor sich hin, hielt sich aber nicht lange auf, sondern riß die Tür des Schlafzimmers auf und rief mit lauter Stimme in das Dunkel hinein: "Sehen Sie nur mal an, es ist krepiert; da liegt es, ganz und gar krepiert!" Das Ehepaar Samsa saß im Ehebett aufrecht da und hatte zu tun, den Schrecken über die Bedienerin zu verwinden, ehe es dazu kam, ihre Meldung aufzufassen.

n_german_tokens 70 n collected_nodes 174
RATIO 2.48571428571