•  notreh-light

MTR: แปลหลายรายการ

ห่อบริการแปลสำหรับใช้ภายใน

เมื่อเผยแพร่เว็บไซต์ คุณอาจต้องการเสนอการแปลแบบต่างๆ บางคนไม่ชอบนักแปลอัตโนมัติ ฉันคิดว่าการแปลอัตโนมัตินั้นดีพอ และดีกว่าไม่มีอะไรเลย และนักแปลอัตโนมัติก็ดีขึ้นเรื่อยๆ ด้วยความก้าวหน้าใน NLP และ ML.

บริการแปลภาษาทั่วไปคือ google, bing, yandex ข้อเสนอเหล่านี้มีระดับฟรีที่เราต้องการห่อเพื่อการใช้งานส่วนตัวของเรา ยังมีอีกมากที่รู้จักกันน้อย บริการแปลภาษา และบางส่วนจะปิดในขณะที่เขียน...

แคชข้อความ

หากเราต้องการแคชการแปล เราจำเป็นต้องแบ่งข้อความที่ร้องขอเป็นสตริงที่เล็กลง เพื่อให้มีขนาดเล็กพอที่จะให้ Hit สำหรับคำขอที่เป็นไปได้ในอนาคต NS การแลกเปลี่ยน คือการแปลประโยคที่เล็กกว่ามีบริบทน้อยกว่า ซึ่งทำให้คุณภาพของการแปลลดลง

เราจะแยกข้อความที่เข้ามาได้อย่างไรเพื่อให้เราสามารถสร้างต้นฉบับขึ้นมาใหม่จากข้อความที่แปลได้ค่อนข้างเป็นกลลวง..หรือแฮ็ค เราต้องการหาสตริงที่แปลกพอที่บริการแปลภาษาทิ้งไว้ อย่างที่มันเป็น ในการส่งออก ฉันได้พบรูปแบบของ อักขระย่อหน้า ทำงานเป็นส่วนใหญ่

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

NSglue string ใช้ในการเชื่อม ทั้งหมด สตริง (แยกจากคำขอเดิม) เป็น หนึ่ง เนื้อหาเดียวสำหรับคำขอแปลต้นน้ำที่เราส่งไปเช่น 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 อินสแตนซ์ไคลเอ็นต์ที่เราสามารถทำได้เช่นใช้พร็อกซีเพื่อดำเนินการตามคำขอ บริการคือ แคช หลังจากสร้างขึ้นในครั้งแรก สิ่งนี้มีประโยชน์เนื่องจากบริการบางอย่างจำเป็นต้องสร้างโทเค็นเริ่มต้น และเราไม่ต้องการสร้างใหม่ทุกครั้ง

เวอร์ชัน Go

ฉันยังเขียน รุ่นใน golang. เวอร์ชัน PHP จะถูกใช้โดยการนำเข้าในโปรเจ็กต์ PHP ของคุณ ในขณะที่เวอร์ชัน go ทำงานเป็นบริการแบบสแตนด์อโลน (ไมโคร) เวอร์ชัน go นั้นละเอียดกว่ามาก เนื่องจากต้องมีการตรวจสอบประเภทที่เข้มงวด และเนื่องจากเรารองรับการสืบค้นหลายสตริงพร้อมกัน เราจึงต้องเปิดเผย api ที่ทำงานร่วมกับอินพุตต่างๆ รวมกัน และการขาด go generics ทำให้การใช้งานนั้นเจ็บปวดมาก แต่ก็มีให้ การประมวลผลพร้อมกัน และโดยทั่วไปเร็วกว่ามาก

อินพุตการทำความสะอาด

ควบคู่ไปกับการแปล ฉันยังสร้างบริการให้ ทำความสะอาด html . เราอนุญาตแท็ก html บางรายการและยกเลิกส่วนที่เหลือ นอกจากนี้เรายังลบเครื่องหมายวรรคตอนที่ซ้ำกันที่เหมือนสแปมและแอตทริบิวต์ html ที่ไม่รู้จัก และรวมลิงก์ไว้ในแท็ก anchor ที่เหมาะสม

โฮสต์เอง:

บทสรุป

ทุกวันนี้ฉันคิดว่าฉันจะใช้โซลูชันที่โฮสต์ด้วยตนเองซึ่งให้บริการโดย joshua หรือ argos เนื่องจากฉันไม่ได้มุ่งหมายสำหรับการแปลที่ดีที่สุด ฉันต้องการเสนอการแปลที่อ่านได้สำหรับเว็บไซต์ เพื่อให้สามารถสำรวจได้โดยไม่มีการเสียดสี

โพสต์แท็ก: