Zum Inhalt

Textsuche

Das Module textsearch ist ein Interface zum Durchsuchen einer Datenbank von Texten. Die hier vorliegende Implementierung sucht naiv nach den angegebenen Textfragmenten und gibt deren absolute Häufigkeit zurück. Diese Häufigkeiten können in der Visualisierung dargestellt werden.

Zuerst wird ein Zugang zu dem jeweiligen Server benötigt, Angehörige des DSS-Lehrstuhls dazu bitte Olaf Kellermeier anfragen. Darüber hinaus ist die sogenannte Snapshot-ID (oder mehrere) anzufragen.

Hinweis

Für Fortgeschrittene: Die jeweilige Snapshot-ID kann auch direkt am API-Endpunkt angefragt werden. Dazu bitte die Dokumentation des WDC-Endpoints selbstständig konsultieren: https://dss-wdc.wiso.uni-hamburg.de/

Sobald ihr über ein Zugangstoken und Snapshot-ID verfügt, könnt ihr loslegen. Als erstes legt ihr im Verzeichnis eures Skripts eine .env-Datei mit folgendem Inhalt an:

WDC_TOKEN=<Zuvor erhaltenes Token angeben>

Das hat den Zweck, dass Token nicht in die Skripte und damit in die Versionierung aufgenommen werden. Diese Datei auf keinen Falls committen, sondern via .gitignore ausschließen. dsstools liest die Variablen der .env-Datei automatisch ein. Sollte keine .env gefunden werden, so wird ein Fehler ausgegeben.

Anmerkung

Die Umgebungsvariablen können natürlich auf beliebigem Wege angeben werden. Viele Entwicklungseditoren bringen das häufig auch von sich aus mit. Dazu müsst ihr selbstständig recherchieren.

Nun erzeugen wir eine Instanz der Textsearch-Klasse:

import dsstools as dts
ts = dts.TextSearch("20210424_cliccs", token=token)

Die Bezeichnung des Netzwerkes lässt sich wie folgt herausfinden:

ts = dts.TextSearch(None, token=token)
snapshots = ts.get_snapshots(name_tag="cliccs")

Unter der Variable snapshots findest du dann alle Snapshots, die dir unter der Bezeichnung zur Verfügung stehen. Falls man name_tag nicht angibt, werden alle verfügbaren Snapshots angezeigt. Entsprechend kann dann None durch den Snapshot-Namen ersetzt werden.

Nachdem wir zu suchende Begriffe definiert haben, senden wir eine Anfrage:

terms = [
    '"divestment"',
    '"sustainable investment"',
]
G, er = ts(G, terms=terms)

Achtung

In diesem Fall steht '"sustainable investment"' in doppelten Anführungszeichen, da es ein Leerzeichen enthält. Würden wir das nicht tun, würde die Textsuche nach beiden Wörtern ("sustainable" und "investment") durchgeführt werden. Wir wollen dagegen die Kombination "sustainable investment" erhalten. Das lässt sich durch die doppelten Anführungszeichen erledigen.

Zurückgegeben wird jeweils der Graph selbst als auch etwaige leere Antworten. Das passiert, wenn der Crawler aus technischen Problemen keine Textinhalte herunterladen konnte oder aber die Webseite insgesamt nicht mehr existiert.

Ab jetzt sind in dem Graphenobjekt unter den Attributen die absoluten Werte für die Texte hinterlegt.

Anmerkung

Alternativ ist es auch möglich, eine Liste von Domains in der Suche zu übergeben, falls man noch kein Graphen-Objekt vorliegen hat, sondern nur einige Domains prüfen möchte.

Zeichen von Attributen

Die Integration schreibt die Daten zu dem Suchauftrag direkt in das Graph-Objekt unter einem spezifischen String. Um einen Begriff im Graphen für die Darstellung zu verwenden, kommt die Hilfsklasse dts.Code zur Anwendung:

divt = str(dts.Code("divestment", dts.Category.TEXT))

Hier passieren mehrere Dinge gleichzeitig:

  • dts.Category.TEXT weist den Typ (sprich den Ursprung des Attributes) zu. dts.Category.TEXT signalisiert den Textkorpus als Ursprung, dts.Category.MANUAL dagegen manuell kodierte Attribute aus dssCode.
  • dts.Code("divestment", dts.Category.TEXT) erstellt ein Objekt, welches das Attribut "divestment" im Textkorpus sucht.
  • Das Objekt wird direkt in einen str umgewandelt. Dieser lautet für das Beispiel "text:divestment"

Hinweis

Wer möchte, kann den obigen String natürlich auch manuell erstellen.

divt kann jetzt als Argument bspw. an nodes.set_sizes() übergeben werden:

ig.nodes.set_sizes(divt, out_range=(5,500))

Gleiches funktioniert auch für Farben:

ig.nodes.set_colors(divt, cmap="viridis")