Mencoba Tools OpenNLP

Tools OpenNLP dapat diunduh dari alamat ini. Setelah itu, silakan ekstrak file unduhan tersebut. Untuk dapat menjalankan tools OpenNLP ini, pada komputer kita harus sudah terinstal JDK.

Sebelumnya, kita harus mengkompilasinya terlebih dahulu. Dokumentasi bagaimana melakukan kompilasi OpenNLP sudah secara jelas disampaikan di sini dan di sini. Kompilasi tersebut akan menghasilkan file opennlp-tools-1.4.3.jar di folder output. Sebelum menjalankan OpenNLP kita perlu menge-set variabel CLASSPATH pada komputer kita. Dokumentasi mengenai cara menge-set variabel CLASSPATH juga sudah terdapat pada artikel tersebut.

Setelah semuanya siap, sekarang saatnya mencoba tools OpenNLP tersebut… 🙂 Pada tulisan saya ini saya menggunakan training model bahasa Inggris karena kita akan mencoba melakukan pemrosesan untuk teks bahasa Inggris. Misalkan, diberikan suatu potongan artikel berbahasa Inggris sebagai berikut (diambil dari The Jakarta Post):

Indonesian Foreign Minister Marty Natalegawa and his Malaysian
counterpart Dato' Sri Anifah Aman arrived at the Le Meridien
Hotel on Monday at 12:30 p.m. local time for the 16th
Indonesia-Malaysia joint commission meeting. The meeting
highlights issues of sea border, the Aug. 13 arrests of
Indonesian civil servants and Malaysian fishermen in
Indonesian waters and Indonesian migrant workers, according
to the hosting minister. "We'll discuss [among others] the
Aug. 13 incident and try to fix it so, that any similar
incidents will not repeat in the future," Anifah told visiting
and local reporters after escorting Marty into the hotel.

Kemudian potongan artikel tersebut kita simpan ke dalam suatu file teks, misal bernama article.txt. Selanjutnya untuk memproses file artikel tersebut, dapat menggunakan aplikasi OpenNLP ini dengan menjalankannya melalui command prompt atau terminal. Hasil pemrosesan tersebut kemudian akan kita simpan dalam file out.txt.

Sentence Detection

Sesuai namanya, dengan API ini kita dapat mengidentifikasi kalimat-kalimat yang terdapat pada suatu paragraf atau artikel yang utuh. Mungkin terdengar sangat mudah bagi kita. Cuma melihat suatu teks adalah kalimat atau bukan. Tapi sebenarnya proses yang dilakukannya cukup kompleks. Tidak cukup hanya mengenali tanda baca titik, kutip, dsb yang biasa terletak di akhir kalimat karena bisa jadi di tengah kalimat pun bisa terdapat tanda baca titik misalnya. Kembalian dari proses sentence detection ini adalah sebuah array kalimat. Berikut ini adalah contoh command untuk menjalankan sentence detection:

# java opennlp.tools.lang.english.SentenceDetector
D:\models\english\sentdetect\EnglishSD.bin.gz < D:\article.txt
> D:\out.txt

Sentence detector akan memberikan tiga buah kalimat yang terdapat pada artikel tersebut. Pada artikel tersebut elemen pertama dari array yang dikembalikan adalah:

Indonesian Foreign Minister Marty Natalegawa and his Malaysian
counterpart Dato' Sri Anifah Aman arrived at the Le Meridien
Hotel on Monday at 12:30 p.m. local time for the 16th
Indonesia-Malaysia joint commission meeting.

Tokenization

Proses tokenization ini akan memecah kalimat-kalimat menjadi token-token yang saling dipisahkan dengan spasi. Apakah token itu? Pada dasarnya token itu adalah suatu kata juga, hanya saja ada beberapa kata yang dapat dipecah menjadi beberapa token. Sebagai contoh, kata “don’t” akan dipecah menjadi “do” dan “n’t” (berasal dari do not). Proses tokenization ini bisa dikatakan semacam menjadi prerequisite untuk proses POS tagging dan treebank parser karena kedua proses itu membutuhkan kalimat yang sudah dipecah-pecah menjadi token-token. Berikut ini adalah contoh command untuk menjalankan tokenization:

# java opennlp.tools.lang.english.Tokenizer
D:\models\english\tokenizer\EnglishTok.bin.gz < D:\article.txt
> D:\out.txt

Tokenization itu akan memberikan hasil untuk kalimat ketiga sebagai berikut:

" We 'll discuss [among others ] the Aug. 13 incident and try
to fix it so , that any similar incidents will not repeat in
the future , " Anifah told visiting and local reporters after
escorting Marty into the hotel .

Tampak “‘ll” menjadi token tersendiri terpisah dari kata sebelumnya “We’ll”.

POS Tagging

POS tagging adalah proses pelabelan terhadap token-token suatu kalimat dengan tag-tag parts of speech seperti verb, adverb, dan personal pronoun. Untuk lebih lengkapnya, penjelasan mengenai apa sajakah tag-tag parts of speech dapat dilihat pada referensi ini. Input bagi proses POS tagging ini adalah kalimat yang sudah ditokenisasi. Pada contoh kali ini POS tagging akan menggunakan input kalimat hasil tokenization di atas.

# java opennlp.tools.lang.english.PosTagger
D:\models\english\postag\Tag.bin.gz < D:\out.txt > H:\tag.txt

Berikut ini hasil proses POS tagging kalimat tersebut:

"/`` We/PRP 'll/MD discuss/VB [among/IN others/NNS ]/IN the/DT
Aug./NNP 13/CD incident/NN and/CC try/VBP to/TO fix/VB it/PRP
so/RB ,/, that/IN any/DT similar/JJ incidents/NNS will/MD
not/RB repeat/VB in/IN the/DT future/NN ,/, "/'' Anifah/NNP
told/VBD visiting/VBG and/CC local/JJ reporters/NNS after/IN
escorting/VBG Marty/NNP into/IN the/DT hotel/NN ./.

Seperti yang kita lihat, setiap token diikuti dengan garis miring dan tag yang diberikan.

Chunking

Proses POS tagging di atas belum cukup memberikan informasi mengenai struktur kalimat tersebut kepada kita. Dengan melakukan proses chunking kita akan mendapatkan cukup informasi mengenai struktur kalimat tersebut. Proses chunking sendiri akan bertugas dengan memberi batas setiap chunk pada kalimat. Chunk adalah sebuah/beberapa kata dalam kalimat yang masih terkait seperti frase. Input bagi proses chunking ini adalah kalimat hasil POS tagging.

# java opennlp.tools.lang.english.TreebankChunker
D:\models\english\chunk\EnglishChunk.bin.gz < D:\tag.txt
> H:\chunk.txt

Berikut ini adalah hasil proses chunking tersebut:

 "/`` [NP We/PRP ] [VP 'll/MD discuss/VB ] [PP [among/IN ]
[NP others/NNS ] [PP ]/IN ] [NP the/DT Aug./NNP 13/CD
incident/NN ] and/CC [VP try/VBP to/TO fix/VB ] [NP it/PRP ]
[ADVP so/RB ] ,/, [SBAR that/IN ] [NP any/DT similar/JJ
incidents/NNS ] [VP will/MD not/RB repeat/VB ] [PP in/IN ]
[NP the/DT future/NN ] ,/, "/'' [NP Anifah/NNP ] [VP told/VBD
visiting/VBG ] and/CC [NP local/JJ reporters/NNS ]
[PP after/IN ] [VP escorting/VBG ] [NP Marty/NNP ]
[PP into/IN ] [NP the/DT hotel/NN ] ./.

Seperti yang kita lihat proses chunking ini berusaha mengidentifikasi pasangan kata-pasangan kata yang merupakan sebuah kesatuan frase/chunk. Suatu pasangan kata yang merupakan chunk akan dibatasi oleh tanda [ ]. Dari hasil di atas, tampak pasangan kata “will not repeat”, “the future”, “local reporters”, “the hotel”, dsb.  adalah sebuah kesatuan chunk.

Parsing

Jika chunking di atas tadi menggunakan kalimat yang telah di-POS tagging sebagai input untuk pemrosesannya, proses parsing hanya membutuhkan kalimat yang telah ditokenisasi sebagai inputnya. Proses yang dilakukannya cukup lama sehingga tidak heran sampai memakan memory cukup besar. Parser akan melakukan pelabelan (tagging) pada setiap token dan mengelompokkan frase-frase ke dalam suatu hierarki, lalu membangun pohon kalimat dari hasil parsing tersebut. Berikut ini adalah command untuk menjalankan proses parsing (pastikan seluruh file training model yang ada di alamat ini telah diunduh dan kalimat yang digunakan sebagai input adalah kalimat yang telah ditokenisasi):

# java -Xmx350m opennlp.tools.lang.english.TreebankParser -d
D:\models\english\parser < D:\out.txt > H:\parse.txt

Hasil proses parsing untuk kalimat ini (file out.txt –> parse.txt) adalah:

(TOP (S (`` ") (S (NP (PRP We)) (VP (MD 'll) (VP (VB discuss)
(SBAR (IN [among) (S (NP (NNS others)) (VP (VP (VBP ]) (NP
(DT the) (NNP Aug.) (CD 13) (NN incident))) (CC and) (VP
(VB try) (S (VP (TO to) (VP (VB fix) (NP (PRP it)) (ADVP
(RB so)) (, ,) (SBAR (IN that) (S (NP (DT any) (JJ similar)
(NNS incidents)) (VP (MD will) (RB not) (VP (VB repeat) (PP
(IN in) (NP (DT the) (NN future))))))))))))))))) (, ,) ('' ")
(NP (NNP Anifah)) (VP (VP (VBD told) (VP (VBG visiting)))
(CC and) (VP (NP (JJ local) (NNS reporters)) (PP (IN after)
(S (VP (VBG escorting) (NP (NNP Marty)) (PP (IN into) (NP
(DT the) (NN hotel)))))))) (. .)))

Named-Entity Detection

Sesuai dengan namanya, task yang satu ini bertugas untuk mengidentifikasi kata-kata yang merupakan suatu nama dari entitas tertentu. Entitas-entitas yang sudah didukung dalam training model bahasa Inggris yang disediakan OpenNLP adalah meliputi date, location, money, organization, percentage, person, dan time. Input dari task ini adalah kalimat biasa yang masih belum dilakukan pemrosesan sama sekali.

# java -Xmx200m opennlp.tools.lang.english.NameFinder
D:\models\english\namefind\date.bin.gz < D:\article.txt
> H:\date.txt

Hasil dari pemrosesan tersebut, yaitu name-finding untuk entitas date, adalah sebagai berikut:

"We'll discuss [among others] the <date>Aug. 13</date>
incident and try to fix it so, that any similar incidents
will not repeat in the future," Anifah told visiting and
local reporters after escorting Marty into the hotel.

Tampak dari hasil di atas frase “Aug. 13” diapit oleh label “<date>” sebagai penanda bahwa ia adalah suatu objek date.

Sebenarnya masih ada satu task lagi yang dapat dilakukan oleh tools OpenNLP ini, yaitu Coreference. Coreference itu apa? Gampangnya coreference itu terjadi jika terdapat dua kata atau lebih merujuk pada suatu objek atau “maksud” yang sama. Misalkan ada kalimat, “Tadi siang saya melihat Dhito di kampus. Dia sedang membaca buku di perpustakaan.” Dari kedua kalimat itu kata “dia” dan “Dhito” merujuk pada objek yang sama oleh karena itu keduanya disebut coreferent.

Nah, dari berbagai task pemrosesan yang didukung oleh OpenNLP selanjutnya kita dapat memanfaatkannya untuk pengembangan aplikasi yang lebih besar. Siapa tahu di antara teman-teman mungkin ada yang berminat membuat aplikasi pemeriksa jawaban essay misalnya… 🙂 dan masih banyak aplikasi lainnya yang dapat dikembangkan dalam bidang NLP ini. Memang untuk mendalami NLP ini rasanya kita harus belajar juga ilmu linguistik atau kalau di sekolah dulu mungkin pelajaran Bahasa Indonesia kali ya… 🙂

Advertisement

4 thoughts on “Mencoba Tools OpenNLP

  1. Jeany

    Dhito, saya tergolong pemula dalam NLP, mungkin anda dapat membantu saya.. Saya sedang mempelajari WSD dalam bahasa inggris, dan ingin mencoba membuat aplikasi WSD

    1. perbedaan antara openNLP (java) dan sharpNLP (c#). mana yang lebih sering/nyaman/mudah dipakai?
    2. adakah forum indonesia mengenai NLP/OpenNLP yang cukup populer 😀

    terimakasih Dhito.

    Like

    Reply
    1. otidh Post author

      Sama dengan saya, mas/mbak. Saya juga masih pemula. Baru akhir-akhir ini saya mempelajari NLP. Tentang sharpNLP terus terang saya baru dengar. Saya juga butuh banget forum seperti itu buat diskusi ttg NLP. Sejauh ini saya cuma diskusi saja sama tmn2 di kampus.

      Like

      Reply
  2. zh

    mas,pernah pake NLPstanford. ni sekarang aku lagi ngerjain TA tentang postag juga. aku ngembangin pake java. nah, caranya buat dapetin Noun-nya aja tu gimana ya??apa manual dari hasil string-nya??trus, cara chunking di stanford NLP gimana?ni saya pake java.makasi..

    faza,S1 Sistem informasi ITS.

    Like

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s