•  untoreh-ışık

MTR: çoklu çeviriler

dahili kullanım için sarma çeviri hizmetleri

Bir web sitesi yayınlarken farklı çeviriler sunmak isteyebilirsiniz. Bazı insanlar otomatik çevirmenlerden hoşlanmıyor, bence otomatik çeviri yeterince iyi ve hiç yoktan iyidir ve otomatik çevirmenler teknolojideki gelişmelerle giderek daha iyi hale geldi. NLP ve makine öğrenimi.

Yaygın çeviri hizmetleri google, bing, yandex'tir. Bunlar, kendi kişisel kullanımımız için sarmak istediğimiz ücretsiz bir katman sunar. Daha az bilinen başkaları da var çeviri hizmetleri ve bazıları yazı yazarken kapanıyor...

Metni önbelleğe alma

Çevirileri önbelleğe almak istiyorsak, istenen metni, gelecekteki olası istekler için isabet sağlayacak kadar küçük olacak şekilde daha küçük dizelere bölmemiz gerekiyordu. NS Pazarlıksız daha küçük cümlelerin çevirisinin daha az bağlama sahip olması, çevirinin kalitesini düşürüyor.

Gelen metni, çevrilmiş metinden orijinali yeniden oluşturabileceğimiz şekilde nasıl böleriz? Çeviri hizmetinin bırakacağı kadar tuhaf bir dize bulmak istiyoruz olduğu gibi çıktısında. varyasyonlarını buldum paragraf karakteri çoğu zaman çalışmak

$this->misc['glue'] = ' ; ¶ ; ';
$this->misc['splitGlue'] = '/\s?;\s?¶\s?;?\s?/';

NSglue dize birleştirmek için kullanılır herşey dizeler (orijinal istekten bölünmüş) bir gönderdiğimiz yukarı akış çeviri isteği için tek gövde, ör. Google. NSsplitGlue bunun yerine alınan çeviriyi önbelleğe alacağımız dizelere bölmek için kullanılır. Burada, dizelerin bölünmesinin yalnızca önbelleğe alma için değil, aynı zamanda istek sayısını azaltmak, çünkü aşağı yönlü talebimizin birçok küçük sorgu gerçekleştirmesi durumunda, yukarı yönlü hizmet tarafından izin verilen maksimum yük boyutuna kadar talepleri birleştirmek için makinelerimizi kullanırız.

Arayüz

Birden fazla hizmeti desteklemek için şeffaf bir şekilde Bu api'ye yerleşen bir arayüz yazdım

function__construct(
    Mtr &$mtr,
    Client &$gz,
    TextReq &$txtrq,
    LanguageCode &$ld);
functiontranslate($source, $target, $input);
functiongenReq(array$params);
functionpreReq(array &$input);
functiongetLangs();

Bu nedenle, hizmetin işlevsel olması için bir çeviri işlevi, isteklerin nasıl çevrileceği ve desteklenen dillerin listesini sağlaması gerekir. Desteklenen dillerin listesiyle, belirli bir dil çiftini kaç hizmetin desteklediğini bildiğimiz şekilde bir matris oluşturabiliriz. dil çiftleri hizmet tarafından döndürülen temsili ortak bir gösterime dönüştürürüziso639-1.

Çeviri örneğinin oluşturulması aynı zamanda tarafından kullanılan istek seçeneklerinin yapılandırılmasına da izin verir.Guzzle örneğin, istekleri gerçekleştirmek için proxy'leri kullanabileceğimiz bir istemci örneği. Hizmetler önbelleğe alınmış İlk kez oluşturulduktan sonra, bazı hizmetlerin bazı başlangıç ​​belirteçleri oluşturması gerektiğinden ve bunları her seferinde yeniden oluşturmak istemediğimizden bu yararlıdır.

Git sürümü

ben de yazdım golang'daki sürüm. PHP sürümü, PHP projenize içe aktarılarak kullanılırken, go sürümü bağımsız (mikro) bir hizmet olarak çalışır. go sürümü, sıkı tip denetimi gerektirdiğinden çok daha ayrıntılıdır ve aynı anda birden çok dizenin sorgulanmasını desteklediğimiz için, farklı giriş kombinasyonlarıyla çalışan api'yi ortaya çıkarmamız gerekir ve go jeneriklerinin eksikliği uygulamayı çok acı verici hale getirir, ancak teklif edildi eşzamanlı işleme ve genel olarak çok daha hızlıydı.

Temizlik girişleri

Çeviri ile birleştiğinde ben de bir hizmet inşa ettim. html'yi temizle . Bazı html etiketlerini beyaz listeye alıyoruz ve gerisini atıyoruz. Ayrıca spam benzeri yinelenen noktalama işaretlerini ve bilinmeyen html özniteliklerini kaldırır ve bağlantıları uygun bağlantı etiketlerine sararız.

Kendi kendine barındırılan:

Sonuçlar

Bugünlerde, en iyi çeviriyi hedeflemediğim için, sadece kendi kendine barındırılan bir çözümü kullanmayı düşünüyorum, joshua veya argos tarafından sağlanıyor, bir web sitesi için sürtünme olmadan gezinilebilecek şekilde okunabilir bir çeviri sunmak istiyorum.

Etiketleri Gönder: