Ich verwende regelmäßig einen Thesaurus, sowohl beim Schreiben von Texten für Dokumentationen und READMEs als auch beim Schreiben von Code zum Benennen von Variablen und Funktionen.
Früher habe ich Online-Thesauri genutzt, insbesondere thesaurus.com, aber ich hasste diese Erfahrung. Obwohl die Ergebnisse nützlich und sehr gut organisiert sind, sind sie nicht tastaturfreundlich und die Navigation ist langsam, insbesondere wenn sich die Ergebnisse über viele Seiten erstrecken.
Also habe ich meinen eigenen Thesaurus erstellt. Ich nutze es weitaus häufiger als je zuvor bei thesaurus.com. Es verfügt über weniger Funktionen, ist aber viel schneller zugänglich und stört den kreativen Prozess weniger.
Geben Sie in einem Terminalfenster th
gefolgt von einem Wort ein. Um beispielsweise das Wort Aufmerksamkeit nachzuschlagen:
th um Aufmerksamkeit |
Die Ausgabe ist eine Liste verwandter Wörter und Phrasen, organisiert in Spalten, mit Kontextzeilen oben und unten und einer Liste von Navigationsoptionen unten.
Suchergebnis für Aufmerksamkeit |
In der unteren Zeile der Ergebnisanzeige wird die Liste der verfügbaren Aktionen angezeigt. Starten Sie eine Aktion, indem Sie den ersten Buchstaben der Aktion eingeben (zur Hervorhebung auf dem Bildschirm hervorgehoben).
Die Daten sind als Thesauruseinträge organisiert, jeder mit einer Sammlung verwandter Wörter und Phrasen. Ein Eintrag ist ein Stamm und die zugehörigen Wörter und Phrasen sind die Zweige .
Die Standardansicht ist der Verzweigungsmodus. Die angezeigten Wörter sind die Wörter und Phrasen, die nach dem Eintrag im Quellthesaurus aufgeführt sind. Wenn Sie in den Trunk -Modus wechseln, werden die Einträge angezeigt, die das Wort enthalten. Am deutlichsten wird dies an einem Beispiel ohne Verzweigungen:
Trigger ist ein Wort ohne Eintrag |
Für das Wort Trigger gibt es keinen Thesauruseintrag. Das Wort Trigger steht im Thesaurus jedoch als Zweige anderer Einträge. Wechseln Sie in den Trunks -Modus, um die Einträge anzuzeigen, die „trigger“ enthalten:
Liste der Wörter, für die der Auslöser ein verwandtes Wort ist |
Dieses Programm ist nicht als Paket erhältlich; Der Quellcode muss heruntergeladen und das Projekt erstellt werden. Mit den folgenden Schritten erstellen Sie einen funktionierenden Thesaurus:
git clone https://www.github.com/cjungmann/th.git
cd th
make
make thesaurus.db
Spielen Sie mit dem Programm, um zu sehen, ob es Ihnen gefällt. Wenn Sie es so installieren möchten, dass es außerhalb des Build-Verzeichnisses verfügbar ist, rufen Sie den folgenden Befehl auf:
sudo make install
Wenn Sie entscheiden, dass Sie das Programm nicht benötigen, können Sie das Programm ganz einfach entfernen.
Wenn Sie das Programm installiert haben, deinstallieren Sie es zunächst mit sudo make uninstall
Dadurch werden das Programm, die Supportdateien und das Verzeichnis, in dem die Supportdateien installiert wurden, entfernt.
Wenn das Programm nicht installiert ist, können Sie das geklonte Verzeichnis einfach löschen.
Das folgende Material wird vor allem Entwickler interessieren, wenn überhaupt jemand.
Das Projekt ist einfach zu erstellen, hängt jedoch von anderer Software ab. Im Folgenden finden Sie eine Liste von Abhängigkeiten, von denen möglicherweise nur die erste (die Berkeley-Datenbank) einen Eingriff erfordert. Die folgenden Punkte 3 und 4 werden in ein Unterverzeichnis im Build-Verzeichnis heruntergeladen und der dort gefundene Code ist statisch mit der ausführbaren Datei verknüpft, sodass sie Ihre Umgebung nicht beeinträchtigen.
Für die B-Tree-Datenbanken im Projekt ist db Version 5 (Berkeley Database) erforderlich. Wenn Sie git verwenden, sollten Sie dies bereits haben, auch unter FreeBSD , das sonst nur eine ältere Version von db enthält. Make wird sofort mit einer Meldung beendet, wenn keine geeignete Datenbank gefunden werden kann. In diesem Fall liegt es an Ihnen, die Datenbank mithilfe Ihres Paketmanagers zu installieren oder aus Quellen zu erstellen.
Git wird zum Herunterladen einiger Abhängigkeiten verwendet. Während Projektabhängigkeiten direkt ohne Git heruntergeladen werden können, erfordert dies undokumentiertes Wissen über die Quelldateien. Dieses Problem wird vermieden, wenn Make Git zum Herunterladen der Abhängigkeiten verwenden kann.
readargs ist eines meiner Projekte, das Befehlszeilenargumente verarbeitet. Obwohl dieses Projekt immer noch von th verwendet wird, ist es nicht mehr erforderlich, diese Bibliothek zu installieren, damit th funktioniert. Das Makefile lädt nun das readargs -Projekt in ein Unterverzeichnis herunter, erstellt es und verwendet stattdessen die statische Bibliothek.
c_patterns ist ein weiteres meiner Projekte, ein Experiment zur Verwaltung von wiederverwendbarem Code, ohne dass eine Bibliothek erforderlich ist. Das Makefile verwendet git , um das Projekt herunterzuladen, und erstellt dann Links zu einigen c_patterns-Modulen im src -Verzeichnis, die in den Build einbezogen werden sollen.
Dieses Projekt ist zwar nützlich (zumindest für mich), aber auch ein Experiment. Eines meiner Ziele hier ist es, meine Makefile-Schreibfähigkeiten zu verbessern. Einige der Build- und Installationsentscheidungen, die ich getroffen habe, sind möglicherweise keine Best Practices oder werden von erfahreneren Entwicklern sogar missbilligt. Wenn Sie sich Sorgen darüber machen, was mit Ihrem System passieren wird, wenn Sie th
installieren, hoffe ich, dass das Folgende Ihnen bei Ihrer Entscheidung hilft.
Wie erwartet kompiliert make die Anwendung. Vielleicht unkonventionell führt make andere Aufgaben aus, die einige Zeit in Anspruch nehmen können:
Lädt mein Repository mit C-Modulen herunter und verwendet mehrere davon, indem es Links zum src -Verzeichnis erstellt.
Anstatt configure
zum Überprüfen von Abhängigkeiten zu verwenden, identifiziert das Makefile dies und beendet sich sofort mit einer hilfreichen Meldung, wenn es fehlende Abhängigkeiten erkennt.
Laden Sie den gemeinfreien Moby-Thesaurus vom Gutenberg-Projekt herunter und importieren Sie ihn. Dadurch wird die Wortdatenbank der Anwendung gefüllt.
Abgebrochen Laden Sie eine Wortzählungsdatenbank herunter und importieren Sie sie. Die Idee besteht darin, alternative Sortierreihenfolgen anzubieten, um das Auffinden eines Wortes aus einer längeren Liste zu erleichtern. Das funktioniert im Moment nicht. Ich bin mir nicht sicher, ob ich darauf noch einmal zurückkomme, weil ich finde, dass der Nutzen, eine alphabetische Liste zu lesen, den zweifelhaften Nutzen, der entsteht, wenn man versucht, häufiger verwendete Wörter an die erste Stelle zu setzen, bei weitem überwiegt. Der Grund dafür ist, dass es viel einfacher ist, den Überblick über die betreffenden Wörter zu behalten, wenn sie nicht zufällig in einer langen Liste von Wörtern verstreut sind.
Mir ist gerade aufgefallen, dass es eine Moby Part of Speech-Listenressource gibt, die bei der Organisation der Ausgabe helfen könnte. Es ist faszinierend, aber ich bin mir nicht sicher, ob es hilfreich sein wird, wenn man bedenkt, wie hilfreich die alphabetische Sortierung bei der Verwendung der Ausgabe ist. Wir werden sehen.
Als ich dieses Projekt startete, hatte ich mehrere Ziele.
Ich wollte mehr Erfahrung mit der Berkeley-Datenbank . Diese Schlüsselspeicherdatenbank unterstützt viele andere Anwendungen, einschließlich Git und SQLite .
Ich wollte die Verwendung einiger meiner c_patterns-Projektmodule üben. Die Verwendung dieser Module in einem realen Projekt hilft mir, ihre Designfehler und fehlenden Funktionen zu verstehen. Ich benutze
Columnize.c , um die Spaltenausgabe zu generieren,
prompter.c für das minimale Optionsmenü am unteren Rand der Ausgabe,
get_keypress.c für Tastendrücke ohne Echo, wird hauptsächlich von prompter.c verwendet.
Ich wollte üben, einen Build-Prozess zu entwerfen, der sowohl in Gnu Linux als auch in BSD funktioniert. Dazu gehören die Identifizierung fehlender Module (insbesondere db , von denen BSD eine zu alte Bibliothek enthält) und eine neu gestaltete bedingte Verarbeitung.
Ich ziele nicht auf Windows ab, weil es stärker von Linux als von BSD abweicht, und ich erwarte nicht, dass viele Windows-Benutzer gerne auf eine Befehlszeilenanwendung umsteigen würden.
Die Berkeley Database ( bdb ) scheint ein interessantes Datenbankprodukt zu sein. Sein Low-Level-C-Bibliotheksansatz scheint der FairCom DB-Engine zu ähneln, die ich Ende der 1990er Jahre verwendet habe.
Die Berkeley-Datenbank ist attraktiv, weil sie Teil von Linux- und BSD-Distributionen ist und einen geringen Platzbedarf hat. Es belohnt eine detaillierte Planung der Daten und ist ein Vorwand, einige meiner C-Sprachideen auszuprobieren.
Dieses Projekt ist ein Neustart meines Wortprojekts, das als Befehlszeilen-Thesaurus und -Wörterbuch gedacht ist. Bei diesem Projekt habe ich zum ersten Mal bdb verwendet, daher sind einige meiner Arbeiten dort etwas umständlich. Ich möchte den BDB -Code noch einmal von Grund auf entwerfen. Ich werde einen Teil des Textparsing-Codes aus dem Wortprojekt kopieren, der hier anwendbar ist.
Anhand der großen Datenmengen Thesaurus und Wörterbuch möchte ich auch die Leistungsunterschiede zwischen den Datenzugriffsmethoden Queue und Recno testen. Ich erwarte, dass die Warteschlange schneller sein wird, da Anfang und Ende von Datensätzen mit fester Länge berechnet werden könnten. Der Zugriff über die Datensatznummer eines bestimmten Datensatzes variabler Länge würde eine Suche nach dem Dateispeicherort erfordern. Ich möchte den Leistungsunterschied messen, um diesen Vorteil gegen die Speichereffizienz von Datensätzen variabler Länge abzuwägen.
Es gibt zwei gemeinfreie Thesauri-Quellen:
Ich verwende den Moby-Thesaurus, weil er viel einfacher aufgebaut und daher leichter zu analysieren ist. Das Problem besteht darin, dass die Synonyme zahlreich sind und aufgrund der mangelnden Organisation bei der Suche nach einem geeigneten Synonym viel schwieriger zu durchsuchen sind.
Bei Hunderten von Synonymen für viele Wörter ist es sehr schwierig, die Liste zu durchsuchen, um ein passendes Wort zu finden. Ich werde versuchen, der Liste eine gewisse Ordnung zu verleihen, um die Verwendung zu vereinfachen. Nachdem ich das Tool einige Zeit verwendet habe, bin ich zu dem Schluss gekommen, dass die alphabetische Reihenfolge am besten ist. Es ist viel einfacher, zu einem Wort in einer alphabetischen Liste zurückzukehren. Ich habe die Option zur Auswahl anderer Wortreihenfolgen entfernt.
Die am einfachsten zu verwendende Klassifizierung ist die Häufigkeit der Wortverwendung. Ich habe vor, die Wörter von der häufigsten bis zur geringsten Verwendungshäufigkeit aufzulisten. Vermutlich sind populärere Wörter möglicherweise die beste Wahl, während weniger beliebte Wörter möglicherweise veraltet sind.
Es gibt mehrere Quellen für Worthäufigkeiten. Das von mir verwendete basiert auf Google Ngrams:
Korpusdaten natürlicher Sprache: Wunderschöne Daten
Ich habe die Norvig-Quelle nicht wirklich studiert, daher ist es möglich, dass sie viel Unsinn enthält. Es gibt eine andere Quelle, die möglicherweise eine bereinigtere Liste hat: hackerb9/gwordlist. Wenn Norvig ein Problem darstellt, möchte ich mir diese alternative Liste merken, durch die ich sie ersetzen kann.
Dieser Teil wird nicht mehr versucht. Die Interpretation der Quelldaten wird durch die Notwendigkeit erschwert, die eindeutige Notation des Wörterbuchs zu erkennen und in Unicode-Zeichen umzuwandeln. Viele dieser Probleme habe ich gelöst, aber viele bestehen immer noch. Das Makefile enthält weiterhin Anweisungen zum Herunterladen dieser Informationen und das Repository enthält einige Konvertierungsskripte für den Fall, dass ich darauf zurückkommen möchte.
Das Gruppieren von Synonymen nach Wortarten (z. B. Substantiv, Verb, Adjektiv usw.) kann ebenfalls nützlich sein. Das erste Problem besteht darin, die Wortart zu identifizieren, die durch jedes Wort repräsentiert wird. Das zweite Problem liegt in der Präsentation: Es wäre besser, aber schwieriger zu programmieren, eine Schnittstelle zu haben, bei der der Benutzer den Teil der Sprache auswählen kann, bevor er die Wörter anzeigt.
Elektronische, öffentlich zugängliche Wörterbücher
Mein erster Versuch besteht darin, das GNU Collaborative International Dictionary of English (GCIDE) zu verwenden. Es basiert auf einer alten Version von Webster (1914), wobei einige Wörter von moderneren Herausgebern hinzugefügt wurden.