wordprofile

Collocation Extraction @ DWDS/ZDL

https://github.com/zentrum-lexikographie/wordprofile

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (6.6%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Collocation Extraction @ DWDS/ZDL

Basic Info
  • Host: GitHub
  • Owner: zentrum-lexikographie
  • License: gpl-3.0
  • Language: Python
  • Default Branch: master
  • Homepage:
  • Size: 5.25 MB
Statistics
  • Stars: 5
  • Watchers: 1
  • Forks: 0
  • Open Issues: 2
  • Releases: 2
Created over 1 year ago · Last pushed 8 months ago
Metadata Files
Readme Changelog License Citation Zenodo

README.md

DWDS Wortprofil (wordprofile)

DOI

Das DWDS Wortprofil Projekt bildet das Backend für die unter www.dwds.de/wp hinterlegte Übersicht von Kollokationen. Als Grundlage für die Erstellung eines Wortprofils dienen Korpora des ZDL der BBAW.

Project setup

To install the full editable project including dev dependencies, run:

pip install -U pip pip-tools setuptools
pip-sync requirements/*.txt

Erstellen eines Wortprofils

Für das Erstellen eines Wortprofils sind folgende Schritte nötig:

  1. Datenkonvertierung + Annotation
  2. Kollokationsextraktion
  3. Aggregation der Teilkorpora 2.1. Berechnung der Statistiken 2.2. Finden von MWE aus extrahierten Matches
  4. Befüllen der Datenbank

Falls das Korpus für das Wortprofil aus verschiedenen Teilen (Subkorpora) besteht, wird der Schritt der Konvertierung und Annotation sowie die Extraktion der Kollokationen für jedes Subkorpus separat durchgeführt. Im zweiten Schritt werden die Daten aus den Teilkorpora aggregiert.

0. Datenkonvertierung + Annotation

Sofern die Korpusdaten noch nicht annotiert und im .conll-Format vorliegen, müssen sie zunächst konvertiert und mit Dependenzannotationen und morphologischen Annotationen versehen werden (s. preprocessing).

1. Kollokationsextraktion

In diesem Schritt werden für jedes Teilkorpus die jeweiligen Kollokationen mit Treffern (Matches) extrahiert und die Belegsätze verarbeitet. Hierzu wird das Skript wordprofile/cli/extract_collocations.py verwendet (bei Aufruf als Skript muss der Pythonpath richtig gesetzt sein):

sh options: -h, --help show this help message and exit --input [INPUT ...] conll input file(s). As default stdin is used, if this option is not used. --dest DEST temporary storage path --njobs NJOBS number of process jobs Als --input werden mehrere .conll-Dateien akzeptiert. Beispielaufruf: shell python -m wordprofile.cli.extract_collocations --input corpora/test_corpus.conll --dest test_wp/colloc/test_corpus --njobs 4 Die Datei test_corpus.conll wird verarbeitet, die extrahierten Daten werden nach test_wp/colloc/test_corpus geschrieben.

2. Aggregation der Teilkorpora

In diesem Schritt werden die Ergebnisse der Teilkorpora zusammengeführt und die Statistiken über das gesamte Korpus berechnet. Hierfür ist das Skript wordprofile/cli/compute_statistics.py vorgesehen:

```sh usage: compute_statistics.py [-h] [--dest DEST] [--min-rel-freq MINRELFREQ] [--mwe] src [src ...]

positional arguments: src Path to input data

options: -h, --help show this help message and exit --dest DEST Output path --min-rel-freq MINRELFREQ Minimal frequency filter for aggregated collocations --mwe Extract MWE collocations ```

2.1. Berechnung der Statistiken

Beispielaufruf: shell python wordprofile/cli/compute_statistics.py test_wp/colloc/* --dest test_wp/stats --min-rel-freq 5 In diesem Aufruf werden die Teilkorpora in test_wp/colloc zusammengeführt, die Frequenzen der Kollokationen addiert und die logDice-Werte berechnet. Kollokationen, die insgesamt die Mindestfrequenz (--min-rel-freq) nicht erreichen, werden aus den Ergebnissen entfernt (Default ist 5). Ebenso werden Kookurrenzen entfernt, deren logDice-Wert kleiner null ist.

2.2. Finden von MWE aus extrahierten Matches

Mit der Option --mwe werden nach der Zusammenführung der Teilkorpora Verkettungen von Kollokationen ("Mehrwortausdrücke") gesucht, d.h. Überlappungen zweier Kollokationen.

3. Befüllen der Datenbank

In diesem Schritt werden die Ergebnisse in die Datenbank geschrieben und Indizes auf den Datenbanktabellen erstellt, um eine performante Abfrage der Kollokationen zu ermöglichen.

3.1. Starten einer lokalen Datenbankinstanz

Wenn per Umgebungsvariablen keine anderen Einstellungen vorliegen, wird eine lokale Datenbankinstanz befüllt. Um eine solche in einem zur Verfügung zu stellen, wird per Docker ein entsprechender MariaDB-Container gestartet:

sh docker compose up db

Die Daten der Instanz befinden sich auf einem Docker-Volume, von wo sie zur Verbringung auf andere Systeme kopiert werden können. Unter GNU/Linux befindet sich das Volume z. B. standardmäßig im Dateisystem unter

/var/lib/docker/volumes/wordprofile_db/_data

Zum Entfernen des Containers und seiner Daten nach Erstellung eines Profils, dient das Kommando

sh docker compose down db -v

3.2. Befüllen der Datenbank

Die Daten liegen in Dateiform so vor, dass sie direkt in eine SQL DB geladen werden können. Hierzu dient folgendes Skript:

sh python wordprofile/cli/load_database.py test_wp/stats

Mit dem optionalen Parameter --clear kann die Datenbank vor einem (erneuten) Befüllen bereinigt werden.

Vorverarbeitung

Für die Umwandlung von .tabs-Dateien nach .conll können die Python-Skripte data_update.py oder tabs2conllu.py verwendet werden (im Verzeichnis wordprofile/preprocessing/cli/).

Benutzung siehe readme im wordprofile/preprocessing-Verzeichnis.

Tests

Tests für das gesamt Projekt werden ausgeführt via:

shell pytest

Hintergrund

Das DWDS Wortprofil wird im Rahmen des Zentrums für digitale Lexikographie der deutschen Sprache (ZDL) an der Berlin-Brandenburgischen Akademie der Wissenschaften (BBAW) entwickelt. Dieses Projekt ist eine Neuimplementierung des Wortprofils von Jörg Didakowski ([1],[2]) und ersetzt u.a. dessen Syntaxanalyse mittels formaler (handgeschriebener) Grammatiken durch einen auf UD trainierten Dependenzparser.

[1] Geyken, A., Didakowski, J., & Siebert, A. (2009). 'Generation of word profiles for large German corpora'. Corpus Analysis and Variation in Linguistics, 141-157. [PDF]

[2] Didakowski, J. und Geyken, A. (2014). 'From DWDS corpora to a German word profile – methodological problems and solutions'. In: OPAL – Online publizierte Arbeiten zur Linguistik 2/2014, S. 39–47. [PDF]

Kontakt

Bis Herbst 2023 wurde das DWDS Wortprofil hauptsächlich durch René Knaebel entwickelt. Seitdem wurde Entwicklung und Maintenance von Luise Köhler übernommen.

License

The DWDS Wortprofil (wordprofile) is licensed under the GNU General Public License v3.0.

Luise Köhler

Owner

  • Name: Zentrum für digitale Lexikographie der deutschen Sprache
  • Login: zentrum-lexikographie
  • Kind: organization

Citation (CITATION.cff)

cff-version: "1.2.0"
title: "DWDS Wortprofil"
version: 9.1.0
license: "GPL-3.0"
type: software
abstract: "Backend des Wortprofils, einer Übersicht über Kollokationskandidaten, extrahiert aus Korpora des ZDL der BBAW"
message: "If you use this software, please cite it as below."
authors:
  - given-names: Luise
    family-names: Köhler
    affiliation: Berlin-Brandenburg Academy of Sciences and Humanities
    orcid: "https://orcid.org/0000-0001-5144-1920"
  - given-names: René
    family-names: Knaebel
    affiliation: Universität Potsdam
    orcid: "https://orcid.org/0009-0003-1320-6753"
keywords:
  - computational linguistics
  - nlp
  - german
  - collocation extraction
  - lexicography

GitHub Events

Total
  • Create event: 19
  • Release event: 1
  • Watch event: 3
  • Delete event: 15
  • Issue comment event: 5
  • Push event: 66
  • Public event: 1
  • Pull request review event: 6
  • Pull request review comment event: 1
  • Pull request event: 30
Last Year
  • Create event: 19
  • Release event: 1
  • Watch event: 3
  • Delete event: 15
  • Issue comment event: 5
  • Push event: 66
  • Public event: 1
  • Pull request review event: 6
  • Pull request review comment event: 1
  • Pull request event: 30

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 0
  • Total pull requests: 11
  • Average time to close issues: N/A
  • Average time to close pull requests: about 1 month
  • Total issue authors: 0
  • Total pull request authors: 2
  • Average comments per issue: 0
  • Average comments per pull request: 0.0
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 11
  • Average time to close issues: N/A
  • Average time to close pull requests: about 1 month
  • Issue authors: 0
  • Pull request authors: 2
  • Average comments per issue: 0
  • Average comments per pull request: 0.0
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
  • gremid (9)
  • knit-bee (6)
Top Labels
Issue Labels
Pull Request Labels
autorelease: pending (3)

Dependencies

.github/workflows/release-please.yml actions
  • googleapis/release-please-action v4 composite
Dockerfile docker
  • python 3.10 build
docker-compose-test.yml docker
  • docker-registry.zdl.org/zdl-wordprofile/api latest
  • mariadb 10
docker-compose.yml docker
  • docker.zdl.org/zdl-wordprofile/api latest
  • mariadb 10
Pipfile pypi
  • autoflake * develop
  • black * develop
  • flake8 * develop
  • mypy * develop
  • pytest * develop
  • pymysql *
  • starlette 0.40.0
Pipfile.lock pypi
  • 122 dependencies