2009-07-08

more bact' updates on Twitter

Get more quick microupdates + recommended links from my Twitter at http://twitter.com/bactI still keep update this blogs, with rather original/longer writings.

ช่วงที่ผ่านมา อัปเดตข่าวคราวผ่าน Twitter (ทวิตเตอร์) บ่อยกว่าทางบล็อก ยังไม่เลิกเขียนบล็อกนะครับ แต่คงจะเป็นงานเขียนแบบยาวหน่อย ส่วนสั้น ๆ หรือแชร์ลิงก์ ทวิตเตอร์มันเร็วดี ยังไงก็ติดตามได้ทาง http://twitter.com/bact อีกช่องทางหนึ่งครับ :)

ทวิตเตอร์คืออะไร ? ไม่รู้แฮะ ลองไปดูว่ามันทำอะไรได้บ้างละกัน

btw, according to this quiz, I'm 93% addicted to Twitter (ouch, that's sad).

technorati tags: ,

2009-06-07

ช่วงช่วง หลินฮุ่ย เคอิโงะ เสื้อแดง เอ็นจีวี นักศึกษา แพนด้า SEO OCR

OCRopus โอเพ่นซอร์สทูลคิตสำหรับงาน OCR รุ่น 0.4 ออกแล้วครับ น่าจะคอมไพล์อะไรต่าง ๆ ได้ง่ายขึ้นบนแพลตฟอร์มที่ไม่ใช่ GNU/Linux ครับ

ดาวน์โหลดได้ทันทีที่เว็บไซต์ OCRopus (โอเพ่นซอร์ส Apache License 2.0)

ที่หน้าเว็บ Course: OCRopus สอนการใช้งานและปรับแต่ง OCRopus มีวิธีเขียน Lua และ C++ เพื่อเรียกใช้ OCRopus ด้วย

แม้ OCRopus จะรองรับการเพิ่มเติมภาษาใหม่ ๆ เข้าไปได้ แต่ก็ต้องลงแรงหน่อย ตอนนี้ยังใช้ไทยไม่ได้โดยทันที

สำหรับคนที่มองหาตัวที่อ่านภาษาไทยได้ และไม่แพงนัก ลองหา ArnThai (อ่านไทย) มาทดสอบดู มีทั้งบนวินโดวส์และลีนุกซ์ (รุ่นบนลีนุกซ์เก่ากว่าหน่อย) ติดต่อเนคเทคได้ ถ้าสนใจนำไปใช้ ที่เคยถาม สามารถตกลงสัญญาอนุญาตได้หลายแบบ

สำหรับตัวที่มีประสิทธิภาพดีกว่านั้นและมีความสามารถเพิ่มเติมอื่น ๆ ที่อ่านไทยได้ คือ ABBYY FindReader อ่าน PDF ได้ ใช้ได้หลายภาษา (ทายอัตโนมัติ) คง document logical structure, formatting, style, ฟอนต์, และตาราง อู้ฟู่หรูหรามาก (ขอบคุณ @sarasinb และ @thai101 สำหรับข้อมูล)

รีวิวซอฟต์แวร์ OCR ต่าง ๆ บนลีนุกซ์ : โดย groundstate, โดย Peter Selinger. บทความ optical cahracter recogntion ที่วิกิพีเดียภาษาอังกฤษ มีลิงก์ไปหาซอฟต์แวร์ต่าง ๆ ด้านล่างสุด.

technorati tags: , , , ,

2009-06-02

on various things, digital this and information that

[ปรับปรุง 12:46: เพิ่ม Greenstone และลิงก์ libraryhub.in.th ขอบคุณ @markpeak]

สี่ห้าวันที่ผ่านมา บุกตะลุยเก็บข้อมูลเกี่ยวกับห้องสมุดและระบบสารสนเทศดิจิทัลให้ :=3

ไม่ได้เน้นไปที่พวก Library 2.0 มากนัก อยากรู้เรื่องระบบข้างใต้เพิ่มเติมมากกว่า การประยุกต์ข้างบนคิดว่าพอเข้าใจไอเดียบ้างแล้วส่วนหนึ่ง (ลองดู นำเสนอโดย @iteau และ @projectlib เกี่ยวกับเรื่องนี้และ TCDC Resource Center - @iteau เขียนควันหลงนิดนึง) เดี๋ยวลองเอามาประกอบกัน

เว็บ DegreeTutor แนะนำโอเพ่นซอร์ส ILS (integrated library system) 3 ตัว ได้แก่ Koha, Evergreen ILS, และ VuFind ทุกตัวทำงานกับ OPAC (open public access catalog) ได้หมด :

  • Koha OPAC รุ่นเล็ก ติดตั้งง่าย มีหลายที่ในเมืองไทยใช้แล้ว เช่น ห้องสมุดดิจิทัลของ STKS (โชว์ในงาน LibCamp), ห้องสมุดวุฒิสภา, ม.อุบลก็กำลังเตรียมใช้, บล็อก STKS สวทช. เขียนถึงเยอะเหมือนกัน
  • Evergreen ILS เขาว่าเป็นระบบ fault-tolerance เลยทีเดียว มั่นใจได้
  • VuFind มาทีหลัง แต่ใหญ่กว่า ยังอยู่ในช่วงพัฒนา (RC) อาจจะยังไม่เรียบร้อยนัก แต่มีความสามารถเยอะ ใช้ระบบค้นหาของ Apache Solr หายห่วง โครงการห้องสมุดดิจิทัลคิดดี กำลังเล็งว่าอาจจะเอามาเป็นหน้ากากครอบฐานข้อมูลย่อย ๆ ต่าง เพื่อให้ผู้ใช้ใช้งานง่ายขึ้น

งานหลักอันนึงของห้องสมุดก็คือ การทำ catalog หนังสือ หรือป้อนข้อมูลหนังสือเข้าไปในระบบ เพื่อให้สืบค้นและยืมคืนได้ ซึ่งก็ใช้แรงงานไม่น้อย ถ้ามีเครื่องทุ่นแรงก็คงจะดี นึกไอเดียประมาณ CDDB หรือ freeDB.org ที่เราเสียบซีดีเพลงเข้าเครื่อง แล้วโปรแกรมเล่นเพลงก็จะไปค้นฐานข้อมูลที่คนอื่นเขาใส่ข้อมูลชื่อเพลงชื่อนักร้องไว้เราแล้ว เราไม่ต้องใส่เองหมด เว้นว่าหาไม่เจอ เราก็ใส่เข้าไปหน่อย แล้วคนอื่นจะได้ใช้ด้วย เอาแบบนั้น สำหรับเมตาดาต้าหนังสือ ก็จะได้ ‡biblios.net โครงการเพิ่งเริ่มได้ไม่นาน แต่ดูดีทีเดียว มาจาก LibLime ผู้ร่วมพัฒนา Koha

นอกจากสารสนเทศที่เป็นหนังสือเล่มแล้ว ก็ยังมีเอกสารที่ไม่ใช่หนังสือ ซึงตอนนี้ก็เป็นดิจิทัลได้จำนวนมากแล้ว วิธีหนึ่งที่นิยมและมีประสิทธิภาพก็คือ self-archiving คือเก็บของใครของมัน ใครผลิตคนนั้นก็เก็บ เป็น institutional repository แต่แชร์ข้อมูลค้นหากันได้ ระบบจัดเก็บสารสนเทศองค์กรที่เป็นโอเพ่นซอร์สและใช้โปรโตคอล OAI-PMH สำหรับแลกเปลี่ยนเมตาดาต้าเพื่อการค้นหา มีสองตัว :

  • DSpace เมืองไทยมีใช้หลายที่ เช่น คลังปัญญาจุฬาฯ โดย สถาบันวิทยบริการ จุฬาลงกรณ์มหาวิทยาลัย, ห้องสมุดดิจิทัลคิดดี โดย เอไอที, สำนักงานคณะกรรมการการศึกษาขั้นพื้นฐาน และ มศว., NSTDA Knowledge Repository (สวทช.) โดย ศูนย์บริการความรู้ทางวิทยาศาสตร์และเทคโนโลยี
  • EPrints เมืองไทยเท่าที่ทราบ ไม่มีใครใช้ ผมดูแล้วมันน่าจะลงง่ายกว่าแฮะ (จากประสบการณ์ส่วนตัว ระหว่าง UIMA กับ GATE พบว่า GATE ปวดหัวน้อยกว่า ผมเลยคิดว่า จะลอง EPrints ก่อนละกัน เหตุผลแถ ๆ :p)

@markpeak แนะนำอีกตัว (thx!) คือ Greenstone เท่าที่ค้น ๆ ดูคร่าว ๆ อันนี้ ไม่ได้เป็น institutional repository software เหมือนกับ DSpace หรือ EPrints เสียทีเดียว แต่เป็น digital library software (ดูจากบล็อกนี้ ผมเองก็ยังตอบไม่ได้ว่า แต่ละอย่างมันต่างกันชัด ๆ อย่างไร คิดว่ามันก็ทับ ๆ กันอยู่เยอะ แต่กรณีของ IR นี่ เรื่อง self-archiving น่าจะเป็นลักษณะสำคัญอันนึง) Greenstone นี่น่าสนใจมาก เขาบอกว่าสนับสนุนหลายภาษา มีภาษาไทยด้วย (ยังไม่ได้ค้นต่อว่าที่ว่า สนับสนุนภาษา เนี่ย แปลว่าอะไร) มี UNESCO หนุน โอเพ่นซอร์ส และสนับสนุนโปรโตคอล OAI-PMH ร่วมพัฒนาโดยมหาลัยที่สร้าง WEKA data mining workbench/toolkit ดูดีนะเนี่ย

open archives, collections, repositories, libraries พวกนี้ นอกจากจะเปิดให้ดูเฉย ๆ แล้ว ถ้าจะให้มีประโยชน์จริง ๆ มันก็ควรจะค้นหาได้แบบ programmable หน่อย หรืออย่างน้อยก็มีวิธีในการค้นหาเหมือน ๆ กันนิดนึง ผู้ใช้จะได้ไม่ต้องเรียนรู้เยอะ ก็เลยเป็นที่มาของมาตรฐานในการค้นหา รวมไปถึงการแลกเปลี่ยนเมตาดาต้าแบบอัตโนมัติด้วย

เอาง่ายที่สุด ก็น่าจะใช้ OpenSearch สืบค้นได้ (ถ้านึกไม่ออกว่า OpenSearch คืออะไร ตัวช่องค้นหาบนแถบเครื่องมือใน Internet Explorer 7+ และ Mozilla Firefox 3+ ต่างก็สืบค้นจากบริการที่เราระบุ ผ่าน OpenSearch ... อืม ยังไม่ชัด แต่ก็ดูใกล้ตัวหน่อยนึง) แล้วส่งผลลัพธ์ออกมาเป็น RSS/Atom รูปแบบข้อมูลยอดนิยม, ถ้ามี JSON ล่ะก็แจ๋ว ในแง่การเขียนโปรแกรมโดยเฉพาะฝั่ง browser-side

ชุดต่อมา มาจากกลุ่ม Open Archives Initiative มีตัวชูโรงคือ OAI-PMH ที่พูดถึงก่อนหน้านี้ เอาไว้แลกเปลี่ยนเมตาดาต้า :

สำหรับการสืบค้นสารสนเทศ ดูมาตรฐาน Z39.50 (ISO 23950: Information Retrieval (Z39.50): Application Service Definition and Protocol Specification) และ SRU (Search/Retrieve via URL) คู่กับ CQL (Contextual Query Language). ‡biblios.net ที่พูดถึงก่อนหน้านี้ รองรับ SRU/CQL ด้วย

ข้อกำหนดเมตาดาต้าที่ได้รับนิยมนำไปปรับใช้มากที่สุดในเว็บนั้น คือ Dublin Core Metadata Initiative (DMCI) ซึ่งคนที่ใช้งานเอกสาร XML ต่าง ๆ อาจจะพอคุ้นเคย ใน namespace dc: ซึ่งถูกนำไปใช้กับรูปแบบเอกสาร XML หลายชนิด OAI เองก็ใช้ Dublin Core

สำหรับรูปแบบข้อมูลผลลัพธ์จากการสืบค้นสารสนเทศอื่น ๆ ก็เช่น MARCXML ซึ่งพัฒนาต่อมาจากปู่ MARC มีช่องข้อมูลมากมาย เรียกได้ว่าครบถ้วน แต่ก็ซับซ้อนปวดหัว, ต่อมาจึงมี Metadata Object Description Schema (MODS) ซึ่งอยู่ระหว่างกลาง MARC กับ Dublin Core (ซึ่งมีช่องข้อมูลน้อยมาก ๆ ประมาณว่าใช้ได้กับงานอย่าง RSS Feed จะให้ใช้กับห้องสมุดก็ขาดตกไปหลายอย่าง) เรียกว่า MODS มีช่องข้อมูลที่จำเป็นต้องใช้บ่อย ๆ ในงานห้องสมุด ในขณะเดียวกันก็ไม่ซับซ้อนจนเกินไป, Metadata Authority Description Schema (MADS) เป็นมาตรฐานที่ออกมาใช้คู่กับ MODS

acronyms ที่พ่นออกมามากมายข้างบน เกินครึ่งกำหนดโดยห้องสมุดรัฐสภาสหรัฐ (Library of Congress) ที่เหลือก็โดยห้องสมุดของมหาวิทยาลัยหรือศูนย์วิจัยต่าง ๆ

ใครสนใจเรื่องพวกนี้ โดยเฉพาะที่ใช้โอเพ่นซอร์ส อัปเดตข่าวสารได้จากเว็บไซต์เหล่านี้ (แนะนำเพิ่มเติมได้)

  • oss4lib - Open Source Systems for Libraries
  • code4lib - coders for libraries, libraries for coders กลุ่มเป้าหมายจะเน้นนักพัฒนามากกว่า oss4lib
  • บล็อก STKS - ภาษาไทย มีเรื่องการจัดการความรู้ เรื่องห้องสมุดดิจิทัลอยู่เรื่อย ๆ โดยเฉพาะซอฟต์แวร์ที่เป็นโอเพ่นซอร์ส
  • LibraryHub - โดย @projectlib เรื่องห้องสมุดในแง่มุมต่าง ๆ (ไม่ได้เน้นเฉพาะเรื่องซอฟต์แวร์)

นอกจากเรื่อง digital repositories แล้วถ้ามีเรื่องการอนุรักษ์ preservation, digitization ควรดู TEI ไว้ด้วย Text Encoding Initiative เป็นชุดข้อแนะนำในการบันทึกข้อความมาอยู่ในระบบดิจิทัล พร้อม ๆ กับคำแนะนำในการบันทึกคำอธิบายข้อมูลต่าง ๆ (annotation) ด้วย การทำ archiving, preservation ในลักษณะนี้ ถือเป็นคีย์สำคัญสำหรับ สาขา ที่เรียกว่า digital humanities (มนุษยศาสตร์ดิจิทัล) ซึ่งส่วนหนึ่งเป็นการใช้เครื่องมือดิจิทัลศึกษาเอกสาร (และบันทึกผลการวิเคราะห์ไปเป็น annotation อีกชั้น layer นึงบนเอกสาร)

เอ้อ ถ้าอยากทำ OCR มีทูลคิตโอเพ่นซอร์สชื่อ OCRopus ลองแล้ว ใช้ได้เลย มันเชื่อมชิ้นส่วนที่จำเป็นในงาน OCR เข้าด้วยกัน ทั้งส่วนแปลงไฟล์ฟอร์แมต หมุนรูป ทำ layout analysis ทำตัวแบบภาษา และการแปลงภาพเป็นตัวอักษร ตัว engine ที่ใช้แปลงภาพเป็นตัวอักษร ตอนนี้ใช้ tesseract อยู่ โอเพ่นซอร์สเช่นกัน ทั้งหมดนี้เขียนด้วย C แต่มี Python binding ถ้าต้องการ ชุด OCRopus และ tesseract นี้มี Google สนับสนุนการวิจัยและพัฒนา คาดว่าน่าจะเป็นตัวเดียวกับที่ใช้เป็นส่วนหนึ่งของระบบ Google Book Search ผมลองคอมไพล์แล้วรันเล่นดู เจ๋งดี ถ้าใช้ tesseract เฉย ๆ ผลลัพธ์จะเป็น plain text แต่ถ้าใช้ OCRopus tool chain มันได้มาเป็น HTML เลย (hOCR microformat) ซึ่งแปลว่าเราจะได้ layout และ style มาด้วย ตัวหนา ตัวเอียง มาหมด

แสกนเข้ามาแล้ว มันก็ต้องมีที่ผิดบ้างแหละ มากน้อยแล้วแต่ จะช่วยกันแก้ไขได้ยังไง ? ลองดูตัวแบบจากโครงการ Distribute Proofreaders (DP) (แนะนำโดย @thai101 ขอบคุณมาก ๆ ครับ) ซึ่งเป็นการเปิดให้อาสาสมัครบนอินเทอร์เน็ตมาช่วยกันพิสูจน์อักษร แก้ตัวสะกดผิด โดยโครงการนี้เจาะจงไปที่การแสกนหนังสือที่ไม่มีหรือพ้นการคุ้มครองลิขสิทธิ์ไปแล้ว (เป็นสมบัติสาธารณะหรืออยู่ใน Public Domain) พิสูจน์อักษร แล้วก็ส่งต่อหนังสือที่เสร็จสมบูรณ์แล้ว ให้กับ Project Gutenberg ต่อไป ตัวแบบของ DP นี้อาจจะเอามาปรับใช้กับโครงการอื่น ๆ ก็ได้

ทั้งหมดที่กล่าวนี้ จะเห็นว่าในส่วนของมาตรฐานก็เป็นมาตรฐานเปิด ส่วนซอฟต์แวร์ก็มีทางเลือกที่เป็นโอเพ่นซอร์ส แรงงานหรือก็มีคนยินดีร่วมเป็นอาสาสมัคร (ถ้าระบบมันไม่ใช้ยากเกินจนท้อไปเสียก่อน) อนาคตดูดีทีเดียว วงการห้องสมุด

งงกันมาพอสมควรแล้ว โพสต์นี้ไม่ได้ช่วยให้ใครเข้าใจอะไรขึ้นมาได้แน่ ผมเองก็ไม่เข้าใจ แต่มันพอจะทำให้เห็นความเชื่อมโยง อย่างน้อยก็ของตัวย่อมหาศาลที่จะบุกรุกเข้ามาในชีวิตคุณ ถ้าอยากจะเข้าไปสนุกในสนามห้องสมุดิจิทัล โปรดสังเกตว่าผมใช้คำว่า เข้าไป ไม่ใช่ เข้ามา เพราะผมเองก็ยังไม่ได้อยู่ในสนามนั้น :p ถ้าพัฒนาโปรแกรมอินเทอร์เน็ตได้ สนใจงานพวกนี้ อาจจะเฉี่ยวไปเฉี่ยวมาหน่อย ลองดู Jobs @Opendream

ถ้าอยากอ่านอีก โดดไป ProjectLib LibraryHub เลย หรือแจม LibCamp (ภาพงาน) ที่เดี๋ยวจะมีอีก ผมไม่รับผิดชอบแล้ว! มึน!

อยากมึนหนัก? เผ่นไปบล็อก iTeau โลด จริง ๆ ก็อาจจะไม่มึนนะ เขาเขียนอธิบายดีน่ะ ยกจอก :)

follow @projectlib @iteau @markpeak @kengggg และ @klaikong

อยากมีร้านสำหรับนั่งอ่านหนังสือ

technorati tags: , , , , , , ,

2009-05-31

[review] Portraits of “the Whiteman”: Linguistic play and cultural symbols among the Western Apache.

ช่วงนี้ไม่ค่อยได้อัปบล็อก เอาของเก่ามาหากินละกัน :p นี่เป็นการบ้านของวิชาหนึ่งในเทอมที่ผ่านมา คือ วิชามานุษยวิทยาภาษา (linguistic anthropology). งานในวิชานี้มีวิจารณ์หนังสือ 2 เล่ม กับรายงานจบเทอมชิ้นหนึ่ง. ด้านล่างนี้เป็นบทวิจารณ์หนังสือเล่มที่สอง คือหนังสือ Portraits of “the Whiteman”: Linguistic play and cultural symbols among the Western Apache โดย Keith Basso. ส่วนเล่มแรกที่วิจารณ์คือ ความเป็นมาของคำสยาม, ไทย, ลาว และขอม และลักษณะทางสังคมของชื่อชนชาติ โดย จิตร ภูมิศักดิ์.

เทอมที่แล้ว เคยวิจารณ์หนังสือที่ Keith Basso เขียน ไปแล้วเล่มหนึ่ง คือ Wisdom Sits in Places: Landscape and Language Among the Western Apache. ทั้งสองเล่มเกี่ยวกับชาวเวสต์เทิร์นอาปาเช่ใน Cibecue เหมือนกัน.


บทวิจารณ์หนังสือ Portraits of “the Whiteman”: Linguistic play and cultural symbols among the Western Apache โดย Keith H. Basso, ภาพประกอบโดย Vincent Craig, บทนำโดย Dell Hymes. เกี่ยวกับการเลียนล้อ (joking imitation) โดยชาวเวสต์เทิร์นอาปาเช่ และมุมมองทางมานุษยวิทยาภาษา.

“นั่งคนเดียวแล้วมองกระจก ที่สะท้อนแสงจันทร์วันเพ็ญ
โดดเดี่ยวกับความเหงา อยู่กับเงาที่พูดไม่เป็น
ฟังเพลงเดิมๆ ที่เรารู้จัก แต่ไม่รู้ความหมายของมัน”

“ไม่รู้จักฉัน ไม่รู้จักเธอ” เพลงดังโดยวงอพาร์ตเมนต์คุณป้า ถูกนำมาร้องในลีลาใหม่เป็นเพลงประกอบภาพยนตร์ “สายลับจับบ้านเล็ก” (และดังกว่าต้นฉบับ).

ด้วยภาพคนขาวในเรื่องตลกของชาวเวสต์เทิร์นอาปาเช่ ที่ถูกนำมาเล่าในภาษาของคนขาว, หนังสือเล่มนี้ปล่อยให้ (อย่างไม่ตลกเท่าต้นฉบับ) ภาพของคนขาวในความคิดของชาวเวสต์เทิร์นอาปาเช่ พาเราไป “รู้จักเธอ เพื่อจะรู้จักฉัน” – ผ่านการมองเข้าไปใน การมองคนขาวของชาวอาปาเช่.

บาสโซกล่าวว่าการตีความการล้อเล่น/เลียนล้อ (joking imitation) ของเขาในหนังสือเล่มนี้นั้น ตั้งอยู่บนสมมติฐานสองอย่างคู่กัน นั่นคือ การล้อเล่นเป็นการเล่นละครรูปแบบหนึ่ง และ การเล่นละครนั้นมีลักษณะที่จะต้องเป็นสิ่งมันอยากเป็นโดยที่มันจะต้องไม่เป็น. การเล่นละครนั้นถูกกำหนดโดยตัวแบบของการ ‘ไม่เล่นละคร’ ซึ่งเป็นที่เข้าใจกันว่า สิ่งที่มันจะสื่อสารนั้น จะไม่สามารถสื่อสารได้เลย หากถูกสื่อสารออกมาในแบบที่ไม่มีลูกเล่น (น. 37). การล้อเล่นในฐานะรูปแบบหนึ่งของการเล่นละคร จึงเป็นการสื่อสารแบบหนึ่ง ที่เพื่อจะส่งสารที่ต้องการ มันจะ ‘ล้อ’ เพียงอย่างเดียวไม่ได้ หากต้อง ‘เล่น’ ด้วย. ด้วยเหตุนี้ เราจึงไม่สามารถที่จะอ่านหรือเข้าใจการล้อเล่นจากเพียงที่เห็นตรงหน้าได้.

เรื่องล้อเล่น (banagozdi’ / jokes) นี้ในวัฒนธรรมเวสต์เทิร์นอาปาเช่ถูกจัดเป็นอีกประเภทหนึ่งของเรื่องตลก (dabagodlohé yalti’ / humorous speech) เลย โดยต่างจากเรื่องขำขัน (dabagodlohé nagoldig’ / funny stories) และคำพูดล้อจิกกัดถากถาง ('enit 'ii / teasings, barbs). บาสโซเสนอว่าลักษณะของเรื่องล้อเล่นที่ต่างจากเรื่องตลกอื่นๆ ก็คือ มันมีลักษณะของการใช้อุปลักษณ์ (metaphor) อยู่ โดยจัดเรื่องล้อเล่นเป็น “เรื่องตลกเชิงอุปลักษณ์” (metaphorical humorous speech) (น. 100-101).

[Review] Portraits of “the Whiteman”: Linguistic play and cultural symbols among the Western Apache. โดย Keith H. Basso ภาพประกอบโดย Vincent Craig. (Cambridge: Cambridge University Press, 1995 [1979]) - ดาวน์โหลด PDF

technorati tags: , , , , ,

2009-05-22

NEED FOOD OR REST! Restaurant City Offline

at one restaurant in Bangkok ...

NEED FOOD OR REST! on Twitpic

Everything is real. Offline is online.

Get NEED FOOD OR REST! balloon: SVG, PNG, PDF

technorati tags: , , ,

2009-05-14

change JRE/JDK default version in Mac OS X to Java SE 6 (1.6)

(Update 2009.05.16: add JAVA_JVM_VERSION setting)

To build Nutch 1.0, you need JDK 1.6. Unless you'll got [javac] class file has wrong version 50.0, should be 49.0 error message.

For a system that has more than one version of JDK installed. It is possible to change to a desired version only at the time you need it (look for j16 script in this thread). I found myself more convenient with just changed the default version.

เปลี่ยนรุ่นปริยายของ Java Runtime และ JDK ใน Mac OS X ให้เป็น Java SE 6 (1.6)

  1. Install Java SE 6 first. ก่อนอื่น ถ้ายังไม่มี Java SE 6 ในเครื่อง ก็ให้ติดตั้งก่อน. โดย Java SE 6 จะอยู่ใน Java for Mac OS X 10.5 Update 2, ดาวน์โหลดได้ที่เว็บไซต์ developer.apple.com/java. หรือจะปรับรุ่นผ่าน Software Update ก็ได้.
  2. Run Java Preferences app to set the default version. หลังจากติดตั้งเรียบร้อยแล้ว ก็เรียกโปรแกรม Java Preferences ขึ้นมา (อยู่ใน /Applications/Utilities/Java/ หรือพิมพ์ชื่อลง spotlight เลยก็ได้) เพื่อเลือกว่าจะใช้รุ่นไหนก่อนหลัง. ใช้วิธี ลาก วาง. เสร็จแล้วก็ออกจากโปรแกรม.
  3. Point CurrentJDK dynamic link to 1.6. ไปตั้ง dynamic link ของไดเรกทอรี CurrentJDK ให้ชี้ไปหารุ่นที่ต้องการด้วย. เช่น ถ้าอยากให้ 1.6 เป็นรุ่นปริยาย ก็ทำแบบนี้ :
    cd /System/Library/Frameworks/JavaVM.framework/Versions
    sudo rm CurrentJDK
    sudo ln -s 1.6 CurrentJDK
    
  4. Set JAVA_JVM_VERSION environment variable. ใน ~/.profile ตั้งค่าตัวแปรสภาพแวดล้อม JAVA_JVM_VERSION เป็นรุ่นที่ต้องการ โดยเพิ่มบรรทัดนี้เข้าไป :
    export JAVA_JVM_VERSION=1.6
    
  5. [optional ไม่ทำก็ได้] Set JAVA_HOME environment variable. ใน ~/.profile อาจจะตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME ไว้ด้วย เพิ่มบรรทัดนี้เข้าไป :
    export JAVA_HOME=/Library/Java/Home
    
  6. [optional แล้วแต่] Set Applet Preferences. ถ้าอยากแก้อะไรกุ๊ก ๆ กิ๊ก ๆ เกี่ยวกับการรันแอปเพล็ต ก็เข้าไปแก้ได้ที่แฟ้ม ~/Library/Caches/Java/deployment.properties. ดูวิธีที่ Java for Mac OS X 10.5 Update 2: Setting Java Applet preferences. เช่น อาจแก้ให้ใช้ font-smoothing/anti-alias กับทุกแอปเพล็ตเลย ก็เพิ่มบรรทัดนี้เข้าไป :
    javaplugin.smoothText=true
    

เสร็จแว้ว

แถม : สำหรับคนที่ใช้ MacPorts, Porticus เป็น GUI ที่สะดวกดี. (ประมาณ apt กับ Synaptic Package Manager, แต่ Porticus โง่กว่านิดนึง)

technorati tags: , ,

2009-04-29

Another Sunny Day animation

I just love this song. It reminds me a long walk over a city I used to spent a good part of my life in. It was raining in the morning, but the sky went very clear after that. Found this animation in YouTube, and love it also. Thanks to this interconnectivity and hypertextuality. — Another Sunny Day, Belle & Sebastian.

my blip.fm: http://blip.fm/bact

technorati tags: , ,

2009-04-28

The Condition of Free Culture

(เงื่อนไขสู่วัฒนธรรมเสรี)

ขอคิดต่อจากพี่เทพ

...

เป็นไปได้ว่า เหตุหนึ่งที่ free culture หรือ วัฒนธรรมเสรี นั้นยังไม่แพร่หลายหรือไปไม่ถึงไหนในบางสังคม ก็เพราะ วัฒนธรรมในสังคมนั้น ๆ ไปกันไม่ได้กับแนวคิด เสรี เป็นพื้นฐานของวัฒนธรรมเสรี

...

เสรี = ไม่ต้องขออนุญาต

คุณสมบัติหลักของ สัญญาอนุญาตแบบเปิด (open licenses) ก็คือ การผู้นำไปใช้ไม่ต้องขออนุญาตผู้ถือครองลิขสิทธิ์

เพียงผู้นำไปใช้ ตกลงยินดีที่จะทำตามเงื่อนไข ที่ทางผู้ถือครองลิขสิทธิ์ประกาศเอาไว้แล้ว-อย่างชัดแจ้ง-ต่อสาธารณะ เขาก็มีสิทธิจะใช้งานนั้นในทันที

สิ่งนี้แปลว่า ถ้าคุณทำตามกติกาเดียวกัน ข้อตกลงเดียวกัน คุณก็จะได้รับการปฏิบัติเหมือน ๆ กัน

แต่สิ่งง่าย ๆ แบบนั้น ก็อาจจะเป็นเรื่องลำบากในสังคมหลายมาตรฐาน ที่กติกาเดียวกันก็มักจะให้ผลกับคนกลุ่มต่าง ๆ ต่างกัน

...

เป็นไปได้เช่นกันว่า เหตุหนึ่งที่วัฒนธรรมเสรี นั้นถูกเข้าใจเพี้ยน ๆ ไป เช่นว่า เสรี ก็คือ ให้ใช้ฟรี แค่ขออนุญาตกันก็พอ นั้นก็เพราะ ความมี ความเป็น authority เป็นเรื่องสำคัญในสังคมนั้น หรือ สังคมนั้นโน้มเอียงไปทางสังคมอุปถัมภ์

ความจำเป็นต้องอนุญาต นั้นแปลว่า จะยังต้องมีฝ่ายหนึ่งฝ่ายใด มีอำนาจมากกว่าอีกฝ่ายเสมอ นอกจากนี้มันยังมีแง่มุมของการรวมศูนย์ (centralized) สู่ผู้ให้อนุญาต

ผู้ให้อนุญาตนี้เอง ที่จะเป็นผู้มีสิทธิ์ขาดตัดสินว่า อะไรทำได้ อะไรทำไม่ได้ — ซึ่งสิ่งนี้เช่นกัน ก็ไปกันไม่ได้กับเรื่อง ถ้าทำตามกติกาเดียวกัน ก็ควรรับผลเดียวกันเสมอกัน

เพราะความมี ความเป็น authority ที่ใหญ่กว่ากติกานั้น พูดง่าย ๆ ก็คือสิ่งที่เรียกว่า ฉันคือกฎ

อยากจะอนุญาตคนนี้ แต่ไม่อนุญาตคนนั้น มีอะไรไหม ?

...

เสรี != (ไม่เท่ากับ) ไม่ต้องเสียเงิน

ดังที่ได้กล่าวไป การที่ผู้ใช้นำงานในสัญญาอนุญาตแบบเปิดไปใช้ได้โดยไม่เสียค่าใช้จ่าย ก็เพราะเขาได้ทำตามกติกาที่ทั้งตัวเขาเองและผู้ถือครองลิขสิทธิ์ต่างก็พอใจ

สิ่งนี้คือการแลกเปลี่ยนบนฐานของความพอใจและสมัครใจของทั้งสองฝ่าย — เราอาจเรียกสิ่งนี้ว่าความเกื้อกูลระหว่างกันได้ แต่ที่แน่นอนคือ มันไม่ใช่ความเมตตา ไม่ใช่การทำบุญ ไม่ใช่การให้ทาน และไม่ใช่เรื่องบุญคุณ

(ทัศนคติของ องค์กรที่ บริจาค โค้ดเป็นโอเพนซอร์สแก่สาธารณะและให้ชุมชนมาร่วมทำงานด้วย กับ องค์กรที่ ส่งต่อ โค้ดเป็นโอเพนซอร์สแก่สาธารณะและเข้าไปเป็นส่วนหนึ่งของชุมชนในการทำงาน จึงเป็นสองทัศนคติที่แตกต่างกันอย่างมาก)

ความสัมพันธ์ระหว่าง ผู้นำงานไปใช้และผู้ให้ใช้งาน ในวัฒนธรรมเสรี จึงเป็นไปในลักษณะเท่าเทียมเสมอกัน นั่นคือ ต่างก็เป็น peer กัน แลกเปลี่ยนกันในฐานะความสัมพันธ์ที่เท่าเทียมกัน

ซึ่งความเป็น peer ที่เสมอกันนี้เอง ที่ก็ไปกันไม่ได้อีก กับเรื่อง authority หรือความสัมพันธ์แบบมีระดับ (client/server, master/slave, ...)

ความต้องการสร้างบุญคุณบารมี และ อำนาจในการอนุญาต (อย่างรู้ตัวหรือไม่ก็ตาม) จึงอาจจะเป็นอีกเหตุ ที่แนวคิดเสรี ใน วัฒนธรรมเสรี อาจจะไปกันไม่ได้กับ สังคมอุปถัมภ์ และ สังคมลำดับชั้น

...

เช่นนี้แล้ว ในทางหนึ่ง ขบวนการวัฒนธรรมเสรี (free culture movement) จึงอาจจะจำเป็นอยู่เอง ที่นอกเหนือจากความพยายามในการปฏิรูประบบทรัพย์สินทางปัญญาให้มีความเป็นธรรมเสมอภาคขึ้นกว่าเดิมหรือสร้างทางเลือกใหม่ เช่น เนื้อหาแบบเปิดต่าง ๆ แล้ว ก็อาจต้องเข้าร่วมกับการปฏิรูปสังคมโดยรวม เพื่อผลักดันสภาพของสังคม ให้เอื้อกับ แนวคิด เสรี ด้วย

เพราะตัววัฒนธรรมเสรีนั้นไม่ได้อยู่อย่างลอย ๆ หากสัมพันธ์โต้ตอบต่อรองกับวัฒนธรรมอื่น ๆ ในสังคม การเกิดและดำรงอยู่ของวัฒนธรรมเสรีจึงจำเป็นต้องมีสภาพที่เอื้อให้มันทำเช่นนั้นได้

...

โลกอีกแบบนั้นเป็นไปได้ แค่เปิดฝา แล้วก็แฮ็กมัน

technorati tags: , , ,

NLTK corpus readers for NECTEC BEST and ORCHID corpora

ความเดิมจากตอนที่แล้ว ทดลองสร้าง corpus reader ใน NLTK

ตอนนี้แก้การ encode ให้ใช้ได้กับ nltk.Text() แล้ว (แทนที่จะเก็บเป็น unicode ก็เก็บเป็น utf-8 encoded str แทน)

พร้อมกับเพิ่มตัวอ่านสำหรับคลังข้อความ BEST และ ORCHID ด้วย

ตัวอ่านคลัง BEST ในรุ่น 0.3 นี้ เรียกดูเป็นหมวดได้ (ข่าว วรรณกรรม สารานุกรม บทความ) เรียกดูข้อมูลกำกับขอบเขตคำ (word boundaries) ได้ แต่ยังไม่รองรับ <NE>named-entities</NE> กับ <AB>คำย่อ</AB> เนื่องจาก BEST ไม่มีข้อมูลขอบเขตประโยค ตัวอ่านคลังจะสร้างขึ้นเอง โดยสมมติ \n เป็นขอบเขตประโยค

ส่วนตัวอ่านคลัง ORCHID ในรุ่น 0.3 นี้ เรียกดูข้อมูลกำกับขอบเขตคำและชนิดคำ (Part-of-Speech) ได้ แต่ยังไม่รองรับขอบเขตย่อหน้า และยังเรียกดูเป็นรายเอกสารไม่ได้ (รุ่นนี้ทำงานกับคลัง ORCHID แบบที่ถูกเอา document-related metadata ออกไป)

ดาวน์โหลด & ติดตั้ง

แพ็คเกจ rotic รุ่น 0.3 ซอร์สโค้ดเผยแพร่ด้วยสัญญาอนุญาต GNU GPLv2 ตาม NLTK - ดาวน์โหลด rotic-0.3.tar.gz

วิธีติดตั้ง อ่าน README.TXT และ INSTALL.TXT - อย่าลืมดาวน์โหลดคลังข้อความมาติดตั้งด้วย รายละเอียดและสัญญาอนุญาตของข้อมูลแต่ละชุด อยู่ใน CORPORA.TXT

มีคำแนะนำอะไร เขียนมาบอกกันได้ครับ อยากจะลองทำให้มันเอาไปใช้ในการเรียนการสอนได้ - ไม่เฉพาะสำหรับนักเรียนคอมพิวเตอร์เท่านั้น แต่สำหรับนักเรียนภาษาศาสตร์ ฯลฯ ด้วย

ตอนนี้ความเร็วไม่ค่อยดีเท่าไหร่ โดยเฉพาะการโหลดตัว ORCHID ซึ่งใหญ่มาก ส่วนหนึ่งเป็นเพราะโค้ดยังซ้ำซ้อนอยู่หลายจุด เช่นตรงการแปลง utf-8 ที่น่าจะทำได้ตั้งแต่ระดับแรก ๆ ที่อ่านเข้ามาเลย ไม่ใช่มาแปลงเอาตอนหลัง-ต้องวนลูปอีกหนึ่งครั้งแบบขณะนี้ โค้ดยัง refactor ได้อีกเยอะ ใครคล่อง Python ก็ช่วยดูหน่อยนะครับ ผมแค่พอเขียนไถ ๆ ได้ ขอบคุณครับ :)

ตัวอย่างจาก example.py

1. พิมพ์ข้อความมั่ว ๆ ขึ้นมาจากตัวแบบ n-gram ที่สร้างจากคำในคลัง foosci :


foosci_text = nltk.Text(foosci.words())
foosci_text.generate()

ผลลัพธ์ :

... ซึ่ง ทฤษฎี สรุป ความรู้ ของ เรา เอา ไส้เดือน ไป ปล่อย ใน พื้นที่ ๆ มี ความ สงสัย ระหว่าง ความ เชื่อ เรื่อง มิติ ใหม่ นี้ ...

2. พิมพ์ คำ/ชนิดคำ จาก 5 ประโยค แรกของคลัง ORCHID
โปรดสังเกตว่า เราใช้ชุดชนิดคำ (POS/tagset) แบบง่าย สามารถสลับชุดชนิดคำได้โดยสลับค่า simplify_tags :


for sent in orchid.tagged_sents(simplify_tags=True)[0:5]:
    print "[",
    for (word, tag) in sent:
        print word + "/" + tag,
    print "]"

ผลลัพธ์ :

[ การ/FIX ประชุม/V ทาง/N วิชาการ/N /PUNC ครั้ง/C ที่_1/DETN ]
[ โครงการวิจัยและพัฒนา/N อิเล็กทรอนิกส์/N และ/CONJ คอมพิวเตอร์/N ]
[ ปีงบประมาณ/N /PUNC 2531/N ]
[ เล่ม/C /PUNC 1/DETN ]
[ ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ/N ]

3. หาค่าการกระจายของสองคำ การ และ ความ ใน 4 หมวดของคลัง BEST
โปรดสังเกตว่า ตรงคำที่เราจะป้อนเข้าไปให้ฟังก์ชั่นต่าง ๆ ของ NLTK เราจะแปลงมันเป็น utf-8 encoded str ก่อน :


cfd = nltk.ConditionalFreqDist(
        (genre, word)
        for genre in best.categories()
        for word in best.words(categories=genre))

genres = ['news', 'encyclopedia', 'novel', 'article']
prefixs = [w.encode("utf-8") for w in [u'การ', u'ความ']]
cfd.tabulate(conditions=genres, samples=prefixs)

ผลลัพธ์ :

             การ ความ
        news 29567 11186
encyclopedia 25477 8541
       novel 4258 9097
     article 33200 16651

เล่นต่อเอง จากตัวอย่างในหนังสือ NLTK

เดี๋ยวอาจจะให้น้องฝึกงานที่โอเพ่นดรีมเอาไปทำต่อ เช่นทำให้มันใช้ AB, NE หรือขอบเขตประโยค/ย่อหน้าได้ .. เห็นนั่งเล่นเกมมาหลายวันละ :p

technorati tags: , , ,

2009-04-26

Anti-censorship website got blocked by Thai university and ISPs

Reports from Thai netizens to Thai Netizen Network's mailing list showing yet another attempt from Thai authorities to shut down any media that's not on their side. Unsurprisingly (and that's sad to say so), the time comes to Freedom Against Censorship Thailand (FACT). Two commercial ISPs and one university have been reported that they blocked the anti-censorship blog.

It was found on Saturday 2009.04.25. Users who using Internet service of TOT, Buddy Broadband or Kasetsart University will not be able to access http://facthai.wordpress.com/.

Ministry of ICT recently admits they blocked nearly 9,000 urls, of which 6,200 are concerned as a treat to national security. Thai Netizen Network website reports the 66 Red-Shirt/Red-Shirted urls that MICT sent to every ISPs and major websites, urging them to entirely blocked the urls. Noted that this list does not included FACT's url, but it got blocked anyway. With enough ignorance, the MICT block list also includes http://ning.com/ (a social network service), http://www.cbox.ws/ (a chat box service), and http://www.no-ip.org/ (a dynamic DNS service) — common services used by many Thai netizens and bloggers, orange or pink, watching AF TV or not.

The authorities probably expected that every Thai should sacrifices not just their rights and freedom, but also conveniences in everyday life in this time of Media War.

Fortunate enough, some ISPs can think by and for themselves (+their customers). While blocking almost every other urls in the MICT list, they don't touch ning.com and no-ip.org. OK, stupid enough, CSLoxinfo still blocked mashable.com, a (Red-Shirt, huh?) IT news site.

I see necessity in this very situation to repeat it over that: Government's Security IS NOT EQUAL TO National Security.

ความมั่นคงของรัฐบาล ไม่เท่ากับ ความมั่นคงของรัฐ

Summary report on http://facthai.wordpress.com/ blockage:
Can't access (BAD) from (at least) 3 ISPs: TOT, Buddy Broadband, Kasetsart University [source]

  • TOT - BAD (2009.04.25 13:07)
  • Maxnet - OK (2009.04.25 13:48)
  • Kasetsart - BAD (2009.04.25 14:32)
  • CAT HiNet - OK (2009.04.25 16:04)
  • Comcast (US) - OK (2009.04.25 16:36)
  • TOT - BAD (2009.04.25 17:15)
  • TOT - BAD (2009.04.25 17:33)
  • True - OK (2009.04.25 17:40)
  • TOT - BAD (2009.04.25 21:49)
  • True - OK (2009.04.25 23:14)
  • Buddy - BAD (2009.04.26 02:16)
  • CSLoxinfo - OK (2009.04.26 11:26)

technorati tags: , ,

2009-04-24

playing around Thai blog corpus with NLTK

อยากจะลองเล่น NLTK กับข้อมูลภาษาไทยดู คิดไปคิดมา เอาข้อมูลจาก foosci.com มาลองดูละกัน เขาเปิดให้ใช้ เป็น ครีเอทีฟคอมมอนส์ แสดงที่มา-อนุญาตแบบเดียวกัน (CC by-sa)

แต่ไม่อยากไปดึงมาเอง ขี้เกียจ เห็นว่าโครงการโรตี (อัลฟ่า) โดย Opendream ดูดบล็อกไทยจำนวนหนึ่งมาเก็บไว้ได้ระยะหนึ่งแล้ว เพื่อใช้ในการแนะนำลิงก์ (ดูตัวอย่างที่ keng.ws ที่ท้ายแต่ละโพสต์) ก็เลยเอาจากตรงนั้นมาใช้ละกัน

ข้อมูลที่มีเป็น XML ที่ dump มาจาก MySQL เราก็เขียนสคริปต์ก๊อก ๆ แก๊ก ๆ ดึงเฉพาะที่อยากได้ออกมา ด้วย xml.etree.cElementTree (ตอนแรกใช้ ElementTree แตน ๆ แต่อืดเกิน เนื่องจากแฟ้มมันใหญ่) เอา HTML tags ออกด้วย Beautiful Soup แล้วตัดคำด้วย python-libthai ตัดประโยคแบบถึก ๆ ด้วย .split('\n') จะได้ข้อมูลออกมาหน้าตาประมาณนี้ (จะเห็นว่าข้อมูลมันไม่ได้สมบูรณ์มาก มีแท็ก HTML โผล่มาด้วย-อันนี้เป็นที่ข้อมูลป้อนเข้าที่ dump มา) :


<?xml version="1.0" encoding="utf-8"?>
<roti>
  <entry id="4947" url="http://www.foosci.com/node/401" ...>
    <tags> <tag>LHC</tag> <tag>quantum physics</tag> ... </tags>
    <title> <w>บิดา</w> <w>ของ</w> <w>อนุภาค</w> ... </title>
    <content>
      <s> <w>p</w> <w>นัก</w> <w>วิทยาศาสตร์</w> ... </s>
      <s> <w>pcenter</w> <w space="1"> </w> <w>ภาพ</w> ... </s>
      ...
    </content>
  </entry>
  <entry>
    ...
</roti>

ใน w คือ คำ, ใน s คือ ประโยค

ดาวน์โหลดข้อมูล : foosci-20090424.tar.bz2 (สัญญาอนุญาต CC by-sa เช่นเดียวกับเนื้อหาใน foosci.com)
ข้างในจะมีสองแฟ้ม foosci00.xml และ foosci01.xml ให้ก๊อปปี้ไปใส่ในไดเรกทอรีข้อมูลของ NLTK (NLTK_DATA) $NLTK_DATA/corpora/rotibc ตัวโมดูลที่จะพูดถึงต่อจากนี้จะวิ่งมาหาที่ตำแหน่งนี้

ได้ข้อมูลมาแล้ว จะเอาเข้าไปใช้ใน NLTK ยังไง ? ก็ต้องเขียนตัว corpus reader ขึ้นมาก่อน ซึ่งกรณนี้ เราจะทำต่อมาจาก XMLCorpusReader (เรียกว่า inherit ไหม?) โดยไอเดียไม่มีอะไรมาก ก็ implement ตัวฟังก์ชั่น .words() เพื่อส่งกลับรายการคำ และฟังก์ชั่น .sents() เพื่อส่งกลับรายการประโยค โดยดูตัวอย่างจาก BNCCorpusReader

ที่ต้องทำเพิ่มเติมก็คือ สร้างแฟ้ม __init__.py ใส่ไว้ใน package เพื่อที่ว่าตอนโหลด มันจะได้โหลดเอาตัวข้อมูลขึ้นมาให้เราอัตโนมัติเลย (ซึ่งไม่ต้องกลัวอึด เพราะว่าโหลดแบบ lazy คือยังไม่ได้โหลดข้อมูลจริง ๆ จนกว่าจะใช้)

ตอนทำ __init__.py นี้ ทำให้รู้ว่า ทุกไดเรกทอรีที่เราจะใส่โมดูลอะไรลงไป จะต้องมีแฟ้มนี้ ไม่งั้นตอน build มันจะไม่นับไดเรกทอรีนั้นเป็น package จะข้ามไป เพราะงั้นถึงไม่ได้จะโหลดจะทำอะไร ก็ต้องใส่แฟ้มว่าง ๆ ไว้ (ดูเอกสาร Python Tutorial - Modules)

ใน __init__.py ไม่มีอะไรมาก แค่โหลดข้อมูลเฉย ๆ :
foosci = LazyCorpusLoader('rotibc', RotiCorpusReader, r'foosci\d+\.xml')

ดาวน์โหลดแพคเกจ roti.corpus : rotibc-0.1.tar.gz
แตกออกมาแล้ว ก็ลงด้วยคำสั่ง :
sudo python setup.py install
(ดูวิธีสร้าง setup.py มาจากเอกสาร Distutils - Creating a Source Distribution)

โอเค ครบละ ข้อมูล โปรแกรมอ่าน คราวนี้มาเล่นกัน ลองใน interpreter shell ของ Python ก็ได้


>>> from roti.corpus import foosci
>>> foosci.fileids() #แสดงรายชื่อแฟ้มในคลังข้อความ
['foosci00.xml', 'foosci01.xml']
>>> foosci.words() #แสดงรายการคำ
['p', u'\u0e19\u0e31\u0e01', ...]
>>> for w in foosci.words()[0:5]: #พิมพ์คำจากรายการ ตำแหน่ง 0-5
...     print w,
... 
p นัก วิทยาศาสตร์ อังกฤษ ที่ 
>>>
>>> foosci.sents() #แสดงรายการประโยค
[['p', u'\u0e19\u0e31\u0e01', ...],
['pcenterimg', ' ', 'src=http://', ...], ...]
>>>

จะเห็นว่า เราพอจะเล่นอะไรกับมันได้ละ ถ้าจะเล่นมากกว่านี้ ลองดูตัวอย่างที่ Getting Started (NLTK)

ตัวอย่างหนึ่งจาก NLTK Book บทที่ 2 Accessing Text Corpora and Lexical Resources เขาลองเล่นกับ conditional frequency distribution เอามาสร้างประโยคมั่ว ๆ เล่น จากโมเดลไบแกรม ด้วยโค้ดด้านล่างนี้ :


def generate_model(cfdist, word, num=15):
    for i in range(num):
        print word,
        word = cfdist[word].max()

words = foosci.words()
bigrams = nltk.bigrams(words)
cfd = nltk.ConditionalFreqDist(bigrams)

ลองใส่คำอะไรสักคำให้มันดู มันจะสร้างประโยคมาให้


>>> generate_model(cfd, u'คอมพิวเตอร์')
คอมพิวเตอร์ ที่ มี ความ เสี่ยง มะเร็ง เต้า นม   href=http:// www. physorg. com/ ~r/ foosci/

การสร้างประโยคนั้น generate_model() ใช้วิธีเลือกเอาคำที่น่าจะเกิดต่อจากคำข้างหน้ามากที่สุด มาเรียงต่อกัน

ลองเล่นต่ออีกนิดหน่อยกับติวอันนี้ Working with corpora: Character Ngrams

ถ้ามีคลังข้อความที่น่ารัก ๆ กว่านี้ ก็น่าจะใช้ NLTK นี้ไปใช้เรียนสอน NLP หรือภาษาศาสตร์คลังข้อมูลง่าย ๆ ได้

ปัญหาอย่างนึงที่เจอตอนนี้คือ nltk.text.Text() ใช้กับ unicode ไม่ได้ คือมันจะพยายามแปลงข้อความไปเป็น ascii ซึ่งแปลงไม่ได้ แล้วก็จะตาย nltk.text.Text() นี่มีฟังก์ชั่นน่าใช้สำหรับการเรียนรู้เรื่องภาษาศาสตร์เยอะพอดู เช่น .concordance() .collocations() .similar()

<อัปเดต 2009.04.25> ใช้กับ nltk.Text() ได้แล้ว (แก้ตามคำแนะนำจากเมลกลุ่ม nltk-users) โดยต้องให้คำใน list เป็น str ("") ที่ encode ด้วย utf-8 แทนที่จะใส่เป็นสตริงแบบ unicode (u"") ทำได้โดยแก้สองฟังก์ชั่น _elt_to_words() และ _elt_to_sents() ในแฟ้ม roti/corpus/rotibc.py ตรง .append(w.text) ให้เป็น.append(w.text.encode("utf-8", "replace")) เดี๋ยวจะปรับตัวแพคเกจใหม่ </อัปเดต>

ลองเล่นดูครับ เอาไปโมต่อตามสบาย โค้ดทั้งหมดเป็น public domain

ใช้ NLTK แล้วพบปัญหา คุยกับผู้ใช้รายอื่น ๆ ได้ที่เมลกลุ่ม nltk-users หรือถ้าอยากคุยกับคนไทย ลองกลุ่ม THLTA


แถม : Open License และคลังข้อมูลภาษา

ในงาน NAC 2009 โดยสวทช.ที่ผ่านมา ได้มีโอกาสแลกเปลี่ยนประเด็น open content, open license และ คลังข้อมูลภาษา กับคนในวงการ NLP จำนวนหนึ่ง ซึ่งก็มีความคิดเห็นหลาย ๆ อย่าง หลาย ๆ มุมก้นไป

เกือบทุกคนเห็นด้วยว่า เป็นเรื่องสำคัญที่ควรจะมีอะไรที่มันแชร์กันได้ ที่มัน open แต่ความหมายของคำว่า open สำหรับแต่ละคนก็ดูจะไม่เท่ากัน บางคนบอกว่า คลังอันนั้นอันนี้ฟรี ตัวนั้นตัวนี้โอเพ่นซอร์ส แต่พอไปดูเอาจริง ๆ ในรายละเอียด ก็พบว่า จำเป็นต้องลงทะเบียนก่อนบ้างหรือไม่ได้อัปเดตนานแล้วบ้าง (พจนานุกรม Lexitron) หรือลิงก์ดาวน์โหลดหายไปบ้าง (ORCHID Corpus - ดาวน์โหลดได้ที่ backup site) หรือก่อนหน้านี้เรื่องของฟอนต์หลาย ๆ ตัว ที่เอามาใช้ได้ฟรี แต่ไม่รู้ว่าจะโมได้ไหม redistribute ได้ไหม

ความเห็นของผมก็คือ จะเปิดหรือจะปิด อย่างไรก็ได้ เป็นสิทธิของเจ้าของข้อมูลที่เขาลงแรงลงเวลาไป แต่ถ้าจะบอกว่าเปิด ก็ขอให้บอกให้ชัดเจนหน่อย ว่าในเงื่อนไขอะไร แล้วจะเอามาใช้จริง ๆ ได้ยังไง การบอกว่า เปิด เฉย ๆ โดยไม่ได้ให้รายละเอียดอะไรเลย ในทางปฏิบัติก็แทบจะเหมือนการไม่เปิด หน้า การแลกเปลี่ยนทรัพยากรและเครื่องมือ ที่ THLTA ก็อาจจะเป็นความพยายามหนึ่งที่จะทำให้เรื่องพวกนี้เคลียร์

สิ่งที่ผมคิดว่าน่าสนใจ และเป็นคุณสมบัติสำคัญของ open licenses ทั้งหลาย ไม่ว่าจะเป็น copyleft, GNU หรือ Creative Commons ก็คือ การไม่ต้องขออนุญาต ผมคิดว่าการไม่ต้องขออนุญาตนี้ทำให้ ข้อมูล โค้ด ไอเดีย ต่าง ๆ มันไหลเวียนได้อย่างอิสระ-ทันที ใครอยากจะเล่นอะไรก็เอา เต็มที่ ตามเงื่อนไขที่ประกาศไว้ชัดเจนล่วงหน้า ไม่ต้องรอไปรอมา ไม่ต้องตกอยู่ในภาวะไม่แน่ใจ

ซึ่งจริง ๆ แล้วเรื่องของความชัดเจนนี้ แม้จะเป็น closed content, closed source หรืออะไรก็ตาม ก็สามารถจะชัดเจนเรื่องนี้ได้ เพียงประกาศให้ชัดเจน — ไม่ใช่แค่บอกเฉย ๆ ว่า เปิด แล้วก็ทิ้งให้งง ให้เดาใจกันเล่น ๆ ว่า ตกลงจะเปิดแบบไหน เปิดยังไง

technorati tags: , , ,



“ฉันไม่เห็นด้วยกับสิ่งที่คุณพูด แต่ฉันจะปกป้องสิทธิ์ในการพูดของคุณด้วยชีวิต”

“คิดเพื่อตัวคุณเอง
และปล่อยให้คนอื่นได้รับอภิสิทธิ์ในการทำเช่นนั้นด้วย”

“พ่อแม่ไม่ได้ให้โลกนี้เป็นมรดกแก่เรา แต่เรายืมมาจากลูกหลานของเรา”

“เอกราช ปลอดภัย เศรษฐกิจ เสมอภาค เสรีภาพ การศึกษา”


Join the Blue Ribbon Online Free Speech Campaign
สนับสนุนเสรีภาพในการแสดงออก

เราทำอะไรได้บ้าง?
Creative Commons License
bact' is a name
by Arthit Suriyawongkul
is licensed under a
Creative Commons
Attribution 3.0 License
.
สัญญาอนุญาตสร้างสรรค์ร่วมกัน
ครีเอทีฟคอมมอนส์