2023-07-19 OpenThesaurus für den Dict Server local einrichten

Sommerferien… ich habe Hunger, aber das will ich noch schnell schreiben.

Ich bin Fan von einem lokal installiertem Dict Server. Auf Englisch gibt es ja einige! Auf 2019-01-29 Dictionary habe ich Werbung für den Webster 1913 gemacht (”An American Dictionary of the English Language”). Aber was macht man auf Deutsch?

2019-01-29 Dictionary

Hier mal ein erster Versuch, um aus dem OpenThesaurus.de Projekt einen lokalen Thesaurus zu erstellen.

Was folgt ist ein Makefile:

SHELL=/bin/bash

help:
	@echo make Deutscher-Thesaurus oder make Schweizer-Thesaurus?

install:
	@test -d /usr/share/dictd || echo "The directory /usr/share/dictd does not exist, where should the files go?" && exit
	sudo mv *.dict.dz *.index /usr/share/dictd/
	sudo dictdconfig --write
	sudo systemctl restart dictd

Deutscher-Thesaurus: Deutscher-Thesaurus.dict.dz

Schweizer-Thesaurus: Schweizer-Thesaurus.dict.dz

%.dict.dz: %.dict
	dictzip {body}lt;

%.dict: %.jargon
	dictfmt --utf8 --allchars -j $(basename {body}lt; .dic) \
	-u https://www.openthesaurus.de/about/download \
	-s $(basename {body}lt; .dic) \
	< {body}lt;

%.jargon: %.dat
	perl open-thesaurus-to-jargon < {body}lt; > $@

%.dat: %.oxt
	unzip {body}lt; th_de_DE_v2.dat && mv th_de_DE_v2.dat $@

%.oxt:
	wget https://www.openthesaurus.de/export/$@

Das Programm open-thesaurus-to-jargon ist ein Perl Programm:

#!/usr/bin/env perl
use Modern::Perl;
use utf8;

my $encoding = <STDIN>;
binmode(STDIN, ":encoding($encoding)");
binmode(STDOUT, ":encoding(UTF-8)");

print << 'EOT';
Title: OpenThesaurus
Edition: 1.0

OpenThesaurus ist ein freies deutsches Wörterbuch für Synonyme, bei dem
jeder mitmachen kann.

Die Wörter aus OpenThesaurus lassen sich hier in verschiedenen Formaten
herunterladen. Sie stehen unter der Creative Commons
Attribution-ShareAlike 4.0 oder GNU Lesser General Public License zur
Verfügung (Sie können wählen, welche Lizenz für Sie gilt). Das bedeutet
vereinfacht gesagt, dass die Daten kostenlos genutzt, verarbeitet,
geändert und weiterverbreitet werden können, solange die
weiterverbreiteten Daten ebenfalls für den User klar erkennbar unter der
LGPL stehen und openthesaurus.de als Quelle verlinkt wird

- https://creativecommons.org/licenses/by-sa/4.0/legalcode.de
- http://creativecommons.org/licenses/LGPL/2.1/deed.de

EOT

my $count = 0;
my $max = 0;
my $headword = '';

while(<STDIN>) {
  chomp;
  if (/^-\|(.*)/) {
    $count++;
    warn "More definitions for $headword found than expected\n"
        if $count > $max;
    my @lines = split(/\|/, $1);
    say "   $count. " . join("\n      ", @lines);
  } elsif (/^([^|]*)\|(\d+)$/) {
    warn "Not enough definitions for $headword found\n"
        if $count < $max;
    $headword = $1;
    $max = $2;
    $count = 0;
    print "\n";
    say ":$headword:";
    say "$max Bedeutungen im OpenThesaurus für \"$headword\":" if $max > 1;
    say "Eine Bedeutung im OpenThesaurus für \"$headword\":" if $max == 1;
  }
}

Nun kann man sich die .dict.dz und .index Dateien bauen:

$ make Schweizer-Thesaurus
wget https://www.openthesaurus.de/export/Schweizer-Thesaurus.oxt
--2023-07-19 15:18:05--  https://www.openthesaurus.de/export/Schweizer-Thesaurus.oxt
Resolving www.openthesaurus.de (www.openthesaurus.de)... 116.203.71.126
Connecting to www.openthesaurus.de (www.openthesaurus.de)|116.203.71.126|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12813845 (12M) [application/octet-stream]
Saving to: ‘Schweizer-Thesaurus.oxt’

Schweizer-Thesaurus.oxt              100%[====================================================================>]  12.22M  9.54MB/s    in 1.3s

2023-07-19 15:18:07 (9.54 MB/s) - ‘Schweizer-Thesaurus.oxt’ saved [12813845/12813845]

unzip Schweizer-Thesaurus.oxt th_de_DE_v2.dat && mv th_de_DE_v2.dat Schweizer-Thesaurus.dat
Archive:  Schweizer-Thesaurus.oxt
  inflating: th_de_DE_v2.dat
perl open-thesaurus-to-jargon < Schweizer-Thesaurus.dat > Schweizer-Thesaurus.jargon
dictfmt --utf8 --allchars -j Schweizer-Thesaurus  \
-u https://www.openthesaurus.de/about/download \
-s Schweizer-Thesaurus  \
< Schweizer-Thesaurus.jargon
      159971 headwords
dictzip Schweizer-Thesaurus.dict
rm Schweizer-Thesaurus.dat Schweizer-Thesaurus.oxt Schweizer-Thesaurus.jargon

Sollte sich der Speicherort der Datei einmal ändern, oder der Name der Datei im .oxt Archiv, dann muss man das entsprechend anpassen.

Installation:

$ make install
sudo mv *.dict.dz *.index /usr/share/dictd/
sudo dictdconfig --write
sudo systemctl restart dictd

Verwendung:

$ dict -d Schweizer-Thesaurus "cliffhanger"
1 definition found

From Schweizer-Thesaurus [Schweizer-Thesaurus]:

  cliffhanger

  Eine Bedeutung im OpenThesaurus für "cliffhanger":
     1. Cliffhanger (Jargon, engl.)
        Handlungsunterbrechung an der spannendsten Stelle
        aufhören, wenn es (gerade) am spannendsten ist (ugs.)

Funktioniert!

​#Dict ​#Deutsch

Comments

(Please contact me if you want to remove your comment.)

Danke, das ist nett! Ein kleiner Ärger aber ist, dass es wiederholt Entragen hat, z.B. 5 Eintragen für “denken”.

– 2023-07-20 06:40 UTC

---

Das ist richtig, aber es scheint im Original auch so zu sein. Leider.

– Alex 2023-07-20 07:37 UTC