Revision history for Lingo¶ ↑
1.10.2 [2019-02-05]¶ ↑
-
Fixed regression introduced in 1.9.0 where source form was assumed to be a Lingo::Language::Token (issue reported by Leonhard Maylein).
1.10.1 [2019-02-01]¶ ↑
-
Fixed regression introduced in 1.8.6 where renamed constant in Lingo::Attendee::VectorFilter was not reflected in Lingo::Srv (issue #16 by svelsae).
1.10.0 [2018-06-16]¶ ↑
-
Dropped support for Ruby 2.0.
-
Updated dependency versions.
1.9.0 [2016-09-13]¶ ↑
-
Dropped support for Ruby 1.9.
-
Removed support for deprecated options and attendee names (
old
→new
):-
Lingo::Language::Grammar:
compositum
→compound
-
Lingo::Attendee::TextReader:
lir-record-pattern
→records
-
Lingo::Config:
multiworder
→multi_worder
,objectfilter
→object_filter
,textreader
→text_reader
,textwriter
→text_writer
,vectorfilter
→vector_filter
,wordsearcher
→word_searcher
-
-
Lingo::Attendee::TextWriter learned format directives for
ext
option (currently supported are:%c
= config name,%l
= language name,%d
= current date,%t
= current time). -
Lingo::Attendee::Sequencer remembers word form of sequences.
-
Updated and extended English system dictionary and suffix list.
-
Fixed errors with XML input (issue #15 by Thomas Berger).
1.8.7 [2015-08-07]¶ ↑
-
Added Lingo::Attendee::LsiFilter to correlate semantically related terms (LSI) over the “corpus” of all files processed during a single program invocation; requires lsi4r which in turn requires rb-gsl. [EXPERIMENTAL: Interface may be changed or removed in next release.]
-
Added Lingo::Attendee::HalFilter to correlate semantically related terms (HAL) over individual documents; requires hal4r which in turn requires rb-gsl. [EXPERIMENTAL: Interface may be changed or removed in next release.]
-
Added Lingo::Attendee::AnalysisFilter and associated
lingoctl
tooling. -
Multiword dictionaries can now identify hyphenated variants (e.g.
automatic data-processing
); sethyphenate: true
in the dictionary config. -
Lingo::Attendee::Tokenizer no longer considers hyphens at word edges as part of the word. As a consequence, Lingo::Attendee::Dehyphenizer has been dropped.
-
Dropped Lingo::Attendee::NonewordFilter; use Lingo::Attendee::VectorFilter with option
lexicals: '\?'
instead. -
Lingo::Attendee::TextReader and Lingo::Attendee::TextWriter learned
encoding
option to read/write text that is not UTF-8 encoded; configuration files and dictionaries still need to be UTF-8, though. -
Lingo::Attendee::TextReader and Lingo::Attendee::TextWriter learned to read/write Gzip-compressed files (file extension
.gz
or.gzip
). -
Lingo::Attendee::Sequencer learned to recognize
0
in the pattern to match number tokens. -
Fixed Lingo::Attendee::TextReader to recognize BOM in input files; does not apply to input read from
STDIN
. -
Fixed regression introduced in 1.8.6 where Lingo::Attendee::Debugger would no longer work immediately behind Lingo::Attendee::TextReader.
-
Fixed
lingoctl
copy commands when overwriting existing files. -
Refactored Lingo::Database::Crypter into a module.
-
JRuby 9000 compatibility.
1.8.6 [2015-02-09]¶ ↑
-
Lingo::Attendee::VectorFilter learned
pos
option to print position and byte offset with each word. -
Lingo::Attendee::VectorFilter learned
tfidf
option to sort results based on their tf–idf score; the document frequencies are calculated over the “corpus” of all files processed during a single program invocation. -
Lingo::Attendee::VectorFilter learned
tokens
option to filter on Lingo::Language::Token in addition to Lingo::Language::Word. -
Lingo::Attendee::VectorFilter no longer supports
debug
(as well asprompt
andpreamble
); use Lingo::Attendee::DebugFilter instead. -
Lingo::Attendee::TextReader no longer removes line endings; option
chomp
is obsolete. -
Lingo::Attendee::TextReader passes byte offset to the following attendee.
-
Lingo::Attendee::Tokenizer records token's position and byte offset.
-
Lingo::Attendee::Tokenizer learned
skip-tags
option to skip over specified tags' contents. -
Lingo::Attendee subclasses warn when invalid or obsolete options or names are used.
-
Changed German infix substitution
/en
toch/chen
in order to prevent overly aggressive identifications. -
Internal refactoring and API changes.
1.8.5 [2014-10-02]¶ ↑
-
Dictionary values (projections) are no longer sorted; hence, order of definition affects processing.
-
Lexicals in Lingo::Language::Word are no longer sorted; in particular, compound parts keep their original order.
-
Lexicals in Lingo::Language::Word are no longer cleaned from duplicates.
-
Compiled dictionaries are updated whenever the Lingo version or their configuration changes, not only when the source file's size or modification time changes.
-
Lingo::Attendee::Synonymer learned
compound-parts
option to also generate synonyms for compound parts when set totrue
. -
Lingo::Attendee::TextReader learned better PDF-to-text conversion using the
pdftotext
command; specifyfilter: pdftotext
in the config. -
Lingo::Attendee::VectorFilter learned
dict
option to print words in dictionary format (viz. Lingo::Database::Source::WordClass). -
Lingo::Attendee::VectorFilter learned
preamble
option to print current configuration to the beginning of the log file (debug: 'true'
); setpreamble: false
to disable. -
Multiword dictionaries compiled from base forms can now generate inflected adjectives based on the gender of the head noun; set
inflect: true
in the dictionary config. -
Lingo::Database::Source::WordClass supports gender information being encoded in the dictionary as well as shorthand notation for multiple word classes/genders.
-
Lingo::Database::Source::WordClass supports compounds being encoded in the dictionary (appending
+
to their parts' word classes is recommended). -
Lingo::Database::Source removes leading and trailing whitespace from dictionary lines.
-
Lingo::Database::Crypter uses OpenSSL to encrypt/decrypt dictionaries. Note: Can't decrypt dictionaries encrypted with the old scheme anymore.
-
Lingo::Attendee::Tokenizer learned subset of MediaWiki syntax.
-
Eliminated pathological behaviour of the
URLS
rule in Lingo::Attendee::Tokenizer. -
Fixed regression introduced in 1.8.2 where
combine: all
would no longer work in Lingo::Attendee::MultiWorder. -
Updated and extended Russian dictionaries. (Yulia Dorokhova, Thomas Müller)
-
lingoctl
no longer overwrites existing files without confirmation. -
lingoctl
learnedarchive
command. -
Dictionary cleanup.
1.8.4 [2013-10-18]¶ ↑
-
Lingo::Attendee::Sequencer accepts regular expression patterns.
-
Lingo::Attendee::Sequencer substitutes
0
in the format string for the matched pattern. -
Lingo::Attendee::NonewordFilter learned
dict
option to print nonewords in dictionary format. -
Added progress reporting to Lingo::Attendee::TextReader for
STDIN
. -
lingoctl demo
reports successful initialization. -
Russian localization for Lingo::Web. (Yulia Dorokhova, Thomas Müller)
-
Lingo::Web learned parameter
hl
to set UI language. -
Lingo::Web displays the configuration in use.
-
Lingo::Srv accepts array of query strings in addition to single query string.
-
Meeting config takes precedence over language config.
-
When dictionary entries are rejected during conversion, the location of the reject file will be shown.
-
LIR record number defaults to match string in absence of capture group.
-
Optionally prevent Lingo from sorting any results by setting the
LINGO_NO_SORT
environment variable.
1.8.3 [2012-09-20]¶ ↑
-
Fixed regression introduced in 1.8.2 where reading input from
STDIN
was no longer possible. -
Fixed regression introduced in 1.8.2 where Lingo would no longer run on Ruby 1.9.2.
-
Fixed length limit handling for multibyte characters in SDBM store.
-
Fixed encoding issue in SDBM store.
-
Fixed issue with BOM in config files.
-
Modified character handling to accept any Unicode letter (Alphabetic) and digit (Decimal Number).
-
Modified Lingo::Attendee::Tokenizer to use only hard-coded tokenization rules.
-
Modified Lingo::Attendee::VectorFilter option
lexicals
to be case-sensitive. -
Improved overall performance and memory usage; Lingo::Attendee::Sequencer changed the order sequences are inserted into the stream.
-
Eliminated performance penalty caused by Lingo::Attendee::Abbreviator.
-
Added Russian language support. (Yulia Dorokhova, Thomas Müller)
-
Added
fields
option to Lingo::Attendee::TextReader to cut off field labels; defaults totrue
in record (LIR) mode. -
Added
skip
option to Lingo::Attendee::TextReader to skip lines matching the given pattern. -
Added
src
option to Lingo::Attendee::VectorFilter to print “source” part of compounds. -
Added
lingosrv
andlingoweb
executables. The former provides a simple HTTP endpoint with JSON output; the latter serves a demo web interface. -
Refactored internal caching.
-
Made dependency on Ruby version >= 1.9.2 explicit.
-
Removed reporting facility (options
--perfmon
and--status
). -
Learned
--profile
option to collect profiling information while running. -
Deprecated Lingo::Language::Grammar option
compositum
(nowcompound
), Lingo::Config optiontextreader
(nowtext_reader
), and Lingo::Attendee::TextReader optionlir-record-pattern
(nowrecords
); they will be removed in Lingo 1.9.
1.8.2 [2012-04-19]¶ ↑
-
Performance improvements regarding Lingo::Attendee::VectorFilter (as well as Lingo::Attendee::NonewordFilter) memory usage; set
sort: false
in the config. -
Added Lingo::Attendee::Stemmer (implementing Porter's algorithm for suffix stripping).
-
Added progress reporting to Lingo::Attendee::TextReader; set
progress: true
in the config. -
Added directory and glob processing to Lingo::Attendee::TextReader (new options
glob
andrecursive
). -
Renamed Lingo::Attendee::TextReader option
lir-record-pattern
torecords
. -
Fixed Lingo::Attendee::Debugger to forward all objects so it can be inserted between any two attendees in the config.
-
Fixed regression introduced in 1.8.0 where Lingo would not use existing compiled dictionary when source file is not present.
-
Fixed “invalid byte sequence in UTF-8” on Windows for SDBM store.
-
Enabled pluggable (compiled) dictionaries and storage backends.
-
Extensive internal refactoring and cleanup. (Finished for now.)
1.8.1 [2012-02-19]¶ ↑
-
Introduced alternative storage backends, mainly to circumvent SDBM's record size limit.
-
Warn when truncating a record for SDBM now.
-
Added benchmarks for storage backends.
-
-
Added demo and sample commands to
lingoctl
and introduced aliases. -
Added default plugin path.
-
Fixed Gem dependencies.
-
Updated the German system dictionary.
-
Extended the README with test setup and literature.
-
Internal refactoring and some housekeeping.
1.8.0 [2012-01-01]¶ ↑
-
Ruby 1.8 officially no longer supported! Use Lingo 1.7.x instead.
-
Executable may be run from outside installation root directory now. See README for further details.
-
Search path for dictionaries and configuration files; plugin system.
-
Lingo::Attendee::TextReader can read from
STDIN
if no files given; leave out thefiles
parameter in the config for this to trigger. -
Status/performance details as well as progress information are now printed on
STDERR
instead ofSTDOUT
in order to not mix with regular output. Learned--log
option to write such information to a file. -
Additional internal refactorings. (To be continued…)
1.7.1 [2011-10-24]¶ ↑
-
Lingo::Attendee::MultiWorder actually finds the longest matching multiword group.
-
Multiword entries in Lingo::Database::Source::SingleWord dictionaries now respect
def-wc
; new parameterdef-mul-wc
to control the word class for multiword entries (defaults todef-wc
). Usedef-mul-wc: 'm'
in your.lang
to restore the previous behaviour. -
Added Lingo::Attendee::Formatter for configurable output formatting as an alternative to Lingo::Attendee::TextWriter.
-
Added basic input filters to enable indexing of HTML/XML (and PDF) files.
-
Updated the system dictionary.
-
Switched license to Affero GPL.
1.7.0 [2010-12-15]¶ ↑
-
More Ruby 1.9 compatibility.
-
Extended Lingo::Attendee::VectorFilter to double as enhanced Lingo::Attendee::NonewordFilter.
-
Fixed Lingo::Attendee::Sequencer to recognize additional word classes beyond the first.
-
Fixed Lingo::Attendee::Sequencer to not prematurely flush the buffer, which led to a decreased recognition rate.
-
Housekeeping.
1.6.12 [2010-11-22]¶ ↑
-
Ruby 1.9 compatibility, finally.
-
Added
lingoweb.rb
, a plain & simple web frontend for Lingo. -
Added DIFF-LCS gem directly to Lingo distribution.
1.6.11 [2010-02-04]¶ ↑
-
Redirect Lingo output to
/dev/null
during testing. Indicate error with appropriate exit code. -
Replace usage of command-line diff with cross-plattform Ruby implementation (requires diff-lcs).
-
Provide alternatives to standard zip command on windows platforms.
-
Use
UNK
itself if it doesn't have any lexicals. -
Use compo form instead of word form when lexicalizing compound entry for multiword dictionaries.
-
Lingo::Language::LexicalHash#[] must use target (not source) form.
-
Optionally, try to find matches for all lexicals a word has.
-
Made '-' a
PRINTABLE_CHAR
. -
Allow synonyms to be considered for multiword matching.
-
Don't use compound parts.
-
Introduced some (more or less arbitrary) line length limit. We can only store values of a certain length anyway (with SDBM). Entries exceeding this limit will be rejected and logged in the
.rev
file.
1.6.10 [2009-11-09]¶ ↑
-
Prevent “infinite” backtracking in regular expressions.
1.6.9 [2009-08-13]¶ ↑
-
Updated configs.
1.6.8 [2009-06-01]¶ ↑
-
Partly reverted Ruby 1.9 compatibility where it clashed with the 1.8 series.
1.6.7 [2009-05-21]¶ ↑
-
Initiale Bereitstellung von Lingo in Subversion
-
BUGFIX: Token wurden durch den Caching-Mechanismus in ihrer Schreibweise verändert (Groß-/Kleinschreibung).
-
Englische Wörterbücher, ein Beispiel-Artikel und eine Konfiguration für das Englische wurden aufgenommen. Aufruf mit
lingo.rb -c lingo-en.cfg -l en <datei>
. -
Integration der Testumgebung für Entwickler.
-
Die Attendees in den Lingo-Konfigurationsdateien werden automatisch verkettet. Dies erspart mühsame Verlinkung von Hand und macht die Konfiguration lesbarer.
-
Modified parameters for Tokenizer and building of databases to handle UTF-8 correctly. Printable characters from the ASCII charset and every UTF character greater than x80 is now recognized as a non word breaking character. so now diacritical characters are handled well.
-
Added a command line option
-p
for lingo.rb for making detailed performance mesurements possible for each single attendee. -
Allow Lingo.new to be called from a different directory. (Still need to Dir.chdir to talk because of the dictionaries…).
-
Allow Textreader to read from STDIN.
-
Allow Lingo to be called from an external library or program; pass a string and get an array back.
-
Allow Textwriter to write to STDOUT.
-
Match suffixes case-insensitively.
-
Don't exclude synonyms that are eponymous with the original word.
-
Don't stop variating hyphenated words if any component was taken as-is.
-
Basic Ruby 1.9 compatibility.
-
Words should be counted per record, not per document, in LIR mode.
-
Added Porter stemmer.
1.6.6 [2007-08-18]¶ ↑
-
Englische Wörterbücher ergänzt
Lingo kann nun auch Englisch. Dazu muss beim Aufruf von Lingo die Option
-l en
angegeben werden. Ein englischer Artikel ist unter txt/artikel-en.txt zu finden.
1.6.5 [2006-09-18]¶ ↑
-
Eckige Klammern als darstellbare Zeichen eingebaut
1.6.4 [2006-05-29]¶ ↑
-
Neuer Attendee Dehyphenizer
Zur Behandlung von Bindestrichen am Zeilenende wurde der Dehyphenizer eingeführt.
1.6.3 [2006-05-23]¶ ↑
-
GPL-Wörterbuch
Das Systemwörterbuch ist vollständig unter GPL gestellt.
1.6.2 [2006-05-12]¶ ↑
-
Pfad- und Dateibehandlung
Kleine Fehlerbehebung in der Pfadgenerierung im Textwriter.
-
Return-Codes
Bei Aufruf der Hilfe oder bei Fehlersituationen, die intern abgefangen werden, wird der Return-Code 1 gesetzt, um somit bessere Steuerung in der Batchverarbeitung zu ermöglichen.
1.6.1 [2006-03-22]¶ ↑
-
Fehlerkorrektur im Multiworder
Der Multiworder hat sich in einem seltenen Spezialfall nicht korrekt verhalten. Das ist bereinigt.
1.6.0 [2006-03-20]¶ ↑
-
Wörterbücher umbenannt
Die standardmäßig mitgelieferten Wörterbücher sind umbenannt worden in lingo-xxx.txt und haben als einheitlichen Separator zwischen Schlüssel und Werten das '='-Zeichen.
-
Bereinigungen durchgeführt
Aus dem Code sind viele alte Programmschnipsel entfernt worden.
1.6.0rc2b [2006-03-20]¶ ↑
-
Wörterbücher umbenannt
Die standardmäßig mitgelieferten Wörterbücher sind umbenannt worden in lingo-xxx.txt und haben als einheitlichen Separator zwischen Schlüssel und Werten das '='-Zeichen.
-
Bereinigungen durchgeführt
Aus dem Code sind viele alte Programmschnipsel entfernt worden.
1.6.0rc2a [2006-03-13]¶ ↑
-
Fehlerkorrektur Multiworder
Ein klitzekleiner Fehler hat sich doch durch die übereifrig schnelle Bereitstellung der neuen Version eingeschlichen. Ist korrigiert und in die Testroutinen mit aufgenommen.
-
Punkt-Behandlung vollständig überarbeitet (Abbreviator wieder im Einsatz!) => TEIL 2
…hatte ich doch vergessen zu erwähnen, dass als Voraussetzung für das Funktionieren der neu eingeführten Punkt-Behandlung ZWINGEND die Tokenizer-Regel 'ABRS' in der
de.lang
auskommentiert werden muss.
1.6.0rc2 [2006-03-09]¶ ↑
-
Vorsicht bei CFG-Dateien!
Multiworder und Sequencer vertragen beide einen 'stopper'-Parameter, der in der Regel mit 'PUNCT,OTH_C' vorbelegt ist. Dies soll Token identifizieren, die durch die Regel gleichen Namens im Tokenizer erkannt wurden. Diese Regeln sind jedoch umbenannt worden (weiß nicht mit welcher Version) in 'PUNC' und 'OTHR'. Daher bitte die entsprechenden Einträge ändern auf 'PUNC,OTHR'.
-
Punkt-Behandlung vollständig überarbeitet (Abbreviator wieder im Einsatz!)
Die Behandlung des Zeichen '.' wurde komplett neu designet. Das Zeichen '.' kommt grundsätzlich in drei verschiedenen Kontexten vor:
1. Als Punkt hinter einer Zahl (1. = Erster, 2. = Zweiter,…) 2. Als Abkürzungspunkt 3. Der Satzendepunkt
Der 1. Fall ist sehr sicher durch eine Tokenizer-Regel zu identifizieren und wird daher hier nicht weiter betrachtet. Dabei wird kein Punkt-Token erzeugt, sondern der Punkt im Stammwort mitgegeben (z.B. <1.>).
Zwischen dem 2. und dem 3. Fall macht der Tokenizer keine Unterscheidung mehr. Der Punkt wird als eigenständiges Token erkannt und in den Verarbeitungsstrom weitergereicht. Der Abbreviator versucht nun Abkürzungen anhand von Punkt-Token zu erkennen. Taucht ein Punkt im Zeichenstrom auf, dann wird das vorhergehende Word im Abkürzungswörterbuch nachgeschlagen. Wird das Wort dort gefunden, wird das Punkt-Token aus dem Zeichenstrom entfernt und die Abkürzung als identifiziert weitergereicht.
Bleibt neben dem Satzendepunkt noch der Abkürzungspunkt z.B. in Personennamen (John F. Kennedy). Diese müssen vom Multiworder zuverlässig als Teil einer Mehrwortgruppe erkannt und ggf. ebenfalls entfernt werden. Die zusätzlich aufgebohrtet Testroutinen zeigten ein zuverlässiges Verhalten.
1.6.0rc1 [2006-02-27]¶ ↑
-
Grundlegende architektonische Überarbeitung
Die über ein Jahr gewachsene Struktur von Lingo wurde grundlich überarbeitet. Detailliertere Dokumentation folgt.
-
Abbreviator entfernt
Den Attendee Abbreviator gibt es nicht mehr. Seine Funktion wird vom Wordsearcher mit übernommen. Wenn ein Wort nicht erkannt wird, so prüft der Wordsearcher das Wort erneut mit abschließendem Punkt, wenn das nächste Token im Zeichenstrom tatsächlich ein Punkt ist. In diesem Fall wird das Punkt-Token aus dem Datenstrom entfernt.
-
Ocr_variator heißt jetzt Variator
Kleine kosmetische Anpassung. Der Ocr-Bezug stimmt zwar historisch gesehen noch, mit der eigentlichen Funktion hat es jedoch nichts zu tun.
-
Decomposer mit zusätzlicher Validitätsprüfung und Kennzeichnung
Der Decomposer kann bei Bedarf Komposita einer zusätzlichen Prüfung unterziehen. Ist der Schlüssel
de.lang:language/dictionary/compound/skip-sequences
angegeben, der z.B. in der Formskip-sequences: [ VS ]
definiert wird, wird zusätzlich geprüft, ob das Kompositum mit seinen Teilen diesen Wortklassen entspricht. Hiernach werden Komposita verworfen, die aus Verb-Substantiv-Kombination bestehen. Die Angabe des Parameters ist optional. Zusätzlich werden bei Angabe des Schlüsselsde.lang:language/dictionary/compound/append-wordclass
, der i.d.R. einen ein Zeichen langen String enthält, die durch Zerlegung erkannten Wortstämme markiert, in dem ihre Wortklasse das über diesen Schlüssel definierte Zeichen angehangen bekommt. -
Install.rb nicht mehr notwendig
Die Umwandlung von Text-Dateien in SDBM-Dateien erfolgt nicht mehr über Install, sondern durch 'jeden' Lingoaufruf implizit. Beim öffnen der SDBM-Datei wird automatisch die Aktualität geprüft und bei Bedarf eine erneute Übersetzung angestartet.
1.5.0 [2005-12-08]¶ ↑
-
Sprachkonfiguration aktualisiert
Die Konfigurationsdatei de.lang ist an produktive Erfahrungen angepasst worden. Insbesondere werden jetzt alle Sonderzeichen der Zeichensätze ISO-8859-1 und Windows-1252 vollständig erkannt, ohne dass laufend Zeichen nachgepflegt werden müssen.
-
Cachable arbeitet jetzt mit Duplikaten
Objekte, die in den Cache von Datasource, Dictionary oder Grammer übernommen wurden, wurden auch immer als Referenz ausgelesen. Die hatte zur Folge, dass wenn Cacheinhalte im späteren Verlauf der Lingo-Kette verändert wurden, diese Veränderung auch alle nachfolgen aus dem Cache gelesenen Objekte betraf. D.h.: Wird das Wort <von|?> in den Cache geschrieben, so werden alle nachfolgenden Suchanfragen aus dem Cache bedient. So weit so gut. Wenn ein Attendee nach Cacheauslesen der Meinung ist, er müsste für das Objekt das Attribut z.B. auf 'MU?' (Teil einer Mehrwortgruppe) ändern, dann wurde dadurch auch das Element im Cache geändert. Nachfolgende Suchanfragen erhielten somit <von|MU?> als Antwort. Ab jetzt werden nur noch Kopien des Originals in den Cache übernommen, so das eine versehentliche Veränderung ausgeschlossen wird.
-
String hat attr-Methode
Die Methode select der Klasse Dictionary gibt die gefundenen Lexicals sortiert zurück. Bei der Verarbeitung von Mehrwortwörterbüchern kann jedoch auch z.B. '*5' als Antwort gegeben werden, was dem Multiworder mitteilt, dass es eine Mehrwortgruppe der Länge 5 gibt, die mit genau den drei nachgefragten Wörtern beginnt und der Multiworder eine weitere Abfrage machen soll. Klappt alles wunderbar, nur dass select nicht in der Lage ist ein Array aus Lexicals und Strings anhand des attr-Wertes zu sortieren. Jetzt hat hat die Klasse String eines attr-Wert '' bekommen und die Sortierung funktioniert wieder.
-
Neues Synonym-Wörterbuch
Ein sehr gut gepflegtes Synonym-Wörterbuch ist als Beispiel mit aufgenommen worden. Wie beim Mehrwortwörterbuch system_mul.txt sind jedoch nur Einträge mit dem Anfangsbuchstabe 'a' enthalten.
1.5.0rc2 [2005-12-06]¶ ↑
-
Fehlerkorrekturen und Anpassungen
- Multiworder verarbeitet wieder mehrere Wörterbücher. - Synonyme mit '_' statt ' ' für LIR-Format wieder entfernt. - Abbreviator mit initialem Wörterbuch versehen - System_dic mit Stopwörtern versehen - Bei install.rb `…` durch system()-Aufruf getauscht - Browser bei install.rb über Parameter -b konfigurierbar - Kleinere Anpassungen
1.5.0rc [2005-11-27]¶ ↑
-
Kompositumerkennung redesigned
Neben den Klassen für Datenzugriff auf unterster Ebene (Datasource) und dem Wörterbuchzugriff (Dictionary) gibt es nun auch eine Klasse für grammatikalische Spezialitäten (Grammar), welche die Kompositumerkennung aufgenommen hat.
-
Testroutinen ausgebaut
Alle bisher per Mail gemeldeten Fehlersituationen sind in die Testroutinen eingebaut worden, so dass sie bei zukünftigen Versionen direkt mit getestet werden. Also weiterhin fleißig per Mail z.B. an error@lex-lingo.de melden.
-
Stopworder getilgt
Der Stopworder hat seine Schuldigkeit getan. Sein Konzept ist von gestern. Weil er auch durch normale Wörterbuchsuche abbildbar ist, wird hier auf die weitere Pflege verzichtet. Bitte in den Konfig-Dateien berücksichtigen! und WICHTIG: Stopwörter im Wörterbuch ggf. nachpflegen!
-
Neuer Attendee Abbreviator
Bisher hat der Tokenizer per Konfiguration eine Liste von Abkürzungen mitgeteilt bekommen, die er in einer Textzeile als Token erkennen und in den Datenstrom einfliessen lassen sollte. Die Pflege dieser Konfigurationsdaten fiel vollends aus dem sonst stringenten Wörterbuchkonzept heraus. Daher wurde dies Funktion in den Abbreviator ausgelagert, der sich die bekannten Abkürzungen aus einem eigenen Wörterbuch holt. Bitte in den Konfig-Dateien berücksichtigen!
-
Datenformate in
de.lang
vereinfachtDie Datenformate für den Tokenizer und die _Suffix_e haben sich in der Sprachkonfigurationsdatei de.lang geändert. Sofern eine alte de.lang-Datei mit dieser Version zusammen laufen soll, bitte in den Konfig-Dateien berücksichtigen!
-
Attendees überarbeitet
Das Verhalten der Attendees wurde homogenisiert. Als zusätzliche Klasse wurde der BufferedAttendee eingeführt, der den Eingabe-Strom zwischen speichern kann und den angestauten Buffer mit einem mal verarbeiten kann. Dies ist insbesondere förderlich für die Attendees Multiworder und Sequencer, die eine Kette von Objekten untersuchen müssen.
-
Dokumentation erstellt
Für alle Attendees gibt es jetzt reichlich Dokumentation, die mit doc/index.html aufgerufen werden kann. Weitere Dokumentation muss noch folgen…
1.4.2 [2005-10-11]¶ ↑
-
Bugfix im Sequencer
Der Sequencer sorgte für Fehlfunktionen, wenn er aus dem Multiworder Worter unerwarteten Typs erhielt.
1.4.1 [2005-09-29]¶ ↑
-
Synonymer verarbeitet jetzt WIRKLICH mehrere Wörterbücher
Aus einem mir bislang unbekannten Grund sind die in der letzten Version gemachten Änderungen nicht übernommen worden. Ist bereinigt.
-
Vector_filter mit geändertem
sort
-ParameterDer
sort
-Parameter konnte vormals die Wertenormal
,count
undterm
annehmen. Die Wertecount
undterm
wurden durch die Bezeichnungenterm_abs
undterm_rel
ersetzt. Zusätzlich hinzugekommen sind die Wertesto_abs
undsto_rel
, welche mit den o.g. korrespondieren, der Zahlenwert jedoch in geschweiften Klammern hinter dem Wort stehen. Dies ist notwendig für das LIR-Format. -
Für zukünftige Meldungen!
Besteht ein Änderungsbedarf aufgrund eines Fehlers oder der Wunsch einer Funktionserweiterung? Mailt mir eure Wünsche an
rfc@lex-lingo.de
1.4.0 [2005-09-25]¶ ↑
-
Neuer Attendee Sequencer
Der Sequencer erkennt Mehrwortgruppen, die nicht über ein Wörterbuch vorgegeben werden müssen, sondern über ihre Wortklassen erkannt werden. Steht z.B. in
de.lang:language/attendees/sequencer/sequences: [ [AS, "2, 1"], [AK, "2, 1"] ]
so werden Wortfolgen der Art Adjektiv-Subjektiv und Adjektiv-Kompositum erkannt und in der in Gänsefüsschen angegebenen Form als Indexeintrag bereitgestellt. So wird 'geniale Indexierung' als 'indexierung, genial' in Form eines zusätzlichen Wortes in den Ausgabestrom eingefügt mit AttributSEQ
und der Wortklasseq
. -
Bugfixing Kompositum-Caching
Beim zweiten Auftreten eines Kompositums wurde das Kompositum als nicht erkanntes Wort weiterverarbeitet. Der Fehler im Chahing-Mechanismus ist behoben, so dass die LIR-Verarbeitung wieder korrekt läuft.
-
Synonymer verarbeitet mehrere Wörterbücher
Mit Angabe des Parameters
mode=all
kann der Synonymer jetzt auch mehrere Wörterbücher verarbeiten.
1.3.1 [2005-08-18]¶ ↑
-
Neuer Attendee Objectfilter
Als Basis für eine eher allgemeinere und flexiblere Filter-Möglichkeit im Vergleich zum Noneword_filter kann der Objectfilter alle Arten von Selektion vornehmen. Das Attribut
objects
ist eine Ruby-Bedingung, die, wenn sie alsfalse
ausgewertet wird, dass aktuelle Objekt filtert.
1.3.0 [2005-08-03]¶ ↑
-
Neuer Attendee Compositizer
Die Kompositumzerlegung war bisher im Attendee Wordsearcher enthalten. Dadurch wurden für die Zerlegung immer die gleichen Wörterbücher benutzt, die auf für die Wortsuche verwendet wurden. Durch die Trennung ist eine separate Angabe von Wörterbüchern möglich.
-
Testing
Ausführliche Testroutinen sind erstellt worden, welche die Folge-Releases deutlich stabiler machen werden. Innerhalb einer Sekunde sind sämtlich Attendees durchgetestet. Die durchgeführten Tests basieren auf Fehlermeldungen und Anregungen aus vergangenen E-Mails. Sie können jederzeit erweitert werden. In diesem Zusammenhand ist auf die Basisklasse aller Attendees (vorher Lingo) neu erstellt worden. In Verbindung mit der Einführung von YAML als Konfigurationssprache wurden diese automatischen Tests erst möglich.
-
YAML
Bei YAML unbedingt darauf achten, dass keine TABs verwendet werden. YAML ist da sehr empfindlich.
1.2.1 [2005-07-03]¶ ↑
-
Fehlerkorrektur LIR-Absturz
Bei der Suche nach Mehrwortsynonymen wurden auch interne Steuercodes an weitere Attendees weitergeben, die damit nichts anfangen konnten. Synonymer filter jetzt bei der Suche interne Steuercodes heraus.
1.2.0 [2005-07-02]¶ ↑
-
Vector_Filter mit Term-Frequenz
Wird beim Attendee Vector_filter das Attribut
sort='term'
angegeben, wird statt der absoluten Zahl (wie beisort='count'
) die Term-Frequenz eines Wortes ermittelt. Die Term-Frequenz bezieht sich auf die Anzahl Worte in der Datei. Diese wiederum können über das Attributno-count
gesteuert werden. Das Attribut entscheidet darüber, welche Wort-Typen nicht in die Gesamtwortanzahl der Worte in der Datei berücksichtigt werden. Default hierfür istno-count='PUNCT,OTH_C'
. -
Kompositum-Zerlegung mit weiterer Einschränkung
Ein weiterer Parameter ist für die Kompositumzerlegung hinzugekommen. Als Attribute des Tags
XML:dictionary/compound
können jetzt angegeben werden:Attribut Default Funktion ======================================================================== min-word-size 8 Prüft nur Wörter ab dieser Größe auf Kompositum
Die folgenden Attribute werden auf gefundene Komposita angewendet. Das Kompositum muss diese Prüfung bestehen, um gewertet zu werden.
min-avg-part-size 4 Die durchschnittliche Größe aller Wortteile muss mindestens diesen Wert haben min-part-size 1 Jeder Wortteil muss mindestens so groß sein max-parts 4 Es darf höchstens so viele Wortteile geben.
-
Install-Routine um Linux-Kommandos erweitert
Die Install-Routine sollte jetzt alle Aufgaben sowohl auf Windows wie auch Linux komplett abschließen können.
-
Zu lange Datensätze
Trotz anderweitiger Meinung haben Klaus und ich gemeint, Datensätze größer 1024 Bytes werden nicht benötigt. Kam halt anders. SDBM kann keine Sätze größer 1k speichern, weshalb die Informationen derzeit ziemlich q&d auf 1k getrimmt werden.
1.1.1 [2005-06-18]¶ ↑
-
Test-Routinen erweitert
Insbesondere die Sortierung von Lexicals wurde noch einmal intensiv unter die Lupe genommen. Dabei sind ein paar kleine Dinge noch begradigt worden.
-
Install-Routine bereinigt
Install.rb soll in Richtung Plattformunabhängigkeit weiterentwickelt werden, so dass auch Linux nicht zu kurz kommt. Da fehlen noch ein paar Kommandos, aber die Routine wird euch zu gegebener Zeit fragen :o) !!Einzelne Datenbanken können jetzt angesprochen werden!! Mit 'install -data -r rdk' werden z.B. alle Datenbanken, die rdk im Namen enthalten, gelöscht und mit 'install -data rdk' auch wieder hergestellt. Das sollte die Pflege der Datenbanken deutlich erleichtern.
-
VORSICHT: KNOWN ERROR
Die Datenbanken werden im Verzeichnis de/store gespeichert. Unter Linux scheint das Erstellen des Verzeichnisses noch nicht die richtigen Rechte mitzugeben. Teste ich noch unter Linux, bis dahin bitte das Unterverzeichnis vor dem Aufruf von Install von Hand anlegen!
1.1.0 [2005-06-18]¶ ↑
-
Umstellung der Versionsnummernsystematik
Damit auch Patches und Bugfixes nicht als herrenloses Archiv ausgetauscht werden müssen und jeden besser in Erinnerung verbleibt, wann welche Funktionserweiterung dazu kam, gelten für die Veränderungen in den Versionsnummern folgende Regeln:
X.0.0 Die erste Stelle kennzeichnet einen grundlegenden architektonischen Umbau von Lingo, wie z.B. den Wechsel von Rubyling auf Lingo. Im Zweifel zählt hierzu auch eine zehnmalige Funktionserweiterung :o) 0.X.0 Die zweite Stelle kennzeichnet eine Funktionserweiterung, wie z.B. die Verarbeitung von Mehrwortgruppen. 0.0.X Die letzte Stelle ist für Bugfixes vorbehalten.
Gegebenenfalls kann der Versionsnummer noch ein kleiner Buchstabe folgen, der anzeigt, dass sich lediglich an der Dokumentation etwas geändert hat. Gestartet wird mit der 1.1.0 (Erweiterung um Mehrworterkennung), die im wesentlichen der Vorversion (alte Systematik) entspricht.
1.0.4 [2005-06-17]¶ ↑
-
Datenbankformat und -zugriff vereinheitlicht
Bisher gab es drei verschiedene Datenformate für Wörterbücher, Synonyme und Mehrwortgruppen. Alle drei Typen finden sich nun in einem universellen Format wieder. Ebenso wurde der Zugriff auf die Daten modifiziert. Wurden vorher je nach Typ einmal eine Liste der erkannten Grundformen (Lexical) als Ergebnis erzeugt und ein anderes mal nur eine Zeichenkette zurück gegeben, werden jetzt alle Zugriffe auf die Daten als Lexical-Liste generiert. Dies hatte Auswirkungen auf die Synonymerkennung, da bisher die die Wortklasse 'y' aus dem Programm und nicht aus den Datendateien kam.
-
Multiworder verarbeitet mehrere Datenbanken
Die Verarbeitung von mehreren Datenbanken für einen Zugriff wird normalerweise in der Klasse Dictionary erledigt. Da der Multiworder jedoch die Funktionen der Dictionary-Klasse nicht benötigt, greift er direkt auf die Klasse DataSource zu, welche diese Funktion nicht besitzt. Daher musste die Verarbeitung mehrerer Datendateien im Multiworder selbst erfolgen.
1.0.3 [2005-05-21]¶ ↑
-
Multiworder fertig!
Mit dem neuen Attendee Multiworder werden Mehrwortgruppen locker und schnell erkannt. Erkannte Gruppen werden als als zusätzliches (Dummy-)Wort mit in den Datenstrom eingespeist. Die Geschwindigkeit wird dadurch erreicht, dass die Mehrwortgruppen in Ihren jeweiligen Grundformen gespeichert werden. Das ist genau dass, was der Multiworder frei Haus geliefert bekommt. Das klappt wunderbar, wenn für den Multiworder-Lauf und die Ersterstellung des Mehrwörterbuches die gleichen Wörterbücher verwendet werden. Soll heißen, wenn zu einem späteren Zeitpunkt zusätzliche Wörterbücher hinzu gezogen werden, kann eine erneute Erstellung der Mehrwörterbuches Sinn machen, um die Erkennungsquote zu verbessern. Diese Version arbeitet mit einem abgespeckten Mehrwörterbuch.
-
Install.rb weiter ausgebaut
Die einzelnen Installationsphasen können jetzt auch einzeln aufgerufen werden. Mit den Optionen -data, -test und -docu können die jeweiligen Phasen wiederholt werden. Mit der zusätzlichen Option -r kann auch alles wieder rückgängig gemacht werden.
1.0.2 [2005-04-30]¶ ↑
-
Install.rb
Nach dem Download sollte als erstes ruby install.rb aufgerufen werden. Dadurch werden notwendige Vorarbeiten erledigt, z.B. Erstellung der Dokumentatio in /doc oder der Datenbasis in /de
-
Forget MySQL
Als erstes filebasiertes Datenzugriffssystem wurde SDBM integriert. Darüber wird MySQL überflüssig. Alle relevanten Daten liegen im Unterverzeichnis /de. Siehe auch de.xml:<datasource>. Vor der ersten Nutzung sollten die SDBM-Dateien mit ruby dbm.rb erzeugt werden. (wird durch install.rb erledigt)
-
Sortierung im Vector_filter verbessert
Bei sort='count' wird jetzt nicht nur nach Häufigkeit sortiert sondern auch innerhalb der Häufigkeit nach Alphabet.
1.0.1 [2005-04-26]¶ ↑
-
Kompatibilität zur LIR
LIR-Formate können jetzt gelesen und CSV-Format geschrieben werden. Anpassungen in Textreader und Textwriter. Siehe auch lir.xml
-
Bug-Fix in Synonymer
Schweren Fehler entfernt. Wordklassen, die nicht geprüft werden sollten, wurden kastriert.
-
Kompositumverarbeitung im Vector_filter
Neben der Kompositum-Grundform werden jetzt auch die Grundformen der Wort-Teile mit eingesackt.
1.0.0 [2005-04-26]¶ ↑
-
Dokumentation erstellt
Sie ist zwar noch teilweise verteilt, aber sie ist da, z.B. in doc/index.html oder in Config.doc. Einigermaßen fertig (war ich nach der Erstellung). Bitte um Feedback was besser geht und was fehlt.
-
Attendees überarbeitet
Sehen jetzt noch einfacher aus. Brauchen nur noch die Methoden init - Zur Bereitstellung von Parametern und Konfiguration für die anderen Meth. control - Zur Verarbeitung von Kommandos process - Zur Ver- und Bearbeitung von zugestellten Objekten
-
Dictionary aufgesplittet
Da es mittlerweile drei Attendees gibt, die Datenbankzugriff brauchen, ist das Dictionary eine Hauptklasse geworden. Dazu gibt es eine rudimentärere Klasse, auf die das Dictionary sich für den Datenzugriff stützt: Datasource. Diese Klasse nutzt die vollen Möglichkeiten eines eigenen Datencaches, welches die Performance noch einmal deutlich verbessert hat.
-
Konfiguration aufgesplittet
Ja ja, mein Lieblingsthema, aber ohne eine saubere Konfigurationsmöglichkeit ist Lingo leider nix Wert. Gibt jetzt lingo.xml - Zur Konfiguration der Kommandozeilenoptionen de.xml - Enthält die sprachrelevante Konfiguration <ablauf>.xml - Enthält die Lingo-Konfiguration, z.B. rubyling.xml oder ocr.xml Mit ruby lingo.rb -c <ablauf> kann jeweils eine andere Konfig. gezogen werden.
0.9.8 [2005-04-16]¶ ↑
-
Class Config überarbeiten
Klar, immer die wichtigen Dinge zuerst. Die über die Kommandozeile erwarteten Parameter sind über lingo.xcl konfigurierbar. In Lingo.xml kann man auf die Kommandozeilen-Parameter als Variable zurückgreifen. Doku anschauen, lohnt sich…
0.9.0 [2005-04-01]¶ ↑
-
Noneword_variator
Auftragsarbeit von Klaus eingebaut.
0.8.0b [2005-03-30]¶ ↑
-
Lingo ist Rubyling, nur besser
Rubyling ist tot, es lebe Lingo! Rubyling wurde vollständig modularisiert.
-
Konfiguration mit Lingo.xml
Konfiguration vollständig überarbeitet. Lingo.cfg heißt jetzt lingo.xml. Mit dieser Endung ist sie leichter mit SciTe editierbar. Die Klasse LingoConfig kann jetzt (fast) generische XML-Syntax verarbeiten. Die Werte werden auf sehr einfache Weise im Code bereitgestellt. Hinzu kommt, dass die Aufruf-Parameter ebenfalls über diesen Weg zur Verfügung stehen. Dokumentation muss folgen :o)
1.4.1 [2005-03-18] (Rubyling)¶ ↑
-
Load_wbs.rb stabilisiert
Programm zeigte keine Reaktion mehr auf Laptop nach Standby. Daher stoppen und starten des MySQL-Dienstes eingebaut. Load_wbs.rb von Archiv rubyling_de nach rubyling verschoben (Version aus rubyling_de im nächsten Release entfernen!)
-
Rubyling Parameter korrigiert
Für Programmtests waren Parameter im Programm verdrahtet. Kommandozeile wurde ignoriert.
1.4.0 [2005-03-18] (Rubyling)¶ ↑
-
Interne Klassenhierarchie umgebaut
In der Datei word.rb sind nun die Klassen unterschieden nach Token, Lexical und Word inkl. weiterer Hilfsklassen.
-
Synonymverarbeitung eingebaut
Erkannte Worte werden zusätzlich auf Synonyme hin geprüft. Die Liste der Grundformen des Wortes wird dann um die gefundenen Synonyme erweitert. Die Synonym-Wörterbücher sind wie gewohnt in ruby.cfg unter database/synonym konfigurierbar. Derzeit wird openthesaurus als einziges Wörterbuch benutzt. Um openthesaurus zu nutzen, sei das Archiv rubyling_de (v1.0) wärmstens empfohlen.
-
Nicht erkannte Wörter
Als zusätzliche Datei wird jetzt auch noch eine Endung .non erzeugt, die alle nicht erkannten Wörter beinhaltet
-
Schnelle Installation
Die Umgebung von Rubyling ist jetzt auf drei Archive verteilt. Bitte weitere Änderungen an den Daten in den Archiven vornehmen und in dieser RELEASE.TXT dokumentieren. Alle Archive sind so aufgebaut, dass sie im Verzeichnis rubyling entpackt werden können.
Archiv Ziel Inhalt -------------------------------------------------------------------------- rubyling(v1.4) /rubyling Programm, Konfiguration und Dokumentation rubyling_de(v1.0) /rubyling/de Wörterbücher und Programm zum DB-Aufbau rubyling_txt(v1.0) /rubyling/txt Texte zum testen
1.3.0 [2005-02] (Rubyling)¶ ↑
-
Inline-Dokumentation erstellt
Mit Prozedur make_doc.cmd HTML-Seiten erstellen, dann docindex.html aufrufen
-
Konfiguration komplett überarbeitet
Eine zentrale Konfigurationsdatei ruby.cfg enthält im XML-Style alle Parameter, z.B. “<parm1 value='15'/>” in Ruby durch $CFG abfragbar. ruby-token.txt und ruby-suffix.txt sind nicht mewhr notwendig.
-
Reduzierung der linguistisch relevanten Klassen auf zwei Klassen
TextFile erweitert die Klasse File und ermöglicht die Datei-Verarbeitung auf Tokenbasis. Dictionary enthält mit der Methode search() die zentrale Schnittstelle für die Wörterbuch-Recherche (inkl. Stopwörtern, Suffixbehandlung und Kompositumzerlegung).
-
Rubyling erkennt bei Aufruf automatisch (jetzt richtig) das Dateiobjekt und unterscheidet Textdatei, Verzeichnis und DB-Datei (z.B. lir.txt). In den ersten beiden Fällen werden je Textdatei drei Ausgabedateien erstellt, die eine weitere Verbesserung der Verarbeitung ermöglichen:
.tok = Textfile in Token je Zeile zerlegt; .dic = Token mit Auflösung nach Wörterbuchzugriff; .vec = Inhaltsvektor der Datei.
Rubyling x.x vor dem 01.02.2005¶ ↑
-
Diverse Versionen, von denen Klaus meint, sie hätten noch keine eins vor dem Punkt verdient :o(