Corpus-Related Research

สาขาวิจัยที่สามารถใช้ประโยชน์จากคลังข้อความได้ เช่น
ภาษาศาสตร์เชิงคำนวณ วัฒนธรรมศึกษา และ การวิเคราะห์วาทกรรม

ใน Linguistics of Political Argument: The Spin-Doctor and the Wolf-Pack at the White House [gbook], Alan Partington รองศาสตราจารย์ด้านภาษาศาสตร์ แห่งคณะรัฐศาสตร์ มหาวิทยาลัยคาเมรีโน ประเทศอิตาลี ได้พิจารณาความสัมพันธ์ระหว่างทำเนียบขาวกับสื่อ โดยการวิเคราะห์ทางภาษาศาสตร์จากคลังข้อความ ซึ่งประกอบไปด้วยสรุปคำแถลงข่าวประมาณ 50 ชิ้นในช่วงปีท้าย ๆ ของการดำรงตำแหน่งของประธานาธิบดีคลินตัน โดยหัวข้อนั้น มีตั้งแต่เรื่องในโคโซโวไปจนถึงเรื่องความสัมพันธ์คลินตัน-เลวินสกี read more

GATE experiment at KIND Lab, SIIT

งานทดลองสุดสัปดาห์ที่ผ่านมา

POS-tagged document in GATE

เมื่อวานทดลองเขียน wrapper ครอบ Stanford Log-linear Part-Of-Speech Tagger ให้กลายเป็นปลั๊กอินสำหรับใช้กับ GATE (หลังจากตั้งท่ามานาน)

pipeline ในรูป มี 3 Processing Resources คือ tokensier, splitter และ tagger

tokensier คือ net.siit.gate.DictionaryBasedTokeniser เป็นตัวตัดคำธรรมดา ๆ ใช้พจนานุกรม1 และออกแบบให้ตัดได้คำที่ยาวที่สุด (longest-matching) ทำงานกับ AnnotationSet ของ GATE โดยตรง — จะสร้าง AnnotationSet ชื่อ “Token” ขึ้นมา read more

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

Sanskrit and Artificial Intelligence

Knowledge Representation in Sanskrit and Artificial Intelligence
by Rick Briggs, Roacs, NASA Ames Research Center
(published in AI Magazine, Volume 6, Number 1, Spring 1985)

There have been suggestions to use Sanskrit as a metalanguage for knowledge representation in e.g. machine translation, and other areas of natural language processing because of its highly regular structure (The AI Magazine, Spring, 1985 #39). This is due to Classical Sanskrit being a regularized, prescriptivist form abstracted from the much more irregular and richer Vedic Sanskrit. This levelling of the grammar of Classical Sanskrit occurred during the Brahmana phase, after the language had fallen out of popular use, arguably qualifying Classical Sanskrit as an early engineered language.
— from Wikipedia entry, Sanskrit 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

KICSS 2006 : Knowledge, Information and Creativity Support Systems

The 1st International Conference on
Knowledge, Information and Creativity Support Systems

August 1-4, 2006 Ayutthaya, Thailand

(abstract submission deadline: May 15, 2006)

http://kind.siit.tu.ac.th/kicss2006/

The conference will cover a broad range of research topics in the fields of knowledge engineering and science, information technology, creativity support systems and complex system modeling. They include, but are not limited to:

  • Knowledge Discovery in Database / Data Warehouse/Mining
  • Decision Sciences / Decision Support Systems
  • Group Decision and Negotiation
  • Creativity Support Systems
  • Knowledge Sciences, Technologies and Management
  • Knowledge Reuse and Ontology
  • Knowledge-based E-Commerce / E-learning, E-knowledge
  • Web Intelligence Tools
  • Intelligent Systems and Agents
  • Complex System Modeling and Analysis
  • Meta-synthesis and Advanced Modeling
  • Natural Language Understanding Tools

Hosted by SIIT, Thammasat University
Co-hosted by JAIST and TCL Lab
Sponsored/supported by JCS, NECTEC and AFNLP
read more