•  원더라이트

MTR: 여러 번역

내부용 번역 서비스 래핑

웹사이트를 게시할 때 다른 번역을 제공할 수 있습니다. 어떤 사람들은 자동 번역기를 좋아하지 않습니다. 저는 자동 번역이 충분하고 없는 것보다 낫다고 생각합니다. NLP 그리고 ML.

일반적인 번역 서비스는 google, bing, yandex입니다. 이것들은 우리 자신의 개인적인 사용을 위해 포장하려는 프리 티어를 제공합니다. 덜 알려진 다른 것도 있습니다 번역 서비스 , 그리고 그들 중 일부는 글을 쓰는 시점에서 종료되었습니다 ...

캐싱 텍스트

번역을 캐시하려면 요청된 텍스트를 향후 요청에 대한 조회수를 제공할 수 있을 만큼 충분히 작은 문자열로 분할해야 했습니다. NS 거래 작은 문장의 번역은 문맥이 적어 번역 품질이 떨어집니다.

번역된 텍스트에서 원본을 재구성할 수 있도록 수신 텍스트를 분할하는 방법은 꽤 트릭입니다.또는 해킹입니다. 우리는 번역 서비스가 떠날 정도로 이상한 문자열을 찾고 싶습니다. 그대로 그것의 출력에서. 의 변형을 찾았습니다. 단락 문자 대부분의 시간을 일하기 위해

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

NSglue 문자열은 연결하는 데 사용됩니다. 모두 문자열(원래 요청에서 분할)으로 하나 우리가 보내는 업스트림 번역 요청에 대한 단일 본문입니다. Google. NSsplitGlue 대신 수신된 번역을 캐시할 문자열로 다시 분할하는 데 사용됩니다. 여기에서 문자열 분할이 캐싱에 유용할 뿐만 아니라 요청 수 줄이기, 다운스트림 요청이 많은 작은 쿼리를 수행하는 경우 기계를 사용하여 업스트림 서비스에서 허용하는 최대 페이로드 크기까지 요청을 병합하기 때문입니다.

인터페이스

여러 서비스를 지원하기 위해 투명하게 이 API에 정착한 인터페이스를 작성했습니다.

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

따라서 서비스가 작동하려면 번역 기능, 요청 번역 방법, 지원 언어 목록을 제공해야 합니다. 지원되는 언어 목록을 사용하여 구문 분석을 위해 특정 언어 쌍을 지원하는 서비스가 얼마나 많은지 알 수 있는 매트릭스를 만들 수 있습니다. 언어 쌍 서비스에서 반환된 표현을 공통 표현으로 변환합니다.iso639-1.

번역 인스턴스를 생성하면 다음에서 사용하는 요청 옵션을 구성할 수도 있습니다.Guzzle 예를 들어 요청을 수행하기 위해 프록시를 사용할 수 있습니다. 서비스는 캐시 처음 생성된 후에는 일부 서비스가 일부 초기 토큰을 생성해야 하고 매번 이를 다시 생성하고 싶지 않기 때문에 유용합니다.

더 고 버전

나도 썼다 golang 버전. PHP 버전은 PHP 프로젝트에서 가져와서 사용하는 반면 go 버전은 독립형(마이크로) 서비스로 작동합니다. go 버전은 엄격한 유형 검사가 필요하고 한 번에 여러 문자열 쿼리를 지원하기 때문에 훨씬 더 장황합니다. 다른 입력 조합으로 작동하는 api를 노출해야 하고 go 제네릭이 없으면 구현이 매우 고통스럽습니다. 동시 처리가 가능하며 일반적으로 훨씬 빠릅니다.

청소 입력

번역과 함께 서비스도 구축했습니다. HTML을 정리 . 일부 html 태그를 화이트리스트에 추가하고 나머지는 버립니다. 또한 스팸과 유사한 중복 구두점 및 알 수 없는 html 속성을 제거하고 링크를 적절한 앵커 태그로 래핑합니다.

자체 호스팅:

결론

요즘에는 joshua 또는 argos에서 제공하는 자체 호스팅 솔루션을 사용할 것이라고 생각합니다. 최고의 번역을 목표로 하지 않기 때문에 마찰 없이 탐색할 수 있도록 웹 사이트에 읽기 쉬운 번역을 제공하고 싶습니다.

게시물 태그: