ย้ายบล็อกไปที่ bact.cc แล้วนะครับ

พ.ร.บ.คอมพิวเตอร์
หยุด ร่างพ.ร.บ.คอมพิวเตอร์
พื้นที่เก็บข้อมูลออนไลน์ ฟรี 2GB จาก Dropbox (sync กับ Windows, Linux, Mac, iPhone, Android ฯลฯ ได้)
Showing posts with label corpora. Show all posts
Showing posts with label corpora. Show all posts

2009-04-28

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-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: , , ,

2008-07-17

different treatments of Mai Yamok in BEST Corpus

In the first release of BEST Word Segmented Corpus (free registration required for corpus download), I found different segmentations for May Yamok (repetition mark):

  • |พร้อม|ๆ| |กับ|
  • |ร้อย|ๆ |ปี|
  • |ทั้งๆ ที่|
  • |ต่างๆ| |ดัง|
  • |ย่อ|ๆ| |ว่า|
  • |ย่อ|ๆ |ว่า|

(Real data, taken from encyclopedia_00005.txt. '|' is word/token boundary)

These are probably intended. Or inconsistency ? Not quite sure, will ask people around.

BEST เป็นการประเมินประสิทธิภาพอัลกอริธึม/ซอฟต์แวร์ประมวลผลภาษาไทย ปีนี้จัดแข่งขันซอฟต์แวร์ตัดคำไทย ในงาน NSC ครั้งที่ 11 - สนใจร่วมได้

technorati tags: , ,

2007-12-27

Corpus-Related Research

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

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

งานชิ้นนี้ไม่เหมือนใครก่อนหน้า ตรงที่มันทำให้เราเห็นว่า เราสามารถนำเทคโนโลยี concordance (การแสดงคำที่กำหนดในบริบทต่าง ๆ) และหลักฐานทางภาษาศาสตร์อย่างละเอียด มาใช้ในการศึกษาคุณสมบัติต่าง ๆ ของวาทกรรม ทั้งในตัวบทและกลวิธีการสื่อสารของผู้พูดได้-อย่างไร


Tony McEnery and Andrew Wilson, Corpus Linguistics, Edinburgh University Press. ISBN 0-7486-0482-0. [gbook]

technorati tags: ,

2007-10-03

YAiTRON/LEXiTRON "ancient" word

ถามวีร์และคนอื่น ๆ

ตอนนี้พยายามทำความสะอาด YAiTRON (LEXiTRON ฉบับ XML) เพิ่มเติมอยู่

ผมลองสั่งหาคำว่า “(คำโบราณ)” ในอีลีเมนต์ translation-similar ใน YAiTRON เจองี้ (ถ้าหาในอีลีเมนต์ translation เฉย ๆ จะเจอเยอะกว่านี้)

$ cat yaitron.xml | grep -n -e \<translation-similar.*\(คำโบ
832513:  <translation-similar lang="tha">ชาวเรือ, กะลาสี (คำโบราณ)</translation-similar>
947329:  <translation-similar lang="tha">(คำโบราณ) (ทางวรรณคดี)</translation-similar>
952697:  <translation-similar lang="tha">(คำโบราณ หรือทางวรรณคดี)</translation-similar>

อยากรู้ว่า เจ้าหมายเหตุว่า “(คำโบราณ)” หรืออะไรประมาณนี้เนี่ย มันควรจะไปเก็บอยู่ตรงไหนดีครับ ที่ตัวอีลีเมนต์ entry (ซึ่งเป็นอีลีเมนต์แม่ของ translation-similar) หรือว่าจะไปเก็บเป็นแอตทริบิวต์ของอีลีเมนต์ translation-similar หรือว่าอย่างอื่น ??
(ในสเปคปัจจุบันของ YAiTRON แนะนำให้เก็บหมายเหตุพวกนี้ลงอีลีเมนต์ชื่อ note แต่อยากให้มัน machine-readable อ่ะ)

เช่น ปัจจุบันเป็นงี้

<entry lang="eng">
 <headword>seafarer</headword>
 <translation lang="tha">คนเดินเรือ</translation>
 <translation-similar lang="tha">ชาวเรือ, กะลาสี (คำโบราณ)</translation-similar>
 <lexitron id="63739"/>
</entry>

ที่เสนอแบบที่ 1 (“คำโบราณ” บ่งชี้ “seafarer”):

<entry lang="eng" >
 <ancient>true</ancient>
 <headword>seafarer</headword>
 <translation lang="tha">คนเดินเรือ</translation>
 <translation-similar lang="tha">ชาวเรือ</translation-similar>
 <translation-similar lang="tha">กะลาสี</translation-similar>
 <lexitron id="63739"/>
</entry>

ที่เสนอแบบที่ 2.1 (“คำโบราณ” บ่งชี้ทุกคำใน translation-similar):

<entry lang="eng">
 <headword>seafarer</headword>
 <translation lang="tha">คนเดินเรือ</translation>
 <translation-similar lang="tha" ancient="true">ชาวเรือ</translation-similar>
 <translation-similar lang="tha" ancient="true">กะลาสี</translation-similar>
 <lexitron id="63739"/>
</entry>

แบบที่ 2.2 (“คำโบราณ” บ่งชี้เฉพาะ “กะลาสี”):

<entry lang="eng">
 <headword>seafarer</headword>
 <translation lang="tha">คนเดินเรือ</translation>
 <translation-similar lang="tha">ชาวเรือ</translation-similar>
 <translation-similar lang="tha" ancient="true">กะลาสี</translation-similar>
 <lexitron id="63739"/>
</entry>

คือไม่แน่ใจว่า “คำโบราณ” ในหมายเหตุ (ในวงเล็บ) เนี่ย มันเป็นตัวบ่งชี้อะไร
ตัวบ่งชี้ คำศัพท์ (seafarer) หรือว่าตัวบ่งชี้คำแปล (ชาวเรือ, กะลาสี)

ใครมีความเห็นไรมั่งครับ ?

อีกอันที่น่าสนใจ เอาไว้พิจารณาประกอบก็คือ มันมี entry แบบนี้ด้วยอันนึง:

<entry lang="eng">
 <pos>N</pos>
 <headword>weeds</headword>
 <translation lang="tha">เสื้อผ้าสีดำซึ่งเดิมเป็นชุดสวมใส่ของแม่ม่าย</translation>
 <translation-similar lang="tha">(คำโบราณ หรือทางวรรณคดี)</translation-similar>
 <lexitron id="80641"/>
</entry>

จะเห็นว่าใน translation-similar ไม่มีคำแปลอะไรอยู่เลย มีแต่หมายเหตุ แบบนี้ แปลว่าหมายเหตุใน translation-similar ไม่ได้บ่งชี้ตัวคำแปลใน translation-similar .. แต่บ่งชี้คำศัพท์ (weeds) น่ะสิ ?? คิดแบบนี้ได้ไหม ?

หรือ ... แต่เนื่องจากเจอแบบนี้แค่อันเดียว ก็อาจจะถือว่ามันเป็นข้อผิดพลาด ไม่ต้องสนใจ จะได้ไหม?

นอกเรื่อง: ข้อมูล LEXiTRON ที่ให้ดาวน์โหลดได้* ซึ่งเอามาทำ YAiTRON (โดยวีร์ ผ่านทางทางคุณพูนลาภอีกที) มันเป็นรุ่นเมื่อหลายปีก่อน คือ 2.0 (หรือก่อนหน้านั้น) ส่วนรุ่นล่าสุดที่ใช้บนเว็บ คือ 2.2 เค้าไม่มีให้ดาวน์โหลด

Dictionary Thai→English English→Thai
WordsSenses WordsSenses
LEXiTRON 2.135,000?53,000?
LEXiTRON 2.251,000?79,000?
YAiTRON32,35040,85453,53483233

* ต้องสมัครสมาชิกก่อนถึงจะดาวน์โหลดได้ แต่หน้าเว็บสำหรับสมัครก็ดันบอก PHP error อีเมลไปตามที่อยู่ที่แจ้งไว้ ก็ตีกลับ ... - -"

technorati tags: , , ,

Thai National Corpus project

Thai National Corpus project

โครงการ “คลังข้อมูลภาษาไทยแห่งชาติ”
เป้าหมายตัวอย่างการใช้ภาษาไทย 80 ล้านคำ

ใครสนใจจะมอบงานเขียนของตนให้กับโครงการนี้ ก็เชิญที่หน้า “สนใจส่งผลงานเข้าร่วมโครงการ” ครับ มีรายละเอียดบอกอยู่ ว่าต้องทำอย่างไร

ในการศึกษาด้านภาษาศาสตร์ (รวมถึงงานด้านการประมวลผลภาษาธรรมชาติ) นั้น ทรัพยากรที่สำคัญมากอย่างหนึ่ง ก็คือ “คลังข้อมูลภาษา” (corpus/linguistic corpus) ซึ่งเป็นคล้าย ๆ ฐานข้อมูลขนาดใหญ่ ที่เก็บข้อมูลการใช้ภาษาของแต่ละภาษาแต่ละท้องถิ่นเอาไว้ (ใหญ่แค่ไหนนี่ ไม่ได้มีกำหนด แต่มีหลักเกณฑ์อยู่ว่า จะต้องมีปริมาณและความหลากหลายพอที่จะเป็นตัวแทนของภาษาหนึ่ง ๆ ในท้องที่หนึ่ง ๆ ในช่วงเวลาหนึ่ง ๆ ได้ — ดูจากคลังหลายอันแล้ว ก็อยู่ที่ประมาณ 30 ล้านคำขึ้นไป แต่ถ้าเป็นคลังแบบเฉพาะทางก็อาจจะไม่ต้องใหญ่เท่านั้นก็ได้) โดยคลังนี้นอกจากจะใช้ศึกษาลักษณะการใช้ภาษา (เช่น “ค่ะ” เจอใช้เมื่อไหร่ แล้ว “คะ” เจอเมื่อไหร่ หรือ “วิ่ง” มีที่ใช้อย่างไรบ้าง) หรือเอาไปทำพจนานุกรมได้แล้ว ข้อมูลสถิติจากคลังยังสามารถนำไปสร้างแบบจำลองเพื่อนำมาใช้ในงานประมวลผลภาษาธรรมชาติด้วยคอมพิวเตอร์ได้อีก

หลายภาษาหลายพื้นที่ก็เห็นความสำคัญตรงนี้ และได้จัดทำคลังข้อความภาษาของตนขึ้น ภาษาที่บุกเบิกก่อนใคร ก็คือภาษาอังกฤษอเมริกัน นั่นคือ Brown Corpus โดยมหาวิทยาลัยบราวน์ ซึ่งข้อมูลส่วนหนึ่งถูกนำไปใช้ทำพจนานุกรม American Heritage Dictionary และต่อมาก็มีโครงการ American National Corpus ซึ่งอยู่ในระหว่างจัดทำ (ได้ 22 ล้านคำแล้ว เป้าหมาย 100 ล้านคำ), สำหรับภาษาอังกฤษในสหราชอาณาจักรก็มี British National Corpus, The Bank of English ตัวนี้ใหญ่มาก ณ ปัจจุบันมีอยู่ประมาณ 525 ล้านคำ เป็นตัวที่ใช้ทำพจนานุกรม Collins COBUILD English Language Dictionary, โครงการ Scottish Corpus of Texts and Speech ซึ่งอยู่ในระหว่างจัดทำ หรือภาษาอื่น ๆ เช่น Hellenic National Corpus (ภาษากรีก), National Corpus of Irish, Hungarian National Corpus ฯลฯ

สำหรับภาษาไทยนั้น ที่ผ่านมาหลายหน่วยงานก็มีทำเช่นกัน แต่ก็เป็นการทำใช้กันภายใน เพราะติดปัญหาลิขสิทธิ์ ทำให้ไม่สามารถเผยแพร่ได้ จะมีก็เพียงคลังออร์คิดของเนคเทค (ORCHID - ข้อมูลจากคลังนี้เอาไปทำพจนานุกรม LEXiTRON) ที่ไม่มีปัญหาเรื่องลิขสิทธิ์ แต่ก็มีขนาดเล็กมาก คือเพียง 4 แสนคำ เท่านั้น และข้อมูลข้างในทั้งหมดก็มาจากบทความวิชาการด้านคอมพิวเตอร์และอิเล็กทรอนิกส์เพียงด้านเดียว (domain เดียว และ genre เดียว) คือไม่สามารถถือได้ว่าเป็นตัวแทนภาษาไทยที่ใช้กันทั่วไป

ก็เลยมี “โครงการคลังข้อมูลภาษาไทยแห่งชาติ” นี้เกิดขึ้น โดยตั้งเป้าเก็บข้อมูลภาษาไทยในการใช้งานทุกประเภท (ทุก domain และ genre ที่รู้ว่ามี) เป็นจำนวนไม่น้อยกว่า 80 ล้านคำ (ใหญ่กว่าออร์คิด 200 เท่า) งานนี้มีภาควิชาภาษาศาสตร์ คณะอักษรศาสตร์ จุฬาลงกรณ์มหาวิทยาลัยเป็นผู้ดำเนินการหลัก โดยได้รับความร่วมมือและสนับสนุนจากองค์กรอื่น ๆ รวมทั้งสำนักพิมพ์หลายแห่งด้วย

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

แถวนี้คนขีด ๆ เขียน ๆ เยอะ ลองดูครับ – ฝากบอกต่อ ๆ กันด้วย ;)

[ ลิงก์ โครงการคลังข้อมูลภาษาไทยแห่งชาติ ]

technorati tags: ,

2006-09-06

Google n-gram are belong to YOU

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

LDC นี่ เป็นหน่วยงานที่ทำงานด้านข้อมูลภาษาศาสตร์ พวกคลังข้อความ (corpus) ข้อมูลที่แจกจ่ายโดย LDC มีหลายประเภท บางประเภทต้องเป็นสมาชิก (เสียเงินค่าสมาชิกแพงอยู่) จึงจะเรียกดูได้ บางประเภทซื้อแยกต่างหากได้โดยไม่ต้องเป็นสมาชิก บางประเภทก็ฟรี — แต่กรณี DVD 6 แผ่นนี่ ยังไงคงต้องเสียค่าส่งแน่ ๆ

Google Research Blog announced:

... we decided to share this enormous dataset with everyone. We processed 1,011,582,453,213 words of running text and are publishing the counts for all 1,146,580,664 five-word sequences that appear at least 40 times. There are 13,653,070 unique words, after discarding words that appear less than 200 times.

Watch for an announcement at the LDC, who will be distributing it soon, and then order your set of 6 DVDs.

ใครอยากจะลอง เชิญได้เลย! :P

via information retrieval

tags: | | |

2006-04-05

TIGER API 1.8 released

TIGER API is a library which allows Java programmers to easily access the structure of any corpus given as a TIGER-XML file.

oeze, one of the authors of TIGER API, has leave a message to us today:

BTW, Tiger API has moved. This is the new URL: TIGER API.

We have also included a section describing how to access corpora encoded in Penn Treebank format and other formats.

Thanks, oeze ! :)

link: http://tigerapi.org

2005-11-11

LOTUS Thai Speech Corpus

Chai Wutiwiwatchai wrote:

NECTEC now lauches a large vocabulary continuous speech corpus
namely LOTUS. It is freely downloaded at

http://www.nectec.or.th/rdi/lotus

It contains both a set of phonetically-balanced sentences with
manually phone-boundary marked and three sets of large vocabulary
continuous speech sentences covering Thai 5,000 words.

Please find out its usefulness in your work.
Chai

2005-10-12

Developing Linguistic Corpora - free book

Developing Linguistic Corpora: a Guide to Good Practice
Edited by Martin Wynne
Produced by the Arts and Humanities Data Service (AHDS)

Free full text online (html).

2005-04-01

Creative Commons for Corpus Construction

เนื้อหาในเว็บที่เป็น Creative Commons (ภาษาไทย) เริ่มเยอะขึ้นเรื่อยๆ แล้ว
ถ้าเรารวบรวมเนื้อหาเหล่านี้มาทำ คลังข้อความ (corpus) ได้ เวลาจะเอาข้อมูลในคลังนี้ไปใช้ทำอะไร ก็จะไม่ต้องกังวลเรื่อง license

Derestricting web corpus building

อืม อืม

วีร์: ทำป่าวๆ :D

เผยแพร่งานของคุณด้วย Creative Commons

tags: ,

Emdros - a database engine for annotated text

เมื่อคืนวีร์พูดถึง Emdros ว่าน่าสนใจ สำหรับงานฐานข้อมูลทางภาษาศาสตร์ ก็เลยเข้าไปดูเว็บซะหน่อย

Emdros is:

  • an opensource text database engine for storage and retrieval of analyzed or annotated text.
  • applicable especially in corpus linguistics and computational linguistics.
  • equiped with a powerful query-language MQL, based on the Extended MdF mathematical model of text.

A short paper explaninig Emdros.

ข้างบนจะเห็นคำว่า Extended MdF หรือที่ในเว็บ Emdros จะใช้คำว่า EMdF, ชื่อเต็มๆ ของมันคือ Extended Monads dot Feature โดยพัฒนาต่อมาจาก Monads dot Feature (book; review)

More about text database:

2005-01-23

Using The Web For Linguistic Research

อืมม..

Slashdot ว่าไว้:

prostoalex writes "The Economist says linguists are gradually adopting the World Wide Web as a useful corpus for linguistic research. Google is used, among other resources, to research how the written language evolves and how some non-standard examples of usage become more or less acceptable (The Economist quotes the phrase 'He far from succeeded,' where 'far from' is used as an adverb). LanguageLog is a resource linked in the article, where linguists discuss current peculiarities of the English language."

แล้วเว็บไทยเขียนผิดๆ ถูกๆ .. ก็ต้องถือว่ามัน 'ถูก' ใช่มะ?

Corpus colossal | Language Log

2004-11-27

CLaRK for Corpus building

อันนี้อีกตัว / another one

XML-based, don't know much in details yet. Will read.

Have at least one real world applicatoin, BulTreeBank, the Bulgarian HPSG TreeBank.

2004-06-19

Penn Treebank in XML format

Vee, you may interest in this one.

No instant noodle here. Still have to work something out, but it shouldn't be a difficult task.

TIGERRegistry PTB -> TIGER XML filter, included in TIGERSearch, a treebank explorer package.
TIGER API, Java lib for accessing corpus in TIGER XML format.