วิธีแปลภาษาด้วย TranslateAPI ให้ใช้ภาษาสุภาพ และเซ็นเซอร์คำหยาบ: Serverless Web App บน AWS : Part 5

วิธีแปลภาษาด้วย TranslateAPI ให้ใช้ภาษาสุภาพ และเซ็นเซอร์คำหยาบ: Serverless Web App บน AWS : Part 5

ปรับแต่งการแปลภาษาของเราได้ที่บทความนี้
Clock Icon2024.11.11

บทความนี้ดัดแปลงเนื้อหาบางส่วนมาจาก Hands-on Training ของ Website AWS Official ของญี่ปุ่น สามารถอ่านเนื้อหาต้นฉบับได้ที่ AWS Hands-on for Beginners Serverless #1 サーバーレスアーキテクチャで翻訳 Web API を構築する | AWS Webinar

บทความนี้เป็นส่วนนึงของเนื้อหาในบทเรียนเกี่ยวกับ AWS API Gateway ที่ผมสร้างขึ้นมา คุณผู้อ่านสามารถตรวจสอบเนื้อหาทั้งหมดได้โดยการคลิกที่ชื่อของผม

เป้าหมายใหญ่สุดของบทเรียนนี้คือ การทำ Web app แปลภาษาที่เป็น serverless ครับ

สวัสดีครับ ต้า ครับ

บทความนี้เป็นส่วนนึงของเนื้อหาในบทเรียนเกี่ยวกับ AWS API Gateway ที่ผมสร้างขึ้นมา
ซึ่งผมทำการแยกย่อยๆออกมาโดยเนื้อหาในบทความพวกนี้สามารถจบได้ในตัวของมันเอง

สำหรับหัวข้ออื่นๆ ของบทความนี้ สามารถตรวจสอบได้ที่ช่วงท้ายของบทความครับ

สำหรับบทความนี้เราจะมาทำกันในส่วนนี้ครับ

Hands-On-for-Beginners_2022_Serverless1_0819_v1_Part4

จะเป็นเกี่ยวกับการเพิ่มหัวข้อต่างลงไปให้เราสามารถปรับแต่งการแปลภาษาของเราได้

บทความนี้เราจะมาทำกันใน Singapore Region กันครับ

เริ่มลงมือทำ

แก้ไขโค้ดใน Lambda

นอกจากการเลือกภาษาที่จะใช้แปลแล้ว AWS Translate ยังจะสามารถปรับแต่งการตั้งค่าเพิ่มเติมได้อีก
จากที่เราดูใน boto จะเห็นได้ดังนี้

Request Syntax

response = client.translate_text(
    Text='string',
    TerminologyNames=[
        'string',
    ],
    SourceLanguageCode='string',
    TargetLanguageCode='string',
    Settings={
        'Formality': 'FORMAL'|'INFORMAL',
        'Profanity': 'MASK',
        'Brevity': 'ON'
    }
)

จะเห็นได้เรา เราสามารถเลือกรูปแบบการแปลให้สุภาพ ไม่สุภาพ 'FORMAL'|'INFORMAL'
เซ็นเซอร์คำหยาบ 'Profanity': 'MASK'
สรุปคำแปล 'Brevity': 'ON'

โดยฟังก์ชันสรุปคำแปล จากที่ผมอ่าน AWS Document มามันไม่รองรับภาษาไทย ในบทความนี้เราจะไม่ใช้หัวข้อนี้กันครับ ส่วนที่เหลือเราจะเอาเข้ามาใช้กันครับ

โดยทำการเปลี่ยนโค้ดเป็นดังต่อไปนี้ครับ

import json
import boto3
import datetime 

translate = boto3.client(service_name='translate') 

dynamodb_translate_log_tbl = boto3.resource('dynamodb').Table('translate-log')

def lambda_handler(event, context):

    # รับข้อมูลจาก Event JSON โดยมี ภาษานำเข้า ภาษาที่ต้องการแปล เปิดปิดคำหยาบ สุภาพหรือไม่
    input_text = event['queryStringParameters']['input_text'] 
    formality = event['queryStringParameters']['formality']
    profanity = event['queryStringParameters']['profanity']
    source = event['queryStringParameters']['source']
    target = event['queryStringParameters']['target']

    # การใช้ Boolean มีปัญหานิดหน่อย จึงใช้เป็น String Check แทน
    # โดยถ้าเป็น true จะทำการเซ็นเซอร์คำหยาบให้
    if profanity == 'true':
        response = translate.translate_text(
            Text=input_text,
            SourceLanguageCode=source,
            TargetLanguageCode=target,
            Settings={
                'Formality': formality,
                'Profanity': 'MASK'
            }
        )
    else:
        response = translate.translate_text(
            Text=input_text,
            SourceLanguageCode=source, 
            TargetLanguageCode=target, 
            Settings={
                'Formality': formality
            }
        )

    output_text = response.get('TranslatedText')

    dynamodb_translate_log_tbl.put_item(
        Item = {
            'timestamp': datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),
            'input_text': input_text,
            'output_text': output_text
        }
    )

    return {
        'statusCode': 200,
        'body': json.dumps({
            'output_text': output_text
        }, ensure_ascii=False),
        'isBase64Encoded': False,
        'headers': {}
    }

แล้วให้กดไปที่ Test
◉Create new event
Event name: test-proxy-full-input
Template : ให้เราเลือก API Gateway AWS Proxy
ในส่วน Event JSON ในด้านล่างให้เราเปลี่ยนข้อความด้านล่างเป็น
"foo": "bar" >
"input_text": "{ข้อความที่เราอยากแปล}",
"formality": "INFORMAL",
"profanity": "true",
"source": "th",
"target": "en"

translate11

แล้วกด Save

ทำการกด Test ดู โดยมี "input_text": "Banana is green" จะเห็นว่าได้คำแปลแล้ว

translate12

ทิ้งท้าย

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

บทความ Part อื่นๆ

บทความอ้างอิง

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.