วิธีแปลภาษาด้วย TranslateAPI ให้ใช้ภาษาสุภาพ และเซ็นเซอร์คำหยาบ: Serverless Web App บน AWS : Part 5
บทความนี้ดัดแปลงเนื้อหาบางส่วนมาจาก 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 ที่ผมสร้างขึ้นมา
ซึ่งผมทำการแยกย่อยๆออกมาโดยเนื้อหาในบทความพวกนี้สามารถจบได้ในตัวของมันเอง
สำหรับหัวข้ออื่นๆ ของบทความนี้ สามารถตรวจสอบได้ที่ช่วงท้ายของบทความครับ
สำหรับบทความนี้เราจะมาทำกันในส่วนนี้ครับ
จะเป็นเกี่ยวกับการเพิ่มหัวข้อต่างลงไปให้เราสามารถปรับแต่งการแปลภาษาของเราได้
บทความนี้เราจะมาทำกันใน 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"
แล้วกด Save
ทำการกด Test ดู โดยมี "input_text": "Banana is green"
จะเห็นว่าได้คำแปลแล้ว
ทิ้งท้าย
ในบทความนี้ เราได้ทำการเพิ่มรูปแบบในการแปลไปแล้ว ซึ่งรูปแบบที่เราเพิ่มเข้ามานี้จะถูกนำไปใช้ในหน้าเว็บในหัวข้อต่อไป ทำให้เราสามารถปรับแต่งอะไรหลายอย่างได้ครับ
บทความ Part อื่นๆ
- ใช้ AWS Lambda เรียกใช้งาน Amazon Translate แปลภาษา : Part 1 | DevelopersIO
- ใช้ API Gateway เชื่อมต่อไปยัง Lambda เรียก API แปลภาษา : Part 2 | DevelopersIO
- ใช้ DynamoDB บันทึกข้อมูลจาก Lambda : Part 3 | DevelopersIO
- แก้ ensure_ascii=False เพื่อให้แปลภาษาอังกฤษ > ไทย แล้วตัวอักษรไม่เพี้ยน : Part 4 | DevelopersIO
- เพิ่มตัวแปรให้เพิ่มรูปแบบการแปลได้หลากหลายมากขึ้น : Part 5 | DevelopersIO
- ดาวน์โหลดโค้ด Front-end และ ตั้งค่า CORS : Part 6 | DevelopersIO
- เพิ่มฟังก์ชัน History ให้สามารถเรียกดูปะวัติการแปลได้ : Part 7 | DevelopersIO
- อัพโหลดเว็บไซต์ขึ้นบน S3 (Hosting Server) : Part 8 | DevelopersIO