Help:Extension:Translate/Translation memories/nl

De Translate extensie translation memory ondersteunt ElasticSearch. Het doel van deze pagina is het helpen bij de installatie van ElasticSearch, en de specificaties gedetailleerd te beschrijven.

Anders dan andere hulpmiddelen voor vertalen, bijvoorbeeld externe machine vertaal services, wordt het vertaalgeheugen steeds bijgewerkt door nieuwe vertalingen in uw wiki. Geavanceerde zoeken in vertalingen is ook beschikbaar via Special:SearchTranslations als u er voor kiest om ElasticSearch te gebruiken.

Vergelijken
De database backend wordt standaard gebruikt: het heeft geen afhankelijkheden en heeft geen configuratie nodig. De database backend kan niet worden gedeeld door meerdere wiki'sen het schaalt niet bij grote hoeveelheden vertaalde tekst. Vandaar dat wij ook ElasticSearch als backend ondersteunen. Het is ook mogelijk om ander vertaalgeheugens te gebruiken als hun web API open is. Ander dan ElasticSearch worden remote backends niet bijgewerkt met vertalingen in de huidige wiki.

Vereisten


ElasticSearch backend
ElasticSearch is relatief gemakkelijk te configureren. Als het niet in uw distributie package zit, kunt u het downloaden van hun website. U moet dan ook de Elastica extensie downloaden. Lees eerst voor de specifieke configuratie die nodig is voor Translate.

Het script bootstrap smaakt de benodigde schema's. Als u de ElasticSearch backend gebruikt met meerdere wiki's, zullen ze standaard het vertaalgeheugen delen, tenzij u de configuratie parameter index gebruikt.

Bij een upgrade naar een volgende hoofdversie van ElasticSearch (het eerste nummer wordt dan gewijzigd), bevelen wij aan om de notities bij de release te lezen en de documentatie over het upgraden.

Installatie
Na het zorgen dat aan de vereisten is voldaan, is het nodig om de configuratie van de installatie aan te passen en daarna de bootstrap uit te voeren.

Configuratie
Alle hulpmiddelen voor vertalen inclusief vertaalgeheugen worden ingesteld met de instelling.

Het primaire vertaalgeheugen backend moet de key  gebruiken. De primaire backend ontvangt bijgewerkte vertalingen en wordt gebruikt door Special:SearchTranslations.

Voorbeeld van configuratie TTMServers:

Mogelijke sleutels en waarden zijn:

Op dit moment wordt alleen MySQL als database backend ondersteund.

Bootstrap
Na het kiezen van ElasticSearch en het instellen van de vereisten en de configuratie, voer  uit om het vertaalgeheugen te 'bootstrappen'. Dit bootstrappen is ook nodig wanneer het vertaalgeheugen wordt gewijzigd. Als u het vertaalgeheugen met meerdere wiki's deelt, dan is de bootstrap voor elk van deze wiki's nodig.

Websites met veel vertalingen moeten overwegen meerder threads hier voor te gebruiken met de  parameter om het proces te versnellen. De benodigde tijd hangt af van van hoe compleet de vertaling is (niet complete berichtengroepen worden bij de bootstrap bepaald). Nieuwe vertalingen worden automatisch met behulp van een hook toegevoegd. Nieuwe berichtdefinities worden toegevoegd nadat de eerste vertaling is aangemaakt.

Bij een bootstrap worden de volgende zaken gedaan, deze zouden anders niet gebeuren:
 * toevoegen en bijwerken van het vertaalgeheugenschema;
 * vullen van vertaalgeheugen met bestaande vertalingen;
 * opschonen van ongebruikte vertalingen door het legen en weer vullen van het vertaalgeheugen.

Bij het bijwerken van een vertaling wordt de vorige vertaling uit het vertaalgeheugen gewist. Als de vertaling bij een nieuwe definitie wordt bijgewerkt dan wordt de nieuwe vertaling toegevoegd in het vertaalgeheugen en blijft de oude bestaan tot de 'purge'. Als de definitie van het bericht zelf wordt gewijzigd of wordt verwijderd uit alle berichtengroepen, dan gebeurt er voorlopig niets. Het opslaan van een vertaling als 'fuzzy' voegt geen vertaling toe en verwijdert er ook geen in het vertaalgeheugen.



TTMServer API
Nu volgen de specificaties voor het geval u zelf een eigen TTMServer service wilt implementeren.

Query parameters:

Uw service dient de volgende parameters te accepteren:

Uw service moet een JSON object meegeven dat de sleutel  bevat met een array objecten. Deze objecten bevatten de volgende gegevens:

Voorbeeld:


 * URL: http://translatewiki.net/w/api.php?action=ttmserver&sourcelanguage=en&targetlanguage=fi&text=january&format=jsonfm
 * Antwoord:



Database backend
De backend bevat drie tabellen:,   en. Deze staan voor de bronnen, doelen en de 'fulltext'. De tabel definities staan in in. De bronnen bevatten alle berichtdefinities. Ook al zijn ze altijd in dezelfde taal, meestal Engels, toch wordt de taal van de tekst toch opgeslagen, meestal is niet altijd.

Each entry has a unique id and two extra fields, length and context. Length is used as the first pass filter, so that when querying we don't need to compare the text we're searching with every entry in the database. The context stores the title of the page where the text comes from, for example "MediaWiki:Jan/en". From this information we can link the suggestions back to "MediaWiki:Jan/de", which makes it possible for translators to quickly fix things, or just to determine where that kind of translation was used.

The second pass of filtering comes from the fulltext search. The definitions are mingled with an ad hoc algorithm. First the text is segmented into segments (words) with MediaWiki's. If there are enough segments, we strip basically everything that is not word letters and normalize the case. Then we take the first ten unique words, which are at least 5 bytes long (5 letters in English, but even shorter words for languages with multibyte code points). Those words are then stored in the fulltext index for further filtering for longer strings.

When we have filtered the list of candidates, we fetch the matching targets from the targets table. Then we apply the levenshtein edit distance algorithm to do the final filtering and ranking. Let's define:


 * E : edit distance
 * S : the text we are searching suggestions for
 * Tc : the suggestion text
 * To : the original text which the Tc is translation of

The quality of suggestion Tc is calculated as E/min(length(Tc),length(To)). Depending on the length of the strings, we use: either PHP's native levenshtein function; or, if either of the strings is longer than 255 bytes, the PHP implementation of levenshtein algorithm.  It has not been tested whether the native implementation of levenshtein handles multibyte characters correctly. This might be another weak point when source language is not English (the others being the fulltext search and segmentation).