Skip to content

LTN/Plone

Sections
Personal tools
You are here: Home » Members » poonlap's Home » dictd » เจาะข้อมูล LEXiTRON

เจาะข้อมูล LEXiTRON

เกี่ยวกับฐานข้อมูลพจนานุกรม LEXiTRON

จุดประสงค์

  • แปลงข้อมูลของพจนานุกรม LEXiTRON ให้เป็นฐานข้อมูลพจนานุกรมของ dictd
  • เพื่อเป็นบันทึกและถ่ายทอดความรู้ต่อไป

เกี่ยวกับ LEXiTRON

พจนานุกรมอิเล็กทรอนิกส์ LEXiTRON เป็นพจนานุกรมที่สร้างและเผยแพร่โดย NECTEC. เนื้อหาของข้อมูลมีทั้่งการแปลจากอังกฤษ-ไทย และ ไทย-อังกฤษ. ตัวโปรแกรม LEXiTRON ที่ใช้บนลินุกซ์เขียนด้วย Java และมีไฟล์ข้อมูลแยกไว้ต่างหาก. ในบทความนี้จะเกี่ยวข้องกับข้อมูลโดยตรงไม่เกี่ยวข้องกับโปรแกรมแต่อย่างใด.

ข้อมูลของ LEXiTRON

จาก FTP ของ OpenTLE จะมีข้อมูลแยกให้ดาว์นโหลดต่างหากได้แก่ไฟล์ lexitron-data.zip. เอาไฟล์นี้มากระจายออกด้วย unzip.
$ unzip -t lexitron-data.zip
Archive:  lexitron-data.zip
    testing: etlex                    OK
    testing: telex                    OK
    testing: LICENSE-th.txt           OK
    testing: LICENSE.txt              OK
No errors detected in compressed data of lexitron-data.zip.
$ unzip lexitron-data.zip
หลังจากที่กระจายไฟล์ข้างในแล้วเราลองมาดูไฟล์ etlex กับ telex กัน.

ไฟล์ etlex เป็นไฟล์ข้อมูลศัพท์อังกฤษ-ไทย, ส่วนไฟล์ telex เป็นไฟล์ข้อมูลศัพท์ไทย-อังกฤษ. ดูเนื้อหาข้างในด้วย less ก็จะพบว่ามีลักษณะไฟล์แบบนี้

<Doc>
<esearch>a</esearch>
<eentry>a</eentry>
<tentry>หนึ่ง (คำนำหน้าคำนามเพื่อแสดงว่าคำนามนั้นๆ ไม่ชี้เฉพาะ)</tentry>
<ecat>DET</ecat>
<id>0</id>
</Doc>
...
ทำให้รู้ว่าไฟล์นี้น่าจะเป็น XML. Tag ที่ใช้ในไฟล์นี้พอสื่อความได้เช่น esearch เป็นคำที่กำหนดไว้เป็นต้น. เนื่องจากผมไม่มีข้อมูลไฟล์นี้มี Tag อะไรบ้าง, จึงมีความจำเป็นต้องลิสชื่อ Tag ทั้งหมดออกมาดู. ทำอย่างไร? ต้อง parse ไฟล์นี้ครับ.

เตรียม encoding แบบ UTF-8

หลังจากศึกษาเรื่องราวของ XML เล็กๆน้อยจาก Internet ก็ตกลงใจว่าจะใช้ perl เขียน parser ของไฟล์นี้.

ก่อนที่จะเขียน parser สิ่งที่ต้องทำก่อนคือแปลงไฟล์นี้ให้มี encoding เป็น UTF-8 ก่อนเพราะจะได้เป็นมาตรฐานใช้งานได้คล่อง.

$ iconv -f tis620 -t utf8 -o test etlex
iconv: illegal input sequence at position 1239420
ปัญหาที่พบคือไฟล์ etlex นี้ไม่ใช่ encoding แบบ TIS-620! ไปดูที่ที่เกิดข้อผิดพลาดก็จะเห็นว่ามีอักขระแปลกปลอมติดมาด้วย. หลังจากที่ลบอักขระแปลกปลอมเหล่านี้ออกไปแล้วสั่งคำสั่ง iconv ใหม่ก็ยังเหมือนเดิมอีกแต่เป็นที่ใหม่. สรุปว่ามีหลายที่มีอักขระแปลกปลอมอยู่. แก้ด้วยมือไม่ไหวเลยมีความจำเป็นต้องเขียนสคริปต์ช่วย.
$ ./fixchars.pl etlex > etlex.tis-620
$ iconv -f tis620 -t utf8 -o etlex.utf-8 etlex.tis-620
แล้วก็จะได้ข้อมูลดิบแบบ UTF-8.

ดู Tag ทั้งหมด

ก่อนอื่นเขียน parser ง่ายๆชื่อ listalltags.pl มา parse แสดง Tag ทั้งหมดที่มีอยู่ในไฟล์.
$ ./listalltags.pl etlex.utf-8 
Doc
esearch
eentry
tentry
ecat
id
 
junk after document element at line 8, column 0, 
byte 256 at /usr/lib/perl5/vendor_perl/5.8.0/i686-linux/
XML/
Parser.pm line 187
ปรากฏว่าโปรแกรมตายกลางครร. ไปหาข้อมูลทาง google ได้ว่า "junk after document element" หมายถึงไฟล์ XML ทีไม่มี root element. คือในเอกสาร XML หนึ่งจะต้องมี root element ซึ่งในไฟล์นี้ไม่มี. เลยเขียน <etlex> ไว้ที่บรรทัดแรกและ </etlex> ไว้ที่บรรทัดสุดท้ายของไฟล์แล้ว parse ใหม่.
$ ./listalltags.pl etlex.utf-8 | sort | uniq
 
not well-formed (invalid token) at line 14823, 
column 19, byte 390464 at /usr/lib/perl5/vendor_perl/5.8.0/i686-linux/
XML/
Parser.pm line 187
Doc
eant
ecat
eentry
esearch
esyn
ethai
etlex
id
tentry
คลายกลายเป็นว่ามี invalid token บรรทัดที่ 14823 เลยไปดูแล้วปรากฏว่ามีเครื่องหมาย & อยู่เลยแก้เป็น &amp;. แก้พวก token ที่ไม่ถูกต้องให้หมดทุกที่แล้ว parse ใหม่จะได้ผลดังนี้.
$ ./listalltags.pl etlex.utf-8 | sort | uniq
Doc
eant
ecat
eentry
esearch
esyn
ethai
etlex
id
tentry

ความหมายของ Tag

ดูจากข้อมูลในไฟล์แล้วสรุปความหมายของ Tag ที่ใช้ได้ดังนี้
  • Doc : เริ่ม record ของคำศัพท์
  • eant : คำภาษาอังกฤษที่มีความหมายตรงข้าม
  • ecat : ประเภทของคำ
  • eentry : คำภาษาอังกฤษ
  • esearch : คำภาษาอังกฤษ
  • esyn : คำภาษาอังกฤษที่มีความหมายเหมือนกัน
  • ethai : คำภาษาไทยที่มีความหมายใกล้เคียง
  • id : เลข id ของคำ
  • tentry : คำแปลภาษาไทย
สำหรับ Tag ของ telex มีดังนี้
  • Doc : เริ่่ม record ของคำศัพท์
  • eentry : คำภาษาอังกฤษ
  • id : เลข id ของคำ
  • notes : หมายเหตุ
  • tant : คำภาษาไทยที่มีความหมายตรงข้าม
  • tcat : ประเภทของคำ
  • tdef : คำอธิบาย
  • tenglish : คำภาษาอังกฤษที่มีความหมายใกล้เคียง
  • tentry : คำภาษาไทย
  • tnum : หน่วย
  • tsample : ตัวอย่างประโยคภาษาไทย
  • tsearch : คำภาษาไทย
  • tsyn : คำภาษาไทยที่มีความหมายเหมือนกัน

สร้างไฟล์ข้อมูลดิบ

ไฟล์ข้อมูลดิบที่จะสร้างนี้คือฟอร์แมตที่เรียกว่า c5, headword (คำที่ต้องการหา) จะอยู่ถัดจากบรรทัดที่มีเครื่องหมาย underscore (_) 5 ตัวเป็นอย่างต่ำ. ไฟล์ c5 นี้สร้างจาก XML ของ LEXiTRON ด้วยสคริปต์ parse_etlex.pl และ parse_telex.pl.
$ ./parse_etlex.pl etlex.utf-8 > etlex.c5

สร้าง database-info

database-info เป็นข้อมูลที่เกี่ยวกับข้อมูลของพจนานุกรมเช่นหนังสืออนุญาตการใช้ (license). เขียนเก็บไว้ที่ไฟล์ lexitron.info

สร้างฐานข้อมูลพจนานุกรม

ใช้คำสั่ง dictfmt เพื่อสร้างฐานข้อมูลพจนานุกรม.
$ cat lexitron.info etlex.c5 | dictfmt \
-c5  -u ftp://ftp.opentle.org/pub/lexitron/source/lexitron-data.zip\
 -s "LEXiTRON version 2, etlex" \
--without-info --allchars \
--locale th_TH.UTF-8 etlex
แล้วจะได้ไฟล์สองไฟล์คือ etlex.dict และ etlex.index. หลังจากนั้นบีบอัดข้อมูล etlex.dict ให้เล็กด้วยคำสั่ง dictzip.
$ dictzip etlex.dict
ผลลัพธ์ที่ได้คือไฟล์ etlex.dict.dz.

ติดตั้งฐานข้อมูล

ฐานข้อมูลของ dictd เช่นใน gentoo จะไว้ที่ /usr/lib/dict ก็เอาไฟล์ etlex.dict.dz และ etlex.index ไปไว้ที่นั้น.

การรัน dictd เซิฟร์เวอร์ต้องใช้ตัวเลือก --locale th_TH.UTF-8 ด้วยเพื่อให้เซิฟร์เวอร์รู้ว่าฐานข้อมูลมี encoding แบบ UTF-8.

ใช้งาน

ใช้โปรแกรมอะไรที่รองรับ DICT protocol ต่อเข้ากับเซิฟร์เวอร์. ตัวอย่างเช่น kdict, gnome-dictionary, dict ฯลฯ.

Bugs

  • ชื่อฐานข้อมูลไม่ยอมแสดงใน client
  • ไม่สามารถหาแบบ match กับพจนานุกรมไทย-อังกฤษ (เป็นที่เซิฟร์เวอร์?)

ดาว์นโหลด

ดาว์นโหลดจาก TLWG CVS.

ติดต่อสอบถาม

LTN developer channel/webboard.

Created by poonlap
Last modified 2005-06-01 02:32 PM
 

Powered by Plone

This site conforms to the following standards: