zip กับชื่อ path ภาษาไทย โดยใช้ rubyzip

ผมได้รับไฟล์ .zip มา ก็ดีใจว่าอย่างน้อย ๆ ก็ใช่ไม่ .rar ที่เวลาเปิดจะลำบากขึ้นไปอีก

สมัยผมหนุ่ม ๆ เขาตั้งเชื่อไฟล์กันได้ 8 ตัวอักษาและ extension อีก 3 ตัว นอกจากนั้นก็ยังใส่ภาษาไทยไม่ได้ เดี๋ยวนี้ไม่ ใส่ภาษาไทย ใส่ช่องว่างได้หมด งานก็เข้าอีก

โปรแกรมแตกไฟล์ zip บางตัวมันก็ไม่สนใจภาษาไทยเลย อ่านแบบคิดว่าเป็น ASCII แบบ 8 bit ตลอด ๆ  ผมก็เลยลองเอา rubyzip มาเล่นดู แล้ว encode ชื่อไฟล์ใหม่เป็น UTF-8 ก็พบว่าเจ้ง เพราะว่าบางทีชื่อไฟล์ก็ไม่ใช่ UTF-8

เลยเปลี่ยนมาใช้ TIS-620 ก่อนแล้วแปลงเป็น UTF-8 อีกที ก็อ่านได้เพิ่มขึ้น แต่ก็ยังมีตัวอักษรบางตัวแปลงไม่ได้

จึงเปลี่ยนจาก TIS-620 มาใช้ Windows 874 แทน ก็ยังมีปัญหาเหลืออีกคือบางทีชื่อไฟล์เป็น UTF-8 อยู่แล้ว ก็เลยต้องมาเขียน check ก่อน


require 'zip'

def decode_path_name(name)
  if name.force_encoding("UTF-8").valid_encoding?
    name.force_encoding("UTF-8")
  else
    name.force_encoding("WINDOWS-874").encode("UTF-8")
  end
end

Zip::File.open(ARGV[0]) do |zip_file|  
  zip_file.each do |entry|
    name = decode_path_name(entry.name)
    entry.extract(name)
  end
end

พอจัดไปครบตามนี้ก็พบว่าแตกได้ทุกไฟล์แล้ว

 

Apertium ภาษาไทย

Apertium เป็นระบบแปลภาษาแบบใช้กฎการถ่ายโอน (โดยเฉพาะแบบตื้น) ที่สำคัญมันเป็นซอฟต์แวร์เสรี (Free software; ~ Open source software)

Apertium กับภาษาไทยอยู่ในระยะเริ่มต้น แต่ก็เอาลงติดตั้งเพื่อช่วยกันพัฒนาได้ เอาไปใช้คงยังไม่ไหว

  1. เบื้องต้นดูตามนี้ได้เลย
  2. ใน svn ที่ sf.net/projects/apertium ใน trunk ลง lttoolbox apertium apertium-lex-tools
  3. ลง vislcg3
  4. ใน incubator ใน svn ที่ sf.net/projects/apertium ลง apertium-tha
  5. ใน incubator ใน svn ที่ sf.net/projects/apertium ลง apertium-tha-eng อันนี้จะท่ายากหน่อยเพราะต้องสั่งทำนอง ./autogen.sh –with-lang1=(ชี้ไปที่ path ของ apertium-tha) ที่ลงไปก่อนหน้านี

เสร็จแล้ว ใน folder ของ apertium-tha-eng ลองสั่ง apertium -d . eng-tha ก็จะเริ่มแปลได้นิดหน่อย

ตอนนี้มันก็จะออกมาฮาฮาประมาณนี้

$ apertium -d . eng-tha
I am a cat.
#ฉัน #คือ *a #แมว.

ป.ล. ไม่เข้าใจถามไดใน IRC ที่ irc.freenode.org ห้อง #apertium

wordcut 0.7.0 เรียกใช้จาก command line ได้แล้วครับ

wordcut คือโปรแกรมตัดคำ (word segmentation)

วิธีติดตั้ง

npm install -g wordcut

เวลาใช้ก็จะประมาณนี้อะครับ

$ wordcut
กากากา
กา กา กา

คือพิมพ์ กากากา เข้าไปมันก็ตัดได้ กา กา กา ออกมา

More info: http://github.com/veer66/wordcut

คิดว่า bug #425915 น่าจะเริ่มไล่จาก Selection::Extend ใน nsSelection.cpp

Keon + Thai keyboard

Keon + Thai keyboard

 

ขอบคุณ patch โดย @pittaya และวิธี install จาก https://hacks.mozilla.org/2013/06/updating-and-tweaking-your-firefox-os-developer-preview-phonegeeksphone/

สิ่งที่ผมลงไปคือ สิ่งนี้ วิธีคร่าว ๆ ก็คือลง rom nightly แบบวิธีตาม link ข้างบนแล้วก็ clone Gaia มา build แต่ว่าใช้ branch master เลย แล้วก็ merge กับ patch ของ @pittaya

โปรแกรมตัดคำ แบบใช้ PHP ล้วน ๆ

ที่ผ่านมามีหลายท่านสนใจถามเข้าหลังจากที่แสดงตัวอย่างเรียก Swath จาก PHP ให้ดู แต่ส่วนมากพอใช้บน Windows หลายคน ก็งง ๆ ผมก็งง ก็เลยจัดอันนี้ไป โปรแกรมตัดคำมันบน PHP ล้วน ๆ เสียเวลาเขียนไปหลายชั่วโมงอยู่ครับ น่าจะมี bug อะไรเต็มไปหมดถ้าท่านใดพบกรุณาแจ้งไปที่ https://github.com/veer66/PhlongTaIam/issue เดี๋ยวนี้ใช้ github แล้วครับ เพื่อท่านใดจะช่วยแก้จะได้ fork แล้ว pull request กลับมาได้เลย ไม่ต้องเสียเวลาย้ายไปย้ายมาให้ลำบากเหมือนโครงการก่อน

เข้าไป download ที่ https://github.com/veer66/PhlongTaIam ได้เลยครับ ถ้าเอาง่าย ๆ ก็ click ที่ปุ่มที่เขียนว่า zip และมีรูปเมฆมีลูกศรชี้ลงครับ ก็ได้ code ไปทั้งหมด เอาไปวางใน htdocs ก็น่าจะใช้ได้เลย

แต่ก็อาจจะเจ๊งบน Windows หรือสิ่งแวดล้อมที่ต่างจากที่ผมใช้อยู่อยู่ดี ถ้าปัญหาอะไรก็ถามไว้ที่นี่ได้ครับ แต่ว่าส่วนมากผมมักจะตอบไม่ได้  แต่ก็เผื่อมีท่านอื่นตอบได้ครับ