•  ánh sáng không có thực

MTR: nhiều bản dịch

gói dịch vụ dịch để sử dụng nội bộ

Khi xuất bản một trang web, bạn có thể muốn cung cấp các bản dịch khác nhau. Một số người không thích người dịch tự động, tôi nghĩ rằng bản dịch tự động là đủ tốt và tốt hơn là không có gì, và người dịch tự động đã ngày càng trở nên tốt hơn với những tiến bộ trong NLP ML.

Các dịch vụ dịch thuật phổ biến là google, bing, yandex. Những thứ này cung cấp một cấp miễn phí mà chúng tôi muốn gói lại cho mục đích sử dụng cá nhân của riêng chúng tôi. Ngoài ra còn có những thứ khác ít được biết đến hơn dịch vụ dịch thuật và một số trong số chúng đã ngừng hoạt động tại thời điểm viết bài này ...

Văn bản vào bộ nhớ đệm

Nếu chúng tôi muốn lưu các bản dịch vào bộ nhớ cache, chúng tôi cần phải chia văn bản được yêu cầu thành các chuỗi nhỏ hơn sao cho chúng đủ nhỏ để cung cấp các lần truy cập cho các yêu cầu có thể có trong tương lai. Các đánh đổi là bản dịch các câu nhỏ hơn có ít ngữ cảnh hơn, điều này làm giảm chất lượng của bản dịch.

Làm thế nào để chúng tôi tách văn bản đến để chúng tôi có thể tạo lại bản gốc từ văn bản đã dịch là một thủ thuật khá khó khăn..hoặc hack. Chúng tôi muốn tìm một chuỗi đủ kỳ lạ để dịch vụ dịch thuật loại bỏ nó như nó là trong đầu ra của nó. Tôi đã tìm thấy các biến thể của ký tự đoạn văn để làm việc hầu hết các thời gian

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

Cácglue chuỗi được sử dụng để nối tất cả các các chuỗi (tách từ yêu cầu ban đầu) thành một đơn lẻ cho yêu cầu dịch ngược dòng mà chúng tôi đang gửi tới, ví dụ: Google. CácsplitGlue thay vào đó được sử dụng để chia lại bản dịch đã nhận thành các chuỗi mà chúng ta sẽ lưu vào bộ nhớ cache. Ở đây, chúng tôi thấy rằng việc chia nhỏ chuỗi không chỉ hữu ích cho bộ nhớ đệm mà còn để giảm số lượng yêu cầu, bởi vì trong trường hợp yêu cầu phía dưới của chúng tôi thực hiện nhiều truy vấn nhỏ, chúng tôi sử dụng máy móc của mình để hợp nhất các yêu cầu với kích thước trọng tải tối đa mà dịch vụ phía trên cho phép.

Giao diện

Để hỗ trợ nhiều dịch vụ minh bạch Tôi đã viết một giao diện giải quyết trên api này

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

Vì vậy, một dịch vụ để hoạt động phải cung cấp chức năng dịch, cách dịch các yêu cầu và cung cấp danh sách các ngôn ngữ được hỗ trợ. Với danh sách các ngôn ngữ được hỗ trợ, chúng tôi có thể tạo một ma trận để chúng tôi biết có bao nhiêu dịch vụ hỗ trợ một cặp ngôn ngữ cụ thể, để phân tích cú pháp cặp ngôn ngữ chúng tôi chuyển đổi đại diện do dịch vụ trả về thành mộtiso639-1.

Việc tạo phiên bản dịch cũng cho phép định cấu hình các tùy chọn yêu cầu được sử dụng bởiGuzzle ví dụ khách hàng để chúng tôi có thể sử dụng proxy để thực hiện các yêu cầu. Các dịch vụ là được lưu vào bộ nhớ đệm sau khi được tạo lần đầu tiên, điều này rất hữu ích vì một số dịch vụ yêu cầu tạo một số mã thông báo ban đầu và chúng tôi không muốn tạo lại chúng mọi lúc.

Phiên bản cờ vây

Tôi cũng đã viết một phiên bản ở golang. Phiên bản PHP sẽ được sử dụng bằng cách nhập nó vào dự án PHP của bạn, trong khi phiên bản go hoạt động như một dịch vụ độc lập (vi mô). Phiên bản go dài dòng hơn nhiều vì nó yêu cầu kiểm tra kiểu nghiêm ngặt và vì chúng tôi hỗ trợ truy vấn nhiều chuỗi cùng một lúc, chúng tôi phải hiển thị api hoạt động với các kết hợp đầu vào khác nhau và việc thiếu go generic khiến việc triển khai rất khó khăn, nhưng nó cung cấp xử lý đồng thời và nói chung nhanh hơn nhiều.

Làm sạch đầu vào

Cùng với bản dịch, tôi cũng đã xây dựng một dịch vụ để dọn dẹp html . Chúng tôi đưa một số thẻ html vào danh sách trắng và loại bỏ phần còn lại. Chúng tôi cũng xóa các dấu câu trùng lặp giống như spam và các thuộc tính html không xác định, đồng thời bọc các liên kết vào các thẻ liên kết thích hợp.

Tự lưu trữ:

Kết luận

Ngày nay, tôi nghĩ rằng tôi sẽ chỉ sử dụng một giải pháp tự lưu trữ, được cung cấp bởi joshua hoặc argos, vì tôi không nhắm đến bản dịch tốt nhất, tôi muốn cung cấp một bản dịch có thể đọc được cho một trang web, sao cho nó có thể được điều hướng mà không gặp khó khăn.

Thẻ bài: