Skip to content

เขียนโปรแกรมแปลภาษา dictionary บน Python 3

สวัสดีครับทุกท่าน บทความนี้จะพาทุกท่านไปเขียนโปรแกรมแปลภาษา dictionary บน Python เวชั่น 3 กันครับ หลาย ๆ ท่านคงเคยใช้งาน longdo เว็บ dictionary ไทยกันมาบ้างแล้ว ผมเลยเกิดความคิดที่จะเขียนโปรแกรมแปลภาษา dictionary แบบไม่ต้องต่ออินเทอร์เน็ตบ้างครับ


เว็บ longdo ได้ใช้ฐานข้อมูลคำศัพท์ของ LEXiTRON เป็น Xml ผมแปลงมาเป็น Sql ไม่ถูก ผมเลยได้ไปค้นมาจากอินเทอร์เน็ตมา
พบผู้ใจดีได้ทำการแปลง LEXiTRON เป็น Sqlite3 ท่าน Ake Exorcist จาก akexorcist.com ครับ จากบทความนี้ [Android Code] แจก SQLite สำหรับ Dictionary ของ Lexitron 
จะมี 8 คอลัมน์ด้วยกันดังนี้ _id, esearch, eentry, tentry, ecat, ethai, esyn และ eant ในตารางข้อมูล eng2thai
ขอขอบคุณ คุณ Ake Exorcist มา ณ ที่นี้ครับ
ผมได้โหลดไฟล์ฐานข้อมูลที่แปลงเป็น Sqlite3 จาก lexitron [Google Drive] แล้วผมได้บันทึกเป็นชื่อ lexitron.db (ไฟล์ฐานข้อมูลของ Sqlite3 ต้องเป็น .db นะครับ)
บทความนี้จะแปลจากภาษาอังกฤษเป็นภาษาไทยครับ ส่วนไทยเป็นอังกฤษลองไปพัฒนาต่อครับ
เสร็จแล้วเรามาลองมือเขียนกัน!!!

import sqlite3
conn = sqlite3.connect('lexitron.db')
word = input("คำค้นหา:")
c = conn.cursor()
a = c.execute("SELECT * FROM eng2thai WHERE esearch='%s'" % (word,))
for row in a:
   print ("คำค้นหา = ", row[1])
   print ("eentry = ", row[2])
   print ("คำแปล = ", row[3])
   print ("ลักษณะคำ = ", row[4])
   print ("ความหมายเหมือน = ", row[5])
   print ("esyn  = ", row[6])
   print ("eant = ", row[7],"n")

ตัวอย่างข้างบนผมได้เขียนแบบไม่ได้ใช้ GUI ครับ

ต่อมาผมได้เขียนแบบแสดงผลลัพธ์ที่ GUI ด้วย tkinter แต่ยังกรอกข้อมูลใน IDE อยู่ครับ

import sys
import sqlite3
from tkinter import *
conn = sqlite3.connect('lexitron.db')
mGui = Tk()

mGui.geometry('450x450+200+200')
mGui.title('โปรแกรมแปลภาษา Mark 1') #ชื่อหัวโปรแกรม
Label(text='โปรแกรมแปลภาษา',fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
Label(text='จัดทำโดย วรรณพงษ์ ภัททิยไพบูลย์',fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()

word = input("คำค้นหา:")
c = conn.cursor()

a = c.execute("SELECT * FROM eng2thai WHERE esearch='%s'" % word)

for row in a:
      t1 = (row[1])
      t2 = (row[2])
      t3 = (row[3])
      t4 =  ("ลักษณะคำ = ", row[4])
      t5 = ("ความหมายเหมือน = ", row[5])
      t6 = ("esyn  = ", row[6])
      t7 = ("eant = ", row[7],"n")
      Label(text="คำค้นหา: %s" % (t1,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      a2 = Label(text="%s" % (t2,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      a3 = Label(text="คำแปล: %s" % (t3,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      a4 = Label(text="=========================",fg = "light green",font = "Helvetica 16 bold italic").pack()

ผลลัพธ์

นอกจากนั้นไม่พอ ต่อมาผมลองศึกษารายละเอียด tkinter เพื่อเขียนแบบรับค่าข้อมูลและแสดงผลลัพธ์ที่ GUI เลยครับ ผมลองเขียนดู ผมพบปัญหาตรงที่ tkinter เข้าใจยากมากครับ

import sys
import sqlite3
from tkinter import *

conn = sqlite3.connect('lexitron.db')
mGui = Tk()
aaa = ""

mGui.geometry('450x450+200+200')
mGui.title('Mark 1') #ชื่อหัวโปรแกรม

def aa():
   aaa = ment.get()
   return aaa

ment = StringVar()
bb = Button(mGui,text='OK',command = aa,fg='red',bg='blue').pack()
Entry(mGui,textvariable=ment).pack()
c = conn.cursor()
a = c.execute("SELECT * FROM eng2thai WHERE esearch='%s'" % (aaa,))

for row in aaa:
      t1 = (row[1])
      t2 = (row[2])
      t3 = (row[3])
      t4 =  ("1 = ", row[4])
      t5 = ("2 = ", row[5])
      t6 = ("3  = ", row[6])
      t7 = ("4 = ", row[7],"n")
      Label(text="1: %s" % (t1,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      Label(text="%s" % (t2,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      Label(text="3: %s" % (t3,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      Label(text="=========================",fg = "light green",font = "Helvetica 16 bold italic").pack()

หลังจากที่เขียน From รับค่าที่เป็น Entry แล้วทำปุ่ม  Button ต้องมีการอ้างอิงคาลาสแบบ OOP ข้างบนอีกด้วย เท่ากับว่า ผมไม่สามารถเขียนโค้ดโดยหลังจากกรอกข้อมูลกดปุ่ม ค้นหา ผมไม่สามารถใช้โค้ดเดิมต่อไปได้ ผมคิดไม่ออก ผมเลยได้สอบถามพี่ใบบอนครับ ระหว่างหาทางแก้ผมได้ไปเจอ http://stackoverflow.com/questions/11963224/python-sqlite3-tkinter-display-multible-rows ผมเลยได้ลองแก้ไขโค้ดดู พบว่าสามารถทำงานได้ตามที่ต้องการครับ

import sys
import sqlite3
from tkinter import *
conn = sqlite3.connect('lexitron.db')
mGui = Tk()
aaa = ""
ment = StringVar()
def aa():
    aaa = ment.get()
    c = conn.cursor()
    search = c.execute("SELECT * FROM eng2thai WHERE esearch='%s'" % (ment.get(),))
    for row in search:
      t1 = (row[1])
      t2 = (row[2])
      t3 = (row[3])
      t4 =  ("ลักษณะคำ = ", row[4])
      t5 = ("ความหมายเหมือน = ", row[5])
      t6 = ("esyn  = ", row[6])
      t7 = ("eant = ", row[7],"n")
      Label(text="คำค้นหา: %s" % (t1,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      a2 = Label(text="%s" % (t2,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      a3 = Label(text="คำแปล: %s" % (t3,),fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
      a4 = Label(text="=========================",fg = "light green",font = "Helvetica 16 bold italic").pack()



mGui.geometry('450x450+200+200')
mGui.title('โปรแกรมแปลภาษา Mark 1') #ชื่อหัวโปรแกรม
Label(text='โปรแกรมแปลภาษา',fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()
Label(text='จัดทำโดย วรรณพงษ์ ภัททิยไพบูลย์',fg = "light green",bg = "dark green",font = "Helvetica 16 bold italic").pack()



Entry(mGui,textvariable=ment).pack()
bb = Button(mGui,text='ค้นหา',command = aa,fg='light green',bg='dark green').pack()


mGui.mainloop()

ผลลัพธ์

 

แนวทางการนำไปพัฒนาต่อ

จากโปรแกรมที่ผมเขียนเป็นตัวอย่างไป ท่านสามารถนำไปพัฒนาต่อเป็นแปลงจากภาษาไทยเป็นภาษาอังกฤษ เป็นต้นครับ และอย่าลืมอ่านข้อตกลงการใช้งาน License ของ LEXiTRON ด้วยนะครับ http://lexitron.nectec.or.th/2009_1/index.php?q=common_manager/faqs

ไฟล์ตัวอย่าง https://db.tt/ZDITGceZ
ขอบคุณครับ

1 thought on “เขียนโปรแกรมแปลภาษา dictionary บน Python 3

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *