Dies ist ein Repository, welches im Rahmen der Bachelorarbeit "Ontologie-basierte Schlagwortextraktion zur Verbesserung des Korpus für die automatische Dokumentklassifizierung des Discovery Services LIVIVO von ZB MED" entwickelt wurde. Es besteht aus mehreren Jupyter-Notebooks auf Basis der Programmiersprache Python, sowie aus PostgreSQL-Befehlen, die im Unterordner "code" zu finden sind. Die Datengrundlage besteht aus einer Datenbank, die mehrere Millionen Publikationen aus LIVIVO enthält und wurde für diese Arbeit zur Verfügung gestellt.
Im Folgenden erfolgt eine Beschreibung der Thematik, sowie der Code-Dateien, um die Ergebnisse und Visualisierungen in der Bachelorarbeit reproduzieren zu können.
- Beschreibung Thematik
- Ordnerstruktur
- Datenquellen
- Durchführung
- Beschreibung Code
- Darstellung Evaluierung LDA
Das Haupthema der Bachelorarbeit ist es, den Datensatz für eine Textklassifizierung aufzubereiten. Das Ziel besteht darin, die Publikationen in ihre Thematiken einzuordnen. Die Aufbereitung besteht aus folgenden Schritten:
- Spracherkennung der Publikationen
- Aufbereiten eines Thesaurus im RDF-Format zu einem Nachschlage-Wörterbuch
- Schlagwortextraktion aus Titel und Abstract der Publikationen mittels der Terme im Nachschlage-Wörterbuch
- code
beinhaltet alle Code-Dateien, die mit der run.sh-Datei ausgeführt werden können - further analysis
beinhaltet Code-Dateien für Analysezwecke und Experimente- comparison: Vergleiche mit der Benchmark
- experiments: Klassifizierung LDA mit 5 Klassen, Evaluation der Schlagwortextraktion
- visualization: Visualisierungen zur Analyse der Ergebnisse
- Datei AGROVOC-Thesaurus: https://data.apps.fao.org/catalog/dcat/agrovoc-2023-07
- Repository keyword extraction: https://github.com/klauslippert/keyword_extraction
Für die Ausführung der Skripte wird die Einrichtung eines virtual environments empfohlen. Um die requirements.txt innerhalb der virtuellen Umgebung zu installieren, sollte der Paketmanager [pip] (https://pip.pypa.io/en/stable/) verwendet werden.
pip install requirements.txtNach Installation der benötigten Bibliotheken kann die run.sh-Datei im Terminal aufgerufen werden, um die Dateien im Unterordner "code" auszuführen. Vorraussetzung für das erfolgreiche Durchführen des Skripts ist eine leere Datenbank mit den Schemen "ke_stage" & "publ". Im Weiteren muss die Datentabelle "Mesh-Mainheadings" in die Datenbank eingepflegt werden. Diese wurde für die Arbeit zu Verfügung gestellt.
sh run.shDie folgende Tabelle beschreibt die Funktionen der einzelnen Dateien und die gegebenenfalls erforderlichen Anpassungen im Code.
| Dateiname | Beschreibung | Anpassungen | Variablen | Input | Output |
|---|---|---|---|---|---|
| 01_create-dataset.ipynb | Mit diesem Code wird ein kleinerer Korpus für Testzwecke aus der Datenbank erstellt. Hierzu wird ein ausgewogenes Datenset mit gleicher Anzahl an Einträgen aller Averbis-Klassen definiert und wieder in die Datenbank geschrieben. | Mit dieser Variable wird ein Limit der Datensätze gesetzt | lim | Rohdaten (ba_corpus_2) | corpus_small_train |
| In den Datensätzen kann zwischen einem Trainingsdatenset und ein Datenset, welches die MeSH-Termini von Averbis beinhaltet, unterschieden werden. Hierzu wird die Angabe als Typ mitgegeben. | train, key_eval | ||||
| 02_language_detection.ipynb | Mit diesem Code wird eine Spracherkennung der Dokumente im Korpus durchgeführt. | - | - | corpus_small_train | corpus_language |
| 03_join_language.sql | Mit diesem PostqreSQL-Befehl wird die Tabelle der Sprachen-Zuordnung mit dem Trainigskorpus verbunden. | - | - | corpus_small_train, corpus_language | join_language |
| 04_get_AGROVOC_data.ipynb | Mit diesem Code wird aus dem AGROVOC-Thesaurus ein Dictionary aus Term und zugehöriger ID erstellt. | Hier muss vor Ausführung die nt-Datei unter folgendem Link heruntergeladen werden: https://data.apps.fao.org/catalog/dcat/agrovoc-2023-07. Die Pfade, in dem die Datei abliegt, sowie zur Speicherung der Pickle-Dateien müssen angepasst werden. | path, save_path | nt-Datei AGROVOC | Pickle-Datei mit Dictionary für die Sprachen Englisch, Deutsch und Französisch |
| Im Weiteren muss das Repository keyword_extraction unter folgendem Link https://github.com/klauslippert/keyword_extraction geklont werden und dieses im gleichen Ordner wie der Code abgelegt werden. | - | ||||
| Außerdem wird eine Tabelle für die AGROVOC-Mainheadings erstellt. | - | - | Dataframe mit AGROVOC-Daten | agrovoc_mainheadings | |
| 05_extract_keywords.ipynb | Mit diesem Code wird mithilfe der erstellen Lookup-Dictionaries die Schlagwörter aus den Dokumenten extrahiert und in eine neue Spalte eingefügt. | Wenn nicht bereits geschehen muss das Repository keyword_extraction unter folgendem Link https://github.com/klauslippert/keyword_extraction geklont werden und dieses im gleichen Ordner wie der Code abgelegt werden. | |||
| Hier muss der Datei-Pfad für die Pickle-Dateien für AGROVOC und Mesh einzeln angepasst werden. | files_MeSH | join_language | corpus_keywords_AGROVOC, corpus_keywords_MeSH | ||
| files_agrovoc | |||||
| 06_mesh_mainheadings_title.sql, 07.mesh_mainheadings_abs.sql | Mappen der IDs aller Schlagwörter mit den IDs der Mainheadings von MeSH für den Titel und Abstract | - | - | corpus_keywords_MeSH, mesh_mainheadings | corpus_mesh_title, corpus_mesh_abs |
| 08_agro_mainheadings_title.sql, 09_agro_mainheadings_abs.sql | Mappen der IDs aller Schlagwörter mit den IDs der Mainheadings von AGROVOC für den Titel und Abstract | - | - | corpus_keywords_AGROVOC, agrovoc_mainheadings | corpus_agrovoc_title, corpus_agrovoc_abs |
| 10_create_corpus_mesh.sql, 11_create_corpus_agrovoc.sql | Zusammenfassen der Daten von MeSH und Agrovoc zu einem Korpus | - | - | corpus_agrovoc_title, corpus_agrovoc_abs, corpus_mesh_title, corpus_mesh_abs | corpus_keywords_agro, corpus_keywords_mesh |
| 12.1_classification_LDA | Durchführung der Klassifizierung mittels LDA | Anpassung Pfad für Speicherung des Dataframes als csv | save_path | corpus_keywords_agro, corpus_keywords_mesh, Averbis-Klassen | Dataframe, welches die vorhergesagten Klassen der Dokumente beinhaltet |
| 12.2_eval_LDA | Evaluierung der LDA mittels F1-Score | Anpassung Pfad zum Öffnen des Dataframes als csv | path | Dataframe der vorhergesagten LDA-Klassen | Evaluierungswert in Form des F1-Scores |
| 13_classification_SGD | Durchführung der Klassifizierung mittels SGDC | Anpassung Pfad für Speichern der F1-Matrix als csv | path | corpus_keywords_agro, corpus_keywords_mesh, Averbis-Klassen | Evaluierungswerte in Form der F1-Matrix |
flowchart TD
subgraph Kombinationsbeispiele
class2
class2a
end
averbis-->classa[Klasse <br> Medizin <br> Landwirtschaft <br> Umweltwissenschaften <br> Ernährung]
LDA-->class1[Klasse <br> 0 <br> 1 <br> 2 <br> 3]
class1-->|erste Kombination der beiden Klassen| class2[Klasse <br> 1 -> Medizin <br> 2 -> Landwirtschaft <br> 3 -> Umweltwissenschaften <br> 4 -> Ernährung ]
classa-->error[Fehlerberechnung mittels F1-Score]
class2-->error
class1-->|zweite Kombination der beiden Klassen|class2a[Klasse <br> 1 -> Landwirtschaft <br> 2 -> Medizin <br> 3 -> Ernährung <br> 4 -> Umweltwissenschaften]
classa---> errora[Fehlerberechnung mittels F1-Score]
class2a--->errora[Fehlerberechnung mittels F1-Score]
error -->|Finden der besten Kombination| highest[highest F1-Score]
errora --> |Finden der besten Kombination| highest