Added some explanations
0
.gitignore
vendored
Normal file → Executable file
0
app/Dockerfile
Normal file → Executable file
0
app/Pipfile
Normal file → Executable file
0
app/Pipfile.lock
generated
Normal file → Executable file
0
app/blog/migrations/__init__.py
Normal file → Executable file
0
app/blog/static/blog/images/one_protocol.png
Normal file → Executable file
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
0
app/blog/static/blog/images/one_speech.png
Normal file → Executable file
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
0
app/blog/static/blog/images/slide_ngram_viewer.png
Normal file → Executable file
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
0
app/blog/static/blog/images/slider_profile.png
Normal file → Executable file
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
@ -7,20 +7,21 @@ class NgramForm(forms.Form):
|
|||||||
"""
|
"""
|
||||||
CORPUS_CHOICE = [('lm_ns_year', 'Lemmatisiert ohne Stoppwörter'),
|
CORPUS_CHOICE = [('lm_ns_year', 'Lemmatisiert ohne Stoppwörter'),
|
||||||
('tk_ws_year', 'Nicht lemmatisiert mit Stoppwörtern'), ]
|
('tk_ws_year', 'Nicht lemmatisiert mit Stoppwörtern'), ]
|
||||||
query = forms.CharField(label="Suche Ngramme", max_length="200")
|
query = forms.CharField(label="Suche N-Gramme", max_length="200")
|
||||||
case_sensitive = forms.BooleanField(label="case-sensitive", required=False)
|
case_sensitive = forms.BooleanField(label="case-sensitive", required=False)
|
||||||
search_plus = forms.BooleanField(label="search-plus", required=False)
|
search_plus = forms.BooleanField(label="search-plus", required=False)
|
||||||
ignore_missing = forms.BooleanField(label="fill-zeros", required=False)
|
ignore_missing = forms.BooleanField(label="fill-zeros", required=False)
|
||||||
|
|
||||||
corpus_choice = forms.ChoiceField(label="Wählen Sie einen Corpus", choices=CORPUS_CHOICE)
|
corpus_choice = forms.ChoiceField(label="Wählen Sie einen Corpus", choices=CORPUS_CHOICE)
|
||||||
|
|
||||||
|
|
||||||
class NgramFormSpeaker(forms.Form):
|
class NgramFormSpeaker(forms.Form):
|
||||||
"""
|
"""
|
||||||
Describes and configures the input html form for the Ngram Viewer per speaker.
|
Describes and configures the input html form for the Ngram Viewer per speaker.
|
||||||
"""
|
"""
|
||||||
CORPUS_CHOICE = [('lm_ns_speaker', 'Lemmatisiert ohne Stoppwörter'),
|
CORPUS_CHOICE = [('lm_ns_speaker', 'Lemmatisiert ohne Stoppwörter'),
|
||||||
('tk_ws_speaker', 'Nicht lemmatisiert mit Stoppwörtern'), ]
|
('tk_ws_speaker', 'Nicht lemmatisiert mit Stoppwörtern'), ]
|
||||||
query = forms.CharField(label="Suche Ngramm", max_length="200")
|
query = forms.CharField(label="Suche N-Gramm", max_length="200")
|
||||||
case_sensitive = forms.BooleanField(label="case-sensitive", required=False)
|
case_sensitive = forms.BooleanField(label="case-sensitive", required=False)
|
||||||
search_plus = forms.BooleanField(label="search-plus", required=False)
|
search_plus = forms.BooleanField(label="search-plus", required=False)
|
||||||
ignore_missing = forms.BooleanField(label="fill-zeros", required=False)
|
ignore_missing = forms.BooleanField(label="fill-zeros", required=False)
|
||||||
|
0
app/ngram_viewer/migrations/__init__.py
Normal file → Executable file
@ -65,7 +65,7 @@ query. This creates the ngram viewer per speaker. -->
|
|||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<div class="input-field col s12">
|
<div class="input-field col s12">
|
||||||
<i class="material-icons prefix">filter_9_plus</i>
|
<i class="material-icons prefix blue-grey-text darken-4">filter_9_plus</i>
|
||||||
<input id="id_query" type="text" name="{{form.range.html_name}}" class="autocomplete materialize-textarea validate" {% if form.range.value != None %}value = "{{form.range.value}}" {% else %}value = "10" {% endif %}}>
|
<input id="id_query" type="text" name="{{form.range.html_name}}" class="autocomplete materialize-textarea validate" {% if form.range.value != None %}value = "{{form.range.value}}" {% else %}value = "10" {% endif %}}>
|
||||||
<label for="id_range">{{form.range.label}}</label>
|
<label for="id_range">{{form.range.label}}</label>
|
||||||
</div>
|
</div>
|
||||||
@ -76,14 +76,109 @@ query. This creates the ngram viewer per speaker. -->
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="collapsible">
|
<ul class="collapsible white">
|
||||||
|
<li class="active">
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">info_outline</i>Was ist das hier?</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Mit diesem Tool können alle Protokolle von 1949 bis 2017
|
||||||
|
nach einem Begriff durchsucht werden. Für diesen
|
||||||
|
wird pro MdB dargestellt wie häufig dieses in seinen Reden
|
||||||
|
und Redebeiträgen den gesuchten Begriff verwendet hat.
|
||||||
|
</p>
|
||||||
|
<p>Der Begriff kann eine Phrase mit der Länge von
|
||||||
|
ein bis fünf Wörter sein.
|
||||||
|
Eine weitere Suchanfrage wäre z.B. "Steuer erhöhen"</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">info_outline</i>Hilfe und Hinweise</div>
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">search</i>Muster der Suchanfrage</div>
|
||||||
<div class="collapsible-body white">
|
<div class="collapsible-body">
|
||||||
<h6>Muster der Suchanfrage<h6>
|
<p>Eine Suchanfrage ist ein einzelner Begriff bzw. einzelne Phrase.</p>
|
||||||
<p></p>
|
<p>Die beispielhafte Suchanfrage "Ausländer"
|
||||||
<h6>Suchgeschwindigkeit<h6>
|
fragt somit die Häufigkeit des Begriffs ab.
|
||||||
<p></p>
|
Es kann nur ein BEgriff gleichzeitig gesucht werden.</p>
|
||||||
|
<p>Eine weitere Suchanfrage wäre z.B. "Steuerflucht"</p>
|
||||||
|
<p>Es können nicht nur einzelne Wörter, sondern je nach Korpus
|
||||||
|
Phrasen mit einer Länge von bis zu fünf Wörtern abgefragt werden.
|
||||||
|
Eine beispielhafte Suchanfrage wäre z.B. "Steuer erhöhen".
|
||||||
|
</p>
|
||||||
|
<p>Möglich wird diese Art der Abfrage dadurch, das für alle Protokolle
|
||||||
|
sogenannte N-Gramme berechnet wurden.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">short_text</i>Was sind N-Gramme?</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Für die Berechnung von N-Grammen wird ein Text in einzelne
|
||||||
|
Fragmente zerlegt, die dann in ihrer Häufigkeit gezählt werden können.
|
||||||
|
N gibt hierbei die Länge der einzelen Fragmente an.
|
||||||
|
Ist z.B. der Satz "to be or not to be that is the question."
|
||||||
|
gegeben, kann für diesen die dazugehörigen 1-Gramme berechnet werden.
|
||||||
|
Diese wären dann: "to, be, or, not, to, be, that, is, the, question".
|
||||||
|
Nun kann die Häufigkeit der einzelnen Wörter gezählt werden.
|
||||||
|
Somit kommen die Wörter "to" und "be" zweimal vor und die restlichen
|
||||||
|
Wörter jeweils einmal.</p>
|
||||||
|
<p>Diese Art der Berechnung kann dann auch für 2-Gramme durchgführt
|
||||||
|
werden. Der Satz würde dafür in folgende Fragemente zerlegt werden:
|
||||||
|
"To be, be or, or not, not to, to be, be that, that is, is the, the question".
|
||||||
|
Nun kann die Häufigkeit von zwei aufeinander folgenden Wörtern ermittelt werden.
|
||||||
|
Die Phrase "to be" kommt innerhalb des Satzes somit zweimal
|
||||||
|
und alle anderen nur einmal vor.</p>
|
||||||
|
<p>Dieser Prozess kann weitere Male wiederholt werden z.B. für 3-, 4- oder 5-Gramme.</p>
|
||||||
|
<p>Diese Art der Berechnung wurde für alle Protokolle der Bundestagssitzungen
|
||||||
|
seit 1949 bis 2017 durchgeführt, um die Häufigkeiten verschiedener
|
||||||
|
Begriffe bzw. Phrasen pro Jahr darstellen zu können.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">filter_2</i>Verschiedene Korpora</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Mit der Option "Korpus" kann zwischen zwei verschiedenen
|
||||||
|
Korpora gewechselt werden, an die die Suchanfrage gestellt wird.</p>
|
||||||
|
<p>Bei der Korpusauswahl "Lemmatisiert ohne Stoppwörter" werden
|
||||||
|
N-Gramme abgefragt, die auf Grundlage der lemmatisierten Protokolle
|
||||||
|
ohne Stopwörter berechnet wurden. Das bedeutet, dass alle Wörter der
|
||||||
|
Protokolle auf ihre Grundform zurückgeführt und häufige
|
||||||
|
Wörter wie "ist" oder "ein" entfernt wurden. Aus dem Satz
|
||||||
|
"Guten Morgen, liebe Kolleginnen und Kollegen! Ich begrüße Sie alle herzlich."
|
||||||
|
wird so die Zeichenfolge
|
||||||
|
"Guten Morgen lieb Kollegin Kollege ich begrüßen ich herzlich"
|
||||||
|
N-Gramme die für die beiden Sätze berechnet werden unterscheiden sich somit
|
||||||
|
erheblich.</p>
|
||||||
|
<p> Der Korpus "Nicht lemmatisiert mit Stoppwörtern" lässt den
|
||||||
|
Satz unberührt.</p>
|
||||||
|
<p>Beide Korpora eignen sich für verschiedene Suchanfragen.
|
||||||
|
Möchte eher die Häufigkeit von zusammengefassten Begriffen ermittelt
|
||||||
|
werden, kann der Korpus "Lemmatisiert ohne Stoppwörter" verwendet
|
||||||
|
werden. <br />
|
||||||
|
Werden jedoch eher ganze Phrasen wie "Kampf gegen den Terror"
|
||||||
|
gesucht, sollte der Korpus "Nicht lemmatisiert mit Stoppwörtern"
|
||||||
|
vewrwendet werden.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">close</i>Grenzen der Suchanfrage</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Für den Korpus "Lemmatisiert ohne Stoppwörter" können 1-
|
||||||
|
bis 5-Gramme abgefragt werden.</p>
|
||||||
|
<p>Der Korpus "Nicht lemmatisiert mit Stoppwörtern" ist auf
|
||||||
|
eine Abfrage von 1- bis 4-Grammen begrenzt.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">access_time</i>Suchgeschwindigkeit</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Die Suchanfragen für 1-Gramme ist sehr schnell.
|
||||||
|
Werden komplexere 2-, 3-, 4- oder 5-Gramme abgefragt, ist mit
|
||||||
|
einer Bearbeitungszeit von einigen Sekunden zu rechnen.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">poll</i>Interpretation der Daten</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Aus den Ergebnissen einer Suchanfrage sollten keine vorschnellen
|
||||||
|
Kausalitäten abgeleitet werden. Die verschiedenen Häufigkeiten sollten
|
||||||
|
immer im Kontext ihrer Zeit und politscher Ereignisse gesehen werden.</p>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -76,14 +76,113 @@ query. This creates the ngram viewer per year. -->
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="collapsible">
|
<ul class="collapsible white">
|
||||||
|
<li class="active">
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">info_outline</i>Was ist das hier?</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Mit diesem Tool können alle Protokolle von 1949 bis 2017
|
||||||
|
nach verschiedenen Begriffen durchsucht werden. Für jeden
|
||||||
|
Begriff wird pro Jahr dargestellt wie häufig dieser von den
|
||||||
|
Rednern und MdBs im deutschen Bundestag in deren
|
||||||
|
Reden und Redebeiträge insgesamt verwendet wurde.</p>
|
||||||
|
<p>Begriffe bzw. Phrasen können ein bis fünf Wörter lang sein.
|
||||||
|
Eine weitere Suchanfrage wäre z.B. "Steuer erhöhen, Steuer senken, schwarze Null"</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">info_outline</i>Hilfe und Hinweise</div>
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">search</i>Muster der Suchanfrage</div>
|
||||||
<div class="collapsible-body white">
|
<div class="collapsible-body">
|
||||||
<h6>Muster der Suchanfrage<h6>
|
<p>Eine Suchanfrage ist eine durch Kommata getrennte
|
||||||
<p></p>
|
Zeichenkette. Durch die Kommata werden verschiedene Begriffe
|
||||||
<h6>Suchgeschwindigkeit<h6>
|
voneinander getrennt und einzeln abgefragt.</p>
|
||||||
<p></p>
|
<p>Die beispielhafte Suchanfrage "Kroatien, Krieg, Asyl"
|
||||||
|
fragt somit die Häufigkeit der drei verschiedenen Wörter ab.
|
||||||
|
Es können beliebig viele Begriffe aneinander gereit werden.</p>
|
||||||
|
<p>Eine weitere Suchanfrage wäre z.B. "Kroatien, Krieg, Asyl,
|
||||||
|
Syrien, Europa"</p>
|
||||||
|
<p>Es können nicht nur einzelne Wörter, sondern je nach Korpus
|
||||||
|
Phrasen mit einer Länge von bis zu fünf Wörtern abgefragt werden.
|
||||||
|
Eine beispielhafte Suchanfrage wäre z.B. "Steuer erhöhen, Steuer senken, schwarze Null".
|
||||||
|
Es können gleichzeitig Phrasen verschiedener Länge abgefragt werden.
|
||||||
|
Ein Beispiel hierfür ist "Steuer erhöhen, Steuer senken, schwarze Null, Steuerbetrug".
|
||||||
|
</p>
|
||||||
|
<p>Möglich wird diese Art der Abfrage dadurch, das für alle Protokolle
|
||||||
|
sogenannte N-Gramme berechnet wurden.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">short_text</i>Was sind N-Gramme?</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Für die Berechnung von N-Grammen wird ein Text in einzelne
|
||||||
|
Fragmente zerlegt, die dann in ihrer Häufigkeit gezählt werden können.
|
||||||
|
N gibt hierbei die Länge der einzelen Fragmente an.
|
||||||
|
Ist z.B. der Satz "to be or not to be that is the question."
|
||||||
|
gegeben, kann für diesen die dazugehörigen 1-Gramme berechnet werden.
|
||||||
|
Diese wären dann: "to, be, or, not, to, be, that, is, the, question".
|
||||||
|
Nun kann die Häufigkeit der einzelnen Wörter gezählt werden.
|
||||||
|
Somit kommen die Wörter "to" und "be" zweimal vor und die restlichen
|
||||||
|
Wörter jeweils einmal.</p>
|
||||||
|
<p>Diese Art der Berechnung kann dann auch für 2-Gramme durchgführt
|
||||||
|
werden. Der Satz würde dafür in folgende Fragemente zerlegt werden:
|
||||||
|
"To be, be or, or not, not to, to be, be that, that is, is the, the question".
|
||||||
|
Nun kann die Häufigkeit von zwei aufeinander folgenden Wörtern ermittelt werden.
|
||||||
|
Die Phrase "to be" kommt innerhalb des Satzes somit zweimal
|
||||||
|
und alle anderen nur einmal vor.</p>
|
||||||
|
<p>Dieser Prozess kann weitere Male wiederholt werden z.B. für 3-, 4- oder 5-Gramme.</p>
|
||||||
|
<p>Diese Art der Berechnung wurde für alle Protokolle der Bundestagssitzungen
|
||||||
|
seit 1949 bis 2017 durchgeführt, um die Häufigkeiten verschiedener
|
||||||
|
Begriffe bzw. Phrasen pro Jahr darstellen zu können.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">filter_2</i>Verschiedene Korpora</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Mit der Option "Korpus" kann zwischen zwei verschiedenen
|
||||||
|
Korpora gewechselt werden, an die die Suchanfrage gestellt wird.</p>
|
||||||
|
<p>Bei der Korpusauswahl "Lemmatisiert ohne Stoppwörter" werden
|
||||||
|
N-Gramme abgefragt, die auf Grundlage der lemmatisierten Protokolle
|
||||||
|
ohne Stopwörter berechnet wurden. Das bedeutet, dass alle Wörter der
|
||||||
|
Protokolle auf ihre Grundform zurückgeführt und häufige
|
||||||
|
Wörter wie "ist" oder "ein" entfernt wurden. Aus dem Satz
|
||||||
|
"Guten Morgen, liebe Kolleginnen und Kollegen! Ich begrüße Sie alle herzlich."
|
||||||
|
wird so die Zeichenfolge
|
||||||
|
"Guten Morgen lieb Kollegin Kollege ich begrüßen ich herzlich"
|
||||||
|
N-Gramme die für die beiden Sätze berechnet werden unterscheiden sich somit
|
||||||
|
erheblich.</p>
|
||||||
|
<p> Der Korpus "Nicht lemmatisiert mit Stoppwörtern" lässt den
|
||||||
|
Satz unberührt.</p>
|
||||||
|
<p>Beide Korpora eignen sich für verschiedene Suchanfragen.
|
||||||
|
Möchte eher die Häufigkeit von zusammengefassten Begriffen ermittelt
|
||||||
|
werden, kann der Korpus "Lemmatisiert ohne Stoppwörter" verwendet
|
||||||
|
werden. <br />
|
||||||
|
Werden jedoch eher ganze Phrasen wie "Kampf gegen den Terror"
|
||||||
|
gesucht, sollte der Korpus "Nicht lemmatisiert mit Stoppwörtern"
|
||||||
|
vewrwendet werden.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">close</i>Grenzen der Suchanfrage</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Für den Korpus "Lemmatisiert ohne Stoppwörter" können 1-
|
||||||
|
bis 5-Gramme abgefragt werden.</p>
|
||||||
|
<p>Der Korpus "Nicht lemmatisiert mit Stoppwörtern" ist auf
|
||||||
|
eine Abfrage von 1- bis 4-Grammen begrenzt.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">access_time</i>Suchgeschwindigkeit</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Die Suchanfragen für mehrere 1-Gramme ist sehr schnell.
|
||||||
|
Werden komplexere 2-, 3-, 4- oder 5-Gramme abgefragt, ist mit
|
||||||
|
einer Bearbeitungszeit von einigen Sekunden zu rechnen.</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="collapsible-header"><i class="material-icons blue-grey-text darken-4">poll</i>Interpretation der Daten</div>
|
||||||
|
<div class="collapsible-body">
|
||||||
|
<p>Aus den Ergebnissen einer Suchanfrage sollten keine vorschnellen
|
||||||
|
Kausalitäten abgeleitet werden. Die verschiedenen Häufigkeiten sollten
|
||||||
|
immer im Kontext ihrer Zeit und politscher Ereignisse gesehen werden.</p>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -91,7 +190,7 @@ query. This creates the ngram viewer per year. -->
|
|||||||
<div class="col s12 m12 l8">
|
<div class="col s12 m12 l8">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<span class="card-title">Graph</span>
|
<span class="card-title">Häufigkeit der gesuchten N-Gramme pro Jahr von 1949 bis 2017</span>
|
||||||
{{ line_chart.as_html}}
|
{{ line_chart.as_html}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|