0

ใช้ Tubsub API ผ่าน PHP

ก็เขียน code แบบนี้เลยครับ

<?php
  function tubsub($txt) {
    $txt = urlencode($txt);
    $data = "input=$txt";
    $ch = curl_init("http://vivaldi.cpe.ku.ac.th/~vee/tubsube2t.php");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);      
    curl_close($ch);
    $ans = json_decode($output);
    return $ans[0];
  }

  print tubsub("toto") . "\n";
?>

เขียนแบบข้างบนโปรแกรมก็จะพิมพ์ออกมาว่าเขียน toto ภาษาไทยเขียนอย่างไร ถ้าจะใช้กับอย่างอื่นก็ copy function tubsub ไปใช้ได้เลยครับ

3

KUCut API

ตั้งแต่ version 1.2.7 เป็นต้นไป KUCut มี API ให้เรียกใช้ง่ายๆ จาก Python แล้ว เวลาเรียกใช้งานทำแบบนี้

from kucut import SimpleKucutWrapper as KUCut
myKUCut = KUCut()
result = myKUCut.tokenize([u"ทดสอบทดสอบ"])

ใน result ก็จะได้ list 3 ชั้นออกมา

1

เรียกว่า Basa API แล้วกัน

เป็นเวลานานมาแล้วเวลาเอาโปรแกรมต่างๆ มาต่อกัน ตัดคำเอย, part of speech tagger เอย ก็ต่อกันไม่ค่อยได้ นานมาแล้วอีกเหมือนกัน ก็เลยทำให้แต่ละตัวเป็น service ขึ้นมา แล้วก็เรียกผ่านเว็บได้. เคยดู SOAP ไว้แต่ว่ากว่าจะทำอะไรได้แต่ละอย่างก็วุ่นวายมากมาย กว่าจะใช้ได้. ใช้ XML-RPC ก็ง่ายหน่อยแต่ว่าดูเหมือนมันไม่ค่อยช่วยอะไร สุดท้ายก็ส่งแค่ string ที่มี XML หรือหลังๆ มาเป็น JSON อยู่ข้างในแล้วจะใช้ XML-RPC ทำไม เราก็แค่ใช้ HTTP. ล่าสุดนี้ REST น่าจะใกล้เคียงที่สุด แต่ก็ยังต้องประเด็นถกกันอีกว่าจะเรียก REST ได้หรือเปล่าบางคนก็เรียก REST แบบหลวมๆ บางคนก็ใช้แบบเคร่งครัด ต้องไม่มี state ไม่ใช้ cookie อะไรต่างๆ นานา ที่ผมก็ไม่มั่นใจอีกว่าจะทำอย่างนั้นได้ตลอด. ก็เลยตามเฟชัน เห็นเขามี Flickr/Yahoo/Google/Flickr API ก็เลยเรียก API ที่ทำอยู่ว่า “Basa API” และกัน Basa เป็นภาษาชวาแปลว่าภาษานั่นล่ะ :-P.

Basa API รวมๆ แล้วก็คือ API ที่เกี่ยวกับการประมวลผลภาษา ทำงานบน HTTP และใช้ JSON เป็นหลัก เน้นให้เอามาใช้กับ Ajax ง่ายๆ ด้วย แต่ก็ไม่จำเป็นต้องใช้กับ Ajax ตรงๆ (จำทำให้คล้าย REST หรือไม่คล้ายก็ได้).

ตอนนี้ประเด็นที่ดูต่อไปคือ authentication จำทำอย่างไร ใช้ basic auth จะง่ายไปหรือเปล่า ใช้ OAuth จะได้ได้หรือไม่.

0

dicthttp แบบมี xml และระบุ dict server ได้

dicthttp เป็นโปรแกรมที่ครอบ dict protocol ไว้อีกทีเพื่อที่จะใช้งานผ่าน http ได้ จะได้ไม่โดน block และใช้กับเทคนิค ajax ได้ด้วย. จาก ความเดิมในตอนที่แล้ว. dicthttp ให้ผลลัพธ์ออกมาเป็นแบบ json แถมยังเลือกไม่ได้ว่าจะใช้ dict server ตัวไหน จาก comment ของ @bact และ @jittat ก็ทำให้ได้ url แบบนี้ออกมา

http://localhost:8000/d:แมว?host=dict.longdo.com&format=xml

มี host=dict.longdo.com และ format=xml เข้ามาเพื่อระบุ dict server และ format ตามลำดับนั้นเอง

dict

มีภาพประกอบด้วย :-P

โปรแกรมก็เหมือนเดิม checkout ออกมาจาก svn ได้เลย http://code.google.com/p/basaasa/source/browse/#svn/trunk/dicthttp.

0

Python: XML pulldom

from xml.dom import pulldom

def main():
    events = pulldom.parse('orchid.xml')
    for (event, node) in events:
        if event == "START_ELEMENT" and node.tagName == "paragraph":
            events.expandNode(node)
            print node.getElementsByTagName("word")

if __name__ == '__main__':
    main()

Pulldom นี่มันอารมณ์กึ่ง SAX กึ่ง DOM ถ้าเราไม่เรียก events.expandNode(node) มันก็จะไม่สร้าง DOM Tree ให้ก็ประหยัด memory ประหยัดเวลา ไม่เหมือน DOM ที่สร้าง tree ต้นใหญ่ทีเดียวทั้งเอกสารเลย

ตัวอย่าง
<corpus>
<document author=”abcd” …>
<paragraph>
<sentence raw_txt=”blaa blaa blaa”>
<word surface=”blaa” pos=”NNNN”/>
<word surface=”blaa” pos=”NNNN”/>
<word surface=”blaa” pos=”NNNN”/>
<word surface=”blaa” pos=”NNNN”/>
</sentence>
</paragraph>

<paragraph>
<sentence raw_txt=”blaa blaa blaa”>
<word surface=”blaa” pos=”NNNN”/>
<word surface=”blaa” pos=”NNNN”/>
<word surface=”blaa” pos=”NNNN”/>
<word surface=”blaa” pos=”NNNN”/>
</sentence>
</paragraph>
</document>

</corpus>

จาก code ตัวอย่าง และ XML ตัวอย่าง Pulldom มันก็จะสร้าง DOM tree ของส่วนที่เป็น สีเขียวก่อนในครั้งแรก ใช้เสร็จแล้วก็ปล่อยไป แล้วก็มาสร้างตรงสีน้ำเงินใหม่ แล้วก็ปล่อยไปอีก แบบนี้เราก็จะทำอะไรแบบ getElementsByTagName ซึ่งเป็นท่าของ DOM ในเฉพาะบริเวณ สีเขียว หรือ สีน้ำเงิน ได้ ซึ่งสำหรับผมมันก็สะดวกดี

ป.ล. แรงบรรดาลจากที่พี่ pok เคยถามไว้ ว่า Python มี Pull parser หรือเปล่า

ครั้งแรกโพสที่ http://veer.exteen.com/20070331/xml-pull-parser-python มาแก้นิดๆ หน่อยๆ

2

ทับศัพท์: Tubsub API

Tubsub API ของ Naist Lab ที่เกษตรฯ ที่ใช้งานบน HTTP ให้โปรแกรมส่งคำภาษาอังกฤษไปที่ server แล้วก็ตอบกลับไปเป็นภาษาไทย เช่น ส่ง cool ไป ก็ได้ คูลกับมา

tubsube2t_client.py:

import pycurl
import urllib
import sys
import simplejson

def tubsube2t(txt):
  class Output:
    def __init__(self):
      self.o = ""

    def write_func(self, buf):
      self.o += buf

  data = urllib.urlencode(dict(input = txt))

  o = Output()
  c = pycurl.Curl()
  c.setopt(c.URL, "http://vivaldi.cpe.ku.ac.th/~vee/tubsube2t.php")
  c.setopt(c.POST, 1)
  c.setopt(c.WRITEFUNCTION, o.write_func)
  c.setopt(c.POSTFIELDS, data)
  c.perform()
  c.close()
  return simplejson.loads(o.o)

demo.py:

from tubsube2t_client import tubsube2t
print tubsube2t('cool')[0]

พอเอาใช้งานก็จะได้แบบนี้
$ python demo.py
คูล

Download http://vivaldi.cpe.ku.ac.th/~vee/tubsube2t_client-20081024.tar.gz ไปลองเล่นได้. ถ้าเจออะไรผิดพลาด ช่วยแจ้งหน่อยนะครับ ^_^.