Textsuche
Das Modul 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 der Schnittstelle benötigt, Angehörige des DSS-Lehrstuhls dazu bitte Olaf Kellermeier anfragen. Darüber hinaus ist die sogenannte Snapshot-ID (oder mehrere) anzufragen. Sobald ihr über ein Zugangstoken und Snapshot-ID verfügt, könnt ihr loslegen.
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/
Suche nach Begriffshäufigkeiten
Importiert euer Token wie in der Einleitung zu den Schnittstellen beschrieben.
Nun erzeugen wir eine Instanz der Textsearch-Klasse:
Die Bezeichnung des Netzwerkes lässt sich wie folgt herausfinden:
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"',
]
# Path `graph` needs to be generated beforehand
graph, er = ts.search(graph, 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.
Komplexe Suchbegriffe und ihre Kombinationen
ts.search(graph, terms=terms)
akzeptiert eine Vielzahl an Typen für terms
:
- Liste mit Strings:
["sustainable", "investment"]
. Jeder Wert in der Liste wird als separater Wert ausgegeben. Der Schlüssel ist dabei auch zugleich der Suchbegriff. - Liste von Listen mit Strings:
[["sustainable", "investment"], ["divestment"]]
. Jede dieser inneren Listen wird zu einem Wert kumuliert. Das bedeutet, dass die Häufigkeit beider Suchbegriffe"sustainable"
und"investment"
zusammengezählt werden und unter dem Schlüsselsustainable
ausgeben (erster Wert wird als Schlüssel verwendet). - Dictionary mit Strings:
{"nachhaltig": "sustainable"}
. Dies wird die Häufigkeit des Suchbegriffes"sustainable"
unter dem Schlüsselnachhaltig
ausgeben. Hiermit sind auch komplexere Queries möglich:{"nachhaltig": "sustainable OR nachhaltig OR 'nachhaltiges wirtschaften'"}
gibt den Wert für den Suchbegriffsustainable OR nachhaltig OR 'nachhaltiges wirtschaften'
unter dem Schlüsselnachhaltig
aus. - Dictionary mit Strings als Schlüssel und Listen als Werten:
{"nachhaltig": ["sustainable", "nachhaltig"], "divestment": ["divestment"]}
. Die Werte pro Schlüssel werden unter demselben kumuliert. - Panda Series: Funktioniert wie Dictionary mit Strings
- Panda DataFrame: Jede Spalte ist dabei eine Sammlung von Suchbegriffen, die pro Spalte kumuliert werden. Der Schlüssel ist dabei der Spaltenname.
Ein Mischen der Typen ist nicht möglich. Dictionaries sind gegenüber Listen vorzuziehen, insbesondere falls Legenden erstellt werden sollen.
Zeichnen 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:
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:
Gleiches funktioniert auch für Farben: