Newline in GATE

ใน GATE, ถ้าเราอยากรู้ว่า เอกสารที่เรากำลังทำงานอยู่เนี่ย มันใช้ อักขระขึ้นบรรทัดใหม่ (newline) แบบไหน ก็เรียกดูได้จากฟีเจอร์ที่ชื่อ “docNewLineType”
โดย docNewLineType นี้ เป็น String มีค่าได้ 4 อย่าง: { “CR”, “LF”, “CRLF”, “LFCR” } read more

Using dictionary with ICU4J BreakIterator

การสร้างและเรียกใข้พจนานุกรมสำหรับตัดคำ ใน ICU4J

จดวิธีการตัดคำด้วย DictionaryBasedBreakIterator ของ ICU4J และการสร้างพจนานุกรมตัดคำเอง

(เฮ้! นี่คือ “จาวา” ขวัญอ่อน? รักสวยรักงาม? .. ระวังถูกงับมือ! เราเตือนคุณแล้วนะ :P)

การสร้างไฟล์พจนานุกรมสำหรับตัดคำ

ใช้โปรแกรม BuildDictionaryFile สร้างไฟล์พจนานุกรม, วิธีใช้คือ:

BuildDictionaryFile input [encoding] [output] [list]
  • input = ข้อมูลเข้า ไฟล์พจนานุกรม เป็นไฟล์ชนิดข้อความ หนึ่งคำต่อหนึ่งบรรทัด
  • encoding = รหัสตัวอักษรของไฟล์พจนานุกรม เช่น TIS-620, UTF-8 (ถ้าไม่ใส่จะใช้ค่าปริยาย คือ UTF-8)
  • output = ข้อมูลออก ผลลัพธ์ เป็นไฟล์ชนิดไบนารี (จะใช้เป็นอินพุตของคอนสตรัคเตอร์ของคลาส DictionaryBasedBreakIterator ต่อไป)
  • list = ข้อมูลออก รายการคำที่ถูกบรรจุในพจนานุกรม (output) เป็นไฟล์ชนิดข้อความ หนึ่งคำต่อหนึ่งบรรทัด ใช้รหัสตัวอักษร UTF-8 (ไม่ใส่ก็ได้)

เช่น ถ้าไฟล์ข้อความที่เราจะแปลงเป็นพจนานุกรมตัดคำ ชื่อ tdict.txt ก็สั่ง:

# java com.ibm.icu.dev.tools.rbbi.BuildDictionaryFile tdict.txt \
    TIS-620 tdict.dic tdict-list.txt

รอซักพัก เราก็จะได้ไฟล์ tdict.dic ไปใช้ละ

การใช้โปรแกรม BuildDictionaryFile จำเป็นต้องมีไลบรารี ICU4J อยู่ใน classpath (ใช้ออปชั่น -cp ก็ได้)

ซอร์สโค้ด BuildDictionaryFile.java นั้น ไม่ได้เผยแพร่ออกมาพร้อมกับตัว ICU4J แต่หาดาวน์โหลดได้ในอินเทอร์เน็ต (update 2011.05.13: ไฟล์ BuildDictionaryFile.java ที่ ICT Trac) (ค้นอินเทอร์เน็ตด้วยคำว่า “BuildDictionaryFile.java” แล้วพยายามหาไฟล์รุ่นที่ใหม่ที่สุด ตัวที่ผมใช้อยู่นี้ อยู่ในแพคเกจ com.ibm.icu.dev.tools.rbbi ถ้ารุ่นเก่ากว่านี้มันจะอยู่ในแพคเกจ com.ibm.tools.rbbi คิดว่าเค้ามีการปรับแพคเกจใหม่นิดหน่อย)

การคอมไพล์ ต้องมีไลบรารี ICU4J อยู่ใน classpath (ใช้คลาส com.ibm.icu.util.CompactByteArray, com.ibm.icu.text.UnicodeSet และ com.ibm.icu.impl.Utility)

การใช้ไฟล์พจนานุกรมในการตัดคำ

คลาสที่เราใช้ในการตัดคำด้วยพจนานุกรม ใน ICU4J คือ คลาส DictionaryBasedBreakIterator ในแพคเกจ com.ibm.icu.text
(DictionaryBasedIterator นี้ เป็นซับคลาสของคลาส RuleBasedBreakIterator ซึ่งเป็นอินพลีเมนเตชันของแอบสแตรคคลาส BreakIterator อีกที)

คอนสตรัคเตอร์ของ DictionaryBasedBreakIterator ที่เราจะใช้ ต้องการพารามิเตอร์สองตัว
คือ กฎการตัดคำ (String) และ พจนานุกรม (InputStream)

ผมไม่รู้จะหากฎมาจากไหนดี ก็เลยไปเอามาจากที่เค้ามีอยู่แล้วละกัน อย่างนี้

String rules = (RuleBasedBreakIterator.getWordInstance(new Locale ("th"))).toString();

คำสั่งนี้ จะไปเรียกเอาตัวตัดคำด้วยกฎ (สำหรับคำภาษาไทย) มาจากคลาส RuleBasedBreakIterator
ซึ่งจริง ๆ ผมก็ไม่รู้แน่ ว่ามันมีอยู่หรือไม่ อย่างไรก็ตาม หากตัว RuleBasedBreakIterator ไม่มีตัวตัดคำสำหรับโลแคล (locale) ใด มันก็จะส่งคืนตัวตัดคำปริยาย (มาตรฐาน) มาให้เรา เอาเป็นว่าไม่ต้องห่วงละกัน (ยังนึกวิธีดี ๆ ไม่ออกน่ะ :P)
Update: 2006.12.28 พี่ป๊อกไขขาน สร้างความกระจ่างเรื่องที่ว่า กฎมันมาจากไหน ดูได้ที่ เสริม ICU4J ในนั้นยังแสดงวิธีการดึงกฎจากไฟล์กฎอีกด้วย (แต่จะสร้างไฟล์กฎยังไงหว่า? .. ต้องศึกษากันต่อไป)

หลังจากได้ตัวตัดคำด้วยกฎมาแล้ว เราก็ดึงกฎการตัดออกมาซะ ด้วยเมทธอด toString()
(ง่าย ๆ อย่างนี้แหละ .. แต่หาอยู่นาน – -“)

จากนั้น เราก็เตรียมพจนานุกรม ก็ไม่มีอะไรมาก แค่ชี้ไปหาไฟล์ที่เราสร้างมาจากโปรแกรม BuildDictionaryFile ตะกี้

InputStream dict = new FileInputStream("tdict.dic");

เท่านี้ล่ะ

จากนั้นเราก็สามารถสร้างอินสแตนซ์ของ DictionaryBasedBreakIterator ได้แล้ว

BreakIterator iter = DictionaryBasedBreakIterator(rules, dict);

การใช้งานก็เหมือนกับ BreakIterator ปกติ (ซึ่งก็คล้ายกับ iterator ทั่วไป)
โดยเริ่มแรกเราต้องส่งข้อความที่จะตัดไปให้ตัว BreakIterator เสียก่อน ด้วยเมธทอด setText()
จากนั้นเราก็ให้ iterator มันวนไปเรื่อย ๆ ด้วยเมทธอด next() จนกว่าจะจบข้อความ

โค้ดด้านล่างจะทำการพิมพ์คำที่ตัดได้ ตามด้วยตัวอักษร “|” ทีละคำ ๆ วนไปจนกว่าจะจบข้อความ

String text = "ข้อความที่จะตัดในนี้"; iter.setText(text); // iter คือ BreakIterator มาจากข้างบน int start = iter.first(); for (int end = iter.next(); end != BreakIterator.DONE; start = end, end = iter.next()) { System.out.print(text.substring(start,end)); System.out.print("|"); } read more

Statistical Machine Translation lecture at Kasetsart University

บรรยาย: การแปลภาษาด้วยเครื่องด้วยวิธีทางสถิติ: อะไรที่เป็นไปได้ในวันนี้?

โดย ฟิลิปป์ เคิห์น มหาวิทยาลัยเอดินบะระ สก็อตแลนด์

วันจันทร์ที่ 18 ธันวาคม 2549 – 9:30-11:30 น.

ห้อง 204 ตึกวิศวกรรมคอมพิวเตอร์ (ตึก 15) มหาวิทยาลัยเกษตรศาสตร์ บางเขน read more

Google n-gram are belong to YOU

กูเกิล แจกโมเดล n-gram
ซึ่้งกูเกิลใช้ในงานวิจัยต่าง ๆ เช่น การแปลภาษาอัตโนมัติ การแก้ตัวสะกดอัตโนมัติ การสกัดสารสนเทศ ฯลฯ
โดยโมเดลนี้สร้างจากคำมากกว่า 1 ล้านล้านคำ โดยจะแจกจ่ายผ่าน LDC ในรูปของ DVD 6 แผ่น read more

information & language blogs

  • Stat. Graphics & Data Vis. — statistical graphics, data visualization, data analysis, user interfaces
  • Data Mining — data mining, data visualization, data analysis
  • Natural Language Processing — NLP, computational linguistics, machine learning
  • Information Retrieval — IR, machine learning, NLP
  • read more

    Topic Modeling

    ZDNet: Text mining the New York Times

    UCI: UCI researchers ‘text mine’ the New York Times, demonstrating evolution of potent new technology

    UCI researchers performed their experiment using a statistical topic model based on a text model developed at UC Berkeley in 2003. Thanks to an improved solution technique proposed by Mark Steyvers and a research partner, this model has advanced from academic use to something that is now widely used in the research community. Topic modeling looks for patterns of words that tend to occur together in documents, then automatically categorizes those words into topics. Older text-mining techniques require the user to come up with an appropriate set of topic categories and manually find hundreds to thousands of example documents for each category. This human-intensive process is called supervised learning. In contrast, topic modeling, a type of unsupervised learning, doesn’t need suggestions for an appropriate set of topic categories or human-found example documents. This makes retrieving information easier and quicker. read more

    language translation Questionaire

    ช่วย ๆ กันครับ 🙂

    แบบสอบถามการใช้โปรแกรมแปลภาษา
    — เนื่องด้วยศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ (NECTEC) ได้จัดทำโครงการสํารวจความต้องการใช้โปรแกรมแปลภาษา เพื่อใช้เป็นข้อมูลเบื้องต้น ในการกําหนดแนวทางการพัฒนาเทคโนโลยีที่เกี่ยวข้องกับการแปลภาษา ให้สอดคล้องตามความต้องการของผู้ที่ใช้งานมากที่สุด เพื่อให้บรรลุเป้าหมายดังกล่าวข้างต้น แบบสอบถามชุดนี้จึงถูกจัดทําขึ้น โดยมีเนื้อหาครอบคลุมถึงข้อมูลของผู้ใช้ ความคิดเห็นเกี่ยวกับโปรแกรมแปลภาษา และความคาดหวังต่อโปรแกรมแปลภาษา ทั้งนี้คณะทํางานจะรักษาข้อมูลที่ได้จากการสํารวจดังกล่าว ไว้เป็นความลับ และขอบคุณทุกท่านที่ได้ให้ความร่วมมือเป็นอย่างดีในการตอบแบบสํารวจชุดนี้ read more

    The 1st School of Asian Applied NLP

    ใครสนใจก็ลองสมัครไปเรียนดูนะครับ รับประมาณ 30 คนได้ ไม่เห็นเค้าพูดถึงค่าใช้จ่ายเลย (หรือว่าออกให้ ฟรี ? :P)

    Asian Applied Natural Language Processing for Linguistics Diversity and Language Resource Development (ADD) is delighted to announce the call for participation of the First School of Asian Applied NLP (August 21 – September 1, 2006). read more