Analysing LEXiTRON data files, with Ruby


สุดสัปดาห์ที่ผ่านมา นั่งเรียน Ruby (กำลังฮิต mk ก็ทำอย่างเดียวกันโดยไม่ได้นัดหมาย)

ตอนแรกว่าจะลอง Ruby on Rails เลย ..

คืออาทิตย์ก่อนหน้านี้
(สังเกต: ใช้คำว่าว่า อาทิตย์ก่อนหน้า แต่ก็ใช้ สุดสัปดาห์ … สุดอาทิตย์ ไม่มีใครใช้)
นั่งเขียน ‘เว็บบอร์ด’ ใหม่อยู่ (โครงการพันล้าน ทำ ๆ รื้อ ๆ มาหลายชาติ ตอนนี้ Google ออกเบต้าไปเรียบร้อยแล้ว :P)
ก็เขียนด้วย PHP ตามถนัดน่ะแหละ (ซึ่งผมว่า สำหรับเว็บเล็ก ๆ นะ PHP นี่แหละ เร็วสุดแล้ว หมายถึงสร้างนะ แต่ถ้าทำใหญ่ ๆ ก็รกง่ายมาก) แต่คราวนี้แทนที่จะทำอะไรเองหมด ก็ไปลองใช้พวกไลบรารีใน PEAR มั่ง
ซึ่งก็ง่ายดี และทำให้โค้ดสะอาดขึ้นเยอะ (อย่างตัว MDB2 นี่ก็ชอบ .. ถ้ามันใช้ utf-8 ได้นะ)

เขียนไปเขียนมา ก็นึกขึ้นมาได้ว่า เออ อยากลอง Rails มาตั้งนานแล้วนี่นา
งั้นทำไมไม่ลองเขียนด้วย Rails ไปเลยล่ะ ?
ประกอบกับได้ไปยืน/นั่ง/นอนอ่าน(ฟรี) หนังสือ Beyond Java ที่ร้านหนังสือมาสองรอบ (ไปอ่านมาสองรอบ ไม่ใช่อ่านจบสองครั้ง)
นึกได้ดังนั้น ก็เลยลง Ruby กะ Rails อีกรอบ
(หลังจากที่เคยลงและลบไปนานแล้ว เพราะไม่รู้จะลองอะไรดี)

ปรากฏว่า ลง Ruby ได้ แต่ Rails ไม่เวิร์กแฮะ
เซตกับ Apache (บน Windows) ไม่ได้ซะที ลองมันทุกวิธีละ
ก็นั่งทำอยู่ตั้งนาน ยังไงก็ไม่ได้
สุดท้ายเลยไปใช้ WEBrick แทน ที่ port 3000 (โง่อยู่ตั้งนาน โธ่)

เอาล่ะ มี Ruby ละ มี Rails ละ
ลอง Hello, World ไปโผล่ในเว็บเบราเซอร์ได้เรียบร้อยแล้ว
แต่ยังเขียน Ruby ไม่เป็นเลยนี่หว่า .. เอ้า

ก็เลยหัด Ruby ซะก่อน

ไม่รู้จะหัดกับอะไรดี นึกขึ้นมาได้ว่ากำลังอยากแปลงไฟล์ข้อมูล LEXiTRON อยู่
งั้นลองด้วย Ruby เลยละกัน
(เป็นประเภท ไม่ชอบเรียนกับหนังสือ ขี้เกียจทำตาม ชอบแก้ ๆ ผิด ๆ ถูก ๆ ไปเองเรื่อย ๆ มากกว่า ถ้าติดตรงไหนค่อยเปิดอ่าน/ค้นเว็บ)

ทำไปทำมา ตอนนี้ไม่ได้แตะ Rails แล้ว .. อ้าว

เพราะกำลังสนุกกับการ ‘ทำความสะอาด’ ข้อมูลใน LEXiTRON อยู่

ก็ใช้เขียน Ruby นี่แหละ ทำสคริปต์ช่วย พวกแปลงข้อความ/หาข้อความ

ทำไปทำมา จริง ๆ เหมือนเขียน regular expression เล่นมากกว่า 😛

ถ้ามีพื้นฐาน Python มาแล้ว Ruby นี่วันเดียวก็เป็น ถ้าได้ลงมือโค้ดจริง ๆ
คอนเซปต์อย่าง closure นี่ ผมอ่าน ๆ แล้วก็ไม่เข้าใจเท่าไหร่
แต่พอได้ลงมือเองจริง ๆ แล้ว + อ่านโค้ดตัวอย่าง + ดีบัก แป๊บเดียวก็เข้าใจแล้ว

เท่าที่พบ ข้อมูลใน LEXiTRON ค่อนข้างจาก ‘รก’ ทีเดียว …
ไม่ใช่ว่าแปลผิดนะ แต่หมายถึง ไม่ค่อยจะ..สม่ำเสมอ คือ ข้อมูลอย่างเดียวกัน แต่บันทึกไม่เหมือนกัน
เช่นในแท็ก <notes> (หมายเหตุ) ในไฟล์ telex นี่ เรา (โดยสคริปต์ Ruby สั้น ๆ) จะพบทั้ง

  • (บาลี/สันสกฤต) 819 ครั้ง
  • (บาลี, สันสกฤต) 63
  • (บาลี), (สันสกฤต) 21
  • (บาลี – สันสกฤต) 12
  • (บาลีและสันสกฤต) 11
  • บาลี-สันสกฤต 4
  • (บาลี-สันสกฤต) 2

ผมยังไม่ได้เข้าไปไล่ดูในตัวไฟล์คำแปลว่าจริง ๆ แล้ว ทั้งหมดนี้ มีความหมายเหมือนหรือต่างกันยังไง
แต่ยังไงก็ตาม มันน่าจะมีอย่างน้อยบางคู่ ที่มันมีความหมายเหมือนกันล่ะ (แต่บันทึกไม่เหมือน)

… สรุปว่า เริ่มจาก ‘เว็บบอร์ด’ แล้วไปลงที่ LEXiTRON ได้ไงเนี่ย – –

นี่มัน Ruby off Rails ชัด ๆ !

ป.ล. งานนี้ใช้ jEdit + Ruby plug-in และปลั้กอินอื่น ๆ ..
ทั้ง HTML, CSS, XML, PHP, Python, JavaScript และ Ruby เราทำมันทั้งหมดใน jEdit เย้!
(อ้อ อย่าลืมเซต -Xmx เยอะ ๆ ล่ะ ถ้าแก้ไฟล์ใหญ่มาก ๆ แล้วจะให้มัน parse structure ด้วย ไม่งั้นก็แก้ใน mode text ธรรมดาไปเลย
และระวังอย่าเปิดไฟล์ที่มีบรรทัดที่ยาว ๆ และไม่มี whitespace เลย ในขณะที่ใช้ปลั๊กอินอย่าง StructureBrowser ไม่งั้น jEdit มันจะค้างไปเลย อันนี้ลองกับไฟล์ XML ที่แปลงมาจากข้อมูล LEXiTRON ขนาด 20 Mb ทั้งไฟล์มีบรรทัดเดียว และไม่มี whitespace เลย … ผลลัพธ์ เซต -Xmx640m ก็ไม่พอครับ (เครื่องผมแรม 1.5 Gb))

ป.ล. ๒ เดี๋ยวค่อยมาโพสต์เรื่องการแปลงข้อมูล และสคริปต์ที่ใช้จริง ๆ (ด้วยภาษา Ruby) กัน
ถ้าสนใจเรื่องนี้ และอยากอ่านตอนนี้เลย แนะนำให้ไปอ่านของคุณ poonlap ก่อน — เจาะข้อมูล LEXiTRON (Perl)


4 responses to “Analysing LEXiTRON data files, with Ruby”

  1. > แต่พอได้ลงมือเองจริง ๆ แล้ว + อ่านโค้ดตัวอย่าง + ดีบัก แป๊บเดียวก็เข้าใจแล้วเห็นด้วย พวก concept แปลกๆที่เราไม่รู้จักอย่างนี้มันต้องลงมืออย่างเดียวถ้าให้ซาบซื้ง bact ลองไปเรียน scheme ดูด้วยนะตอนนี้ผมกำลังหมกมุ่นกับศัพท์ที่ว่า Monad อยู่ตอนนี้ก็เลยหัดภาษา Haskell เพิ่มอีกอัน จะได้เข้าใจสักที

  2. <a href="http://www.rubybox.netwww.rubybox.net<br />เปิดมานานแล้วอ่ะครับทำอยู่คนเดียวไม่ค่อยว่าง เลยไม่ค่อยมีอะไรเท่าไหร่ อยากจะขอความรู้จากทุกท่านอ่ะครับ post ใน webboard ก็ดีนะครับ

  3. ยังไม่มีเวลาอ่านต่อเลย (ช่วงนี้เพื่อนเกิดกันทุกวัน วันไหนไม่ได้เกิดมันก็เกิดกันเอง) ค่ำๆ ไม่เคยว่างจริงๆ ภาษาพวกนี้มันจะให้ทูลสำหรับลองเล่นง่ายๆ อย่าง WEBrick พอใช้จริงค่อยเป็น Apache อีกที ตอนเขียน Mono นั้นใช้ XSP เหมือนกันปลั้ก – ใช้ไม่ตรีไม่ใช่เหรอ

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.