38
Python untuk Pemrosesan Teks Bahasa Indonesia Peb Ruswono Aryan http://about.me/peb Meetup komunitas pengguna python Kampus ITB, 28 Januari 2012

Python untuk Pemrosesan Teks Bahasa Indonesia

Embed Size (px)

DESCRIPTION

presentasi meetup #3 komunitas id-python

Citation preview

Page 1: Python untuk Pemrosesan Teks Bahasa Indonesia

Python untuk Pemrosesan Teks Bahasa Indonesia

Peb Ruswono Aryanhttp://about.me/peb

Meetup komunitas pengguna pythonKampus ITB, 28 Januari 2012

Page 2: Python untuk Pemrosesan Teks Bahasa Indonesia

Bahasa dan Media : Tulisan

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

Teksgambar

Optical Character Recognition, Handwriting Recognition

Page 3: Python untuk Pemrosesan Teks Bahasa Indonesia

Bahasa dan Media : Lisan

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

Teks

Suara

Natural Language Processing (text),Automatic Speech Recognition,Text-to-Speech

Page 4: Python untuk Pemrosesan Teks Bahasa Indonesia

Aplikasi Dialog

Pencarian ( bebas konteks ) Antarmuka kueri basisdata Antarmuka kueri umum (mis. Wolfram, Siri)

Tanya-Jawab ( ada konteks pembicaraan ) Chatbot (ELIZA, @begobet)

Transformasi Penterjemahan Peringkasan

Klasifikasi Kategorisasi/Pelabelan Dokumen Analisis Sentimen

Page 5: Python untuk Pemrosesan Teks Bahasa Indonesia

Aplikasi : Penerjemahan Otomatis

Page 6: Python untuk Pemrosesan Teks Bahasa Indonesia

Aplikasi : Tanya Jawab

Page 7: Python untuk Pemrosesan Teks Bahasa Indonesia

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, Hubungan) ~ Named Entity Recognition

Page 8: Python untuk Pemrosesan Teks Bahasa Indonesia

Teknik

Heuristik (Kaidah) Statistik

Template/Pattern Matching

Cepat (umumnya relatif)

sulit dikembangkan

Machine Learning (lebih) Lambat (asumsi) semakin

banyak data semakin baik

Page 9: Python untuk Pemrosesan Teks Bahasa Indonesia

Teknologi (python) NLTK (Natural Language Toolkit)

http://www.nltk.org Whoosh (Text Indexing/Search)

http://pypi.python.org/pypi/Whoosh/ https://bitbucket.org/mchaput/whoosh/ (repo)

Topia.Termextract (term/keyword extraction) http://pypi.python.org/pypi/topia.termextract/ https://github.com/turian/topia.termextract (repo)

Pebahasa http://github.com/pebbie/pebahasa (code repo) http://pebahasa.appspot.com (demo site)

Page 10: Python untuk Pemrosesan Teks Bahasa Indonesia

NLTK

Natural Language Processing Toolkit

Page 11: Python untuk Pemrosesan Teks Bahasa Indonesia

Deskripsi Koleksi Algoritma Pemrosesan Teks

Lematisasi, WordNet Pemisahan Kalimat POS Tag Pemotongan Frasa

Koleksi Dokumen Teks (Korpus) & Model Bahasa Berbagai bahasa

Page 12: Python untuk Pemrosesan Teks Bahasa Indonesia

Referensi

Natural Language Processing with Python (S. Bird, O’Reilly 2009) http://www.nltk.org/book

  (CC BY-NC-ND 3.0)

Page 13: Python untuk Pemrosesan Teks Bahasa Indonesia

Peluang berkontribusi Model & Korpus Bahasa Indonesia Penerjemahan Buku ke Bahasa Indonesia

Page 14: Python untuk Pemrosesan Teks Bahasa Indonesia

Whoosh

Fast, Pure-python Fulltext Search

Page 15: Python untuk Pemrosesan Teks Bahasa Indonesia

Deskripsi

Indexing Pencarian

Input : Kumpulan dokumen

(unicode) Output :

Indeks untuk mempercepat pencarian

Komponen : Tokenisasi

(pemotongan) Struktur data indeks

terbalik

Input : Kueri pencarian

(unicode) Indeks Dokumen

Output : Daftar dokumen yang

relevan Komponen :

Pencocokan kata/segmen

Pengurutan

Page 16: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode : importfrom whoosh.index import create_in, open_dir

from whoosh.fields import *

from whoosh.qparser import QueryParser

Page 17: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode : Schemaschema = Schema( title=TEXT(stored=True), cat=TEXT(stored=True), path=TEXT(stored=True), rank=NUMERIC(stored=True, type=float), content=TEXT)

Parameter stored=True akan membuatField tersebut ditampilkan dalam hasilPencarian (result set)

Page 18: Python untuk Pemrosesan Teks Bahasa Indonesia

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'), path=unicode(doc))

f.close()

w.commit()

else:

_ix = open_dir('indexdir')

Page 19: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode : Searchs = _ix.searcher()

while True:

print "?",

qs = raw_input().lower().strip()

if qs=="exit":

break

q = QueryParser('content', _ix.schema).parse(unicode(qs))

r = s.search(q)

for rr in r:

print rr['title'], rr['path']

s.close()

Page 20: Python untuk Pemrosesan Teks Bahasa Indonesia

topia.termextract

Term extraction

Page 21: Python untuk Pemrosesan Teks Bahasa Indonesia

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

Page 22: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode

from topia.termextract import extractextractor = extract.TermExtractor()print sorted( extractor( text ) )

Page 23: Python untuk Pemrosesan Teks Bahasa Indonesia

Pebahasa

Layanan web pemrosesan teks Bahasa Indonesia

Page 24: Python untuk Pemrosesan Teks Bahasa Indonesia

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

Page 25: Python untuk Pemrosesan Teks Bahasa Indonesia

Demo

screenshot

Page 26: Python untuk Pemrosesan Teks Bahasa Indonesia

Pemenggalan suku kata

Aturan pemisahan digunakan untuk pengucapan(text to speech), bukan untuk stemming/mencariKata dasar

Page 27: Python untuk Pemrosesan Teks Bahasa Indonesia

POS Tag

NN : Kata bendaNNP : Proper NounMD : ModalVBT : 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.

Page 28: Python untuk Pemrosesan Teks Bahasa Indonesia

Term Extraction

Sumber artikel : Kompas.com

Page 29: Python untuk Pemrosesan Teks Bahasa Indonesia

Peringkasan

Simple extractive summarization

Page 30: Python untuk Pemrosesan Teks Bahasa Indonesia

Named Entity Recognition

keterangan 6 : posisi/jabatan1 : orang 2 : organisasi7 : predikat (untuk relasi antar entitas)8 : abaikan saja

Page 31: Python untuk Pemrosesan Teks Bahasa Indonesia

Bottle - GAE

Tutorial tambahan

Page 32: Python untuk Pemrosesan Teks Bahasa Indonesia

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)

Page 33: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode : app.yamlhandlers:

- url: /.*

script: main.py

Page 34: Python untuk Pemrosesan Teks Bahasa Indonesia

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())

Page 35: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode : main.py (URL routing)@route('/')

@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 }

decorator

dict akan diubah menjadi JSON secara otomatis

Page 36: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode: views/word_entry.tpl

%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>

rebase akan menggunakan template lain (index.tpl) sebagai pembungkus

variabel apptitle bisa diakses di index.tpl

Page 37: Python untuk Pemrosesan Teks Bahasa Indonesia

Kode: views/index.tpl<!DOCTYPE html>

<html>

<head>

<title>{{apptitle}}</title>

</head>

<body>

<div id="content">

%include

</div>

</body>

</html>

Template yang memanggil rebase akan Diselipkan di sini

Menampilkan isi variabel apptitle (html akan di-escape)

Page 38: Python untuk Pemrosesan Teks Bahasa Indonesia

Terima kasih

Komentar , pertanyaan ?