Wednesday, September 06, 2006

Part-of-speech tagging in Ruby

Acopost is a part-of-speech tagger written in C. Since now we can useAcopost as a C library, we write a ruby binding for Acopost called Acopost4R. It is hosted at Rubyforge. In addition, modfied version of Acopost (AcopostC) is also included Acopost4R Subversion repository. We will call it. We can write Ruby code for part-of-speech tagging as follow.

Source code:

require 'acopost'
t3 = Acopost::T3.new("/home/vee/train.ngram.utf8",
"/home/vee/train.lex.utf8")
t3.tagging(["ฉัน", "กิน", "ข้าว"]).each{|w|
print "#{w[0]}/#{w[1]} "
}
print "\n"


Result:

ฉัน/pper กิน/vt ข้าว/ncn

T3::tagging accept the array of words as the argument. And it return array of pair of word and part-of-speech, like NLTK-Lite style.

Acopost4R is still in very early stage so there is no release yet. However, you can obtain it from Acopost4R's subversion repository.




Acopost เป็นโปรแกรมกำหนดชนิดของคำที่เขียนด้วยภาษาซี เนื่องจากตอนนี้เราสสมารถใช้Acopost แบบ C library เราจึงเขียน ruby binding สำหรับ Acopost ชื่อว่า Acopost4R Acopost4R อยู่ที่ Rubyforge. มากไปกว่านั้น Acopost รุ่นที่แก้ไขแล้ว (AcopostC) ก็ยังถูกรวมไว้ที่ Subversion repository ของ Acopost4R ด้วย เราจะเรียกมันว่า AcopostC เราสามาถเขียนโปรแกรมภาษารูบีให้กำหนดชนิดของคำได้ตามต่อไปนี้

โปรแกรม:

require 'acopost'
t3 = Acopost::T3.new("/home/vee/train.ngram.utf8",
"/home/vee/train.lex.utf8")
t3.tagging(["ฉัน", "กิน", "ข้าว"]).each{|w|
print "#{w[0]}/#{w[1]} "
}
print "\n"


ผลการทำงาน:

ฉัน/pper กิน/vt ข้าว/ncn

T3::tagging รับ array ของคำเป็นอากิวเมนต์ และส่งผลลัพธ์กลับเป็น array ของคของคำและชนิดของคำ เหมือน NLTK-Lite.

Acopost4R ยังอยู่ในระยะเริ่มต้น ดังนั้นจะยังไม่มี release อย่างไรก็ตามคุณสามารถเอามันมาเล่นได้จาก subversion repositor ของ Acopost4R.

No comments: