1. Meetup komunitas pengguna python
Kampus ITB, 28 Januari 2012
Python untuk Pemrosesan Teks
Bahasa Indonesia
Peb Ruswono Aryan
http://about.me/peb
2. Bahasa dan Media : Tulisan
Teks
gambar
Optical Character Recognition,
Handwriting Recognition
Image source:
http://i717.photobucket.com/albums/ww172/AmandaNichelle/Person.png
http://www.school-clipart.com/school_clipart_images/happy_person_in_silhouette_a_woman_clapping_0515-0911-2801-0927_SMU.jpg
3. Bahasa dan Media : Lisan
Teks
Suara
Natural Language Processing (text),
Automatic Speech Recognition,
Image source:
http://i717.photobucket.com/albums/ww172/AmandaNichelle/Person.png
Text-to-Speech
http://www.school-clipart.com/school_clipart_images/happy_person_in_silhouette_a_woman_clapping_0515-0911-2801-0927_SMU.jpg
7. Ragam Tugas Pemrosesan Bahasa
Pemrosesan Morfologi
Mencari kata dasar (stemming/lematisasi)
Identifikasi
Menentukan batas kalimat
Klasifikasi kata (Part-of-Speech Tagging)
Mencari peranan kata dalam kalimat (Parsing, Semantic
Role Labeling)
Ekstraksi Informasi
(Orang, Organisasi, Lokasi, Jabatan, Kejadian, Waktu, Hu
bungan) ~ Named Entity Recognition
8. Teknik
Heuristik (Kaidah) Statistik
Template/Pattern Machine Learning
Matching (lebih) Lambat
Cepat (asumsi) semakin
(umumnya relatif) sulit banyak data semakin
dikembangkan baik
15. Deskripsi
Indexing Pencarian
Input : Input :
Kumpulan dokumen Kueri pencarian
(unicode) (unicode)
Output : Indeks Dokumen
Indeks untuk
mempercepat pencarian Output :
Komponen : Daftar dokumen yang
relevan
Tokenisasi (pemotongan)
Struktur data indeks Komponen :
terbalik Pencocokan
kata/segmen
Pengurutan
16. Kode : import
from whoosh.index import create_in, open_dir
from whoosh.fields import *
from whoosh.qparser import QueryParser
17. Kode : Schema
schema = Schema(
title=TEXT(stored=True), cat=TEXT(store
d=True), path=TEXT(stored=True), rank=N
UMERIC(stored=True, type=float), conten
t=TEXT)
Parameter stored=True akan membuat
Field tersebut ditampilkan dalam hasil
Pencarian (result set)
18. Kode : Indexing
_ix = None
if not os.path.exists('indexdir'):
os.mkdir('indexdir')
_ix = create_in('indexdir', schema)
w = _ix.writer()
for root, dirnames, filenames in os.walk('data'):
for filename in fnmatch.filter(filenames, '*.txt'):
doc = os.path.join(root, filename)
f = open(doc)
text = re.sub("[x80-xff]", '', f.read())
w.add_document(title=unicode(filename[:-
4]), content=unicode(text, 'utf8'), cat=unicode('artikel'), pat
h=unicode(doc))
f.close()
w.commit()
else:
_ix = open_dir('indexdir')
19. Kode : Search
s = _ix.searcher()
while True:
print "?",
qs = raw_input().lower().strip()
if qs=="exit":
break
q =
QueryParser('content', _ix.schema).parse(u
nicode(qs))
r = s.search(q)
for rr in r:
print rr['title'], rr['path']
s.close()
21. Deskripsi
Input : Teks (paragraf)
Output : Daftar kata/frasa yang sering muncul
Komponen :
POS Tagger
Rule-based Filter
Menggunakan zope.interface
Baru tersedia untuk Bahasa Inggris
24. Deskripsi
Kumpulan Algoritma NLP
Pemenggalan suku kata
deteksi batas kalimat
Penentuan kelas kata (POS tag) berbasis kamus eksternal &
HMM (Hidden Markov Model)
Pemotongan kalimat (Chunking) berdasarkan kapitalisasi *
Ekstraksi istilah (modifikasi dari topia.termextract) *
Peringkasan sederhana *
Ekstraksi informasi *
Dibungkus menjadi layanan web
Google AppEngine
Bottlepy
*) belum ditambahkan ke repo
26. Pemenggalan suku kata
Aturan pemisahan digunakan untuk pengucapan
(text to speech), bukan untuk stemming/mencari
Kata dasar
27. POS Tag
NN : Kata benda
NNP : Proper Noun
MD : Modal
VBT : kata kerja transitif
Alfan Farizki Wicaksono, Ayu Purwarianti. HMM Based POS Tagger for Bahasa Indonesia.
On Proceedings of 4th International MALINDO (Malay - Indonesian Language) Workshop. 2nd August 2010.
32. Bottle
Web Microframework :
hanya menyediakan URL routing dan templating (built-
in, mako, jinja2)
Hanya 1 file yang perlu diimpor (bottle.py)
Berbasis decorator (@<nama decorator> sebelum definisi
fungsi)
Session ditangani oleh WSGIMiddleWare (beaker, gae-
sessions)
Mendukung berbagai jenis Web Server:
WSGIref, CGI, FCGI
Paste, CherryPy, Twisted, Tornado, Bjoern, ...
GAE (Google App Engine)
34. Kode : main.py
from bottle import *
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
import suku
...
util.run_wsgi_app(default_app())
35. Kode : main.py (URL routing)
@route('/')
decorator
@view(‘word_entry’) # views/word_entry.tpl
def index():
return { ‘apptitle’:’pebahasa‘ }
@post('/penggal')
def penggal():
kata =
request.forms.get('word', '').strip()
fon = suku.pecah(kata)
return { ‘asal’:kata, ‘hasil’: fon }
dict akan diubah menjadi JSON secara otomatis
36. Kode: views/word_entry.tpl
rebase akan menggunakan template lain (index.tpl) sebagai pembungkus
%rebase index apptitle=apptitle
<form method="POST" id="newcat"
action="/penggal">
<label for="word">Kata</label>
<input type="text" name="word"
id="word" size="30"/>
<input type="submit"/>
</form>
variabel apptitle bisa diakses di index.tpl
37. Kode: views/index.tpl
<!DOCTYPE html>
<html>
<head> Menampilkan isi variabel apptitle (html akan di-escape)
<title>{{apptitle}}</title>
</head>
<body>
<div id="content">
%include Template yang memanggil rebase akan
Diselipkan di sini
</div>
</body>
</html>