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.

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 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.

Elke record heeft een uniek id en twee extra velden, 'length' en 'context'. De eerste wordt gebruikt als eerste uitvoerfilter, zodat er bij het zoeken er niet meer met de tekst die we zoeken hoeft te worden vergeleken. De context bevat de titel van de pagina waar de tekst op staat, bijvoorbeeld "MediaWiki:Jan/en". Met deze informatie kunnen we de suggesties koppelen aan "MediaWiki:Jan/nl", hierdoor kunnen vertalers snel dingen aanpassen of bepalen welk soort vertaling is gebruikt.

Het tweede filter is het 'fulltext' zoeken. De definities zijn gemengd met een ad hoc algoritme. Eerst wordt de tekst opgedeeld in segmenten (woorden) met MediaWiki's. Als er genoeg segmenten zijn dan wordt alles verwijderd dat geen letters zijn en wordt de tekst in hoofdletters genormaliseerd. Daarna worden de eerste tien unieke worden gepakt van minstens 5 bytes lang (in het Engels is dat 5 letters, in talen met multibytes kan dat nog korter zijn). Deze woorden worden gebruikt als 'fulltext index' voor het filteren op langere teksten.

Na het filteren van de kandidaten, worden de overeenkomende doelen opgehaald uit die tabel. Daarna wordt het Levenshteinafstand algoritme gebruikt om de laatste filtering en sortering te doen. Definiëren:


 * E : bewerkingsafstand
 * S : de tekst waar we suggesties voor zoeken
 * Tc : de suggestie
 * To : de originele tekst waarvan Tc dus een vertaling is

De kwaliteit van de suggestie Tc wordt bepaald met E/min(lengte(Tc),lengte(To)). Afhankelijk van de lengte van de teksten kunnen we of de interne PHP levenshtein functie gebruiken of als beide strings langer zijn dan 255 bytes, de PHP implementatie van het  levenshtein algoritme. Er is niet getest of de interne implementatie van levenshtein multibyte tekens goed afgehandeld. Dit kan een zwak punt zijn als de brontaal niet Engels is (de andere zijn het fulltext zoeken en de segmentatie).