POS Tagger Bahasa Indonesia dengan Python

Posting sebelumnya: POS Tagger dengan Syntaxnet

Posting terkait: POS Tagger dan Dependency Parser dengan StanfordNLP

Secara bertahap, saya dan istri akan migrasi dari Java ke Python. Salah satu yang kami perlukan adalah POS (Part of Speech)-Tagger Bahasa Indonesia.

Ini cara yang paling sederhana  karena saya sudah sediakan modelnya, untuk cara trainingnya ada di bagian bawah.

Saya menggunakan CRFTagger, jadi library yang perlu diinstall: numpy, nltk dan python-crfsuite.

Lalu download pretrained model (1.6MB) yang saya buat berdasarkan data Fam Rashel (200rb-an token) di https://drive.google.com/open?id=12yJ82GzjnqzrjX14Ob_p9qnPKtcSmqAx

Untuk menggunakannya (sesuaikan path jika diperlukan):

from nltk.tag import CRFTagger
ct = CRFTagger()
ct.set_model_file('all_indo_man_tag_corpus_model.crf.tagger')
hasil = ct.tag_sents([['Saya','bekerja','di','Bandung']])
print(hasil)

Hasilnya akan seperti ini:

[[(‘Saya’, ‘PRP’), (‘bekerja’, ‘VB’), (‘di’, ‘IN’), (‘Bandung’, ‘NNP’)]]

Selesai… gampang kan 🙂

Jika ada yang berminat untuk training sendiri, ada beberapa dataset POS-Tag Bahasa Indonesia:

https://github.com/UniversalDependencies/UD_Indonesian
https://github.com/famrashel/idn-tagged-corpus
http://www.panl10n.net/english/OutputsIndonesia2.htm
https://lindat.mff.cuni.cz/repository/xmlui/handle/11234/1-1989

Saya menggunakan data milik Fam Rashel, code untuk training-nya adalah sbb (mungkin belum efisien, saya masih belajar Python):

from nltk.tag import CRFTagger

jumSample = 500000
namaFile = "/home/yudiwbs/dataset/pos-tag-indonesia/idn-tagged-corpus-master/Indonesian_Manually_Tagged_Corpus.tsv"
with open(namaFile, 'r', encoding='utf-8') as f:
    lines = f.read().split('\n')

pasangan = []
allPasangan = []

for line in lines[: min(jumSample, len(lines))]:
    if line == '':
        allPasangan.append(pasangan)
        pasangan = []
    else:
        kata, tag = line.split('\t')
        p = (kata,tag)
        pasangan.append(p)

ct = CRFTagger()
ct.train(allPasangan,'all_indo_man_tag_corpus_model.crf.tagger')
#test
hasil = ct.tag_sents([['Saya','bekerja','di','Bandung'],['Nama','saya','Yudi']])
print(hasil)

Dokumentasi lengkap tentang lib POS-Tag NLTK dapat dilihat di: http://www.nltk.org/api/nltk.tag.html 

Untuk sekarang saya belum buat pengukuran kinerja model yang dihasilkan.

Iklan

33 tanggapan untuk “POS Tagger Bahasa Indonesia dengan Python”

    1. Di posting tambahkan saja
      [[code language="python"]] [[/code]]
      (kurung siku-nya satu saja, ini saya jadikan dua karena kalau tidak di-comment jadi hilang)
      seingat saya sudah disediakan WordPress (tdk perlu install plugin)

      1. iya pak Alhmduliilah sudah berhasil, sy nanya lagi pak, boleh ya,

        misalkan sya sudah memeperoleh hasil seperti diatas [[(‘Saya’, ‘PRP’), (‘bekerja’, ‘VB’), (‘di’, ‘IN’), (‘Bandung’, ‘NNP’)]], selanjutnya jika sy hanya ingin memanggil hasil pos tag saja misalnya:

        [‘PRP’, ‘VB’, ‘IN’, ‘NNP’], kira-kira bagaimana yah pak?? seolahnya sy masih bingung variabel mana yang dijadikan sebagai key? terimakasih

      2. for tokenTag in hasil[0]:
              token, tag = tokenTag;
              print(token+”–>”+tag);

        itu hasilnya 2 nested array lalu didalamnya tuple.

      3. Baik pak terima kasih, oh ya pak boleh saya tahu corpus yang bapak gunakan pada post tag ini, soalnya saya berniat memasukan post tag bpk di tugas sy, tapi saya membutuhkan data corpusnya sebagai pelaporannya? sebelumnya terimakasih pak dan mohon bantuannya.

    1. Code yang atas untuk menggunakan pretrained model (model yang sudah ditrain oleh saya, tinggal pake), code yang bawah kalau mau buat model sendiri.

  1. permisi mas, kalau saya mau membaca file pretrained model yang mas sediakan pakai apa ya? saya mencoba untuk memakai notepad++ tidak bisa

  2. waaah penelitian nya sama pak, bisa di jadikan literatur, bookmark dulu. hee terima kasih pak yudiwbs. kemaren buat SPOK dengan python dan NLTK, POSTAG yang di pake miliki alfan f. wicaksono. semoga kedepan trus berkembang penelitian nya pak.

      1. Udah solve pak. Untuk keempat data training itu apa bapa udh dicoba semua? Kira-kira lebih akurat yg mana dari keempat daya training tsb?

  3. Pak, saya mengikuti kode yg bapak tuliskan (kode yg paling bawah). Dengan data text milik saya sendiri. Sebelumnya saya juga pakai POSTAG milik Fam Rashel, tapi saya lgsg clone dari repositori mereka dan menjalankan file shell (./tag.sh) sesuai dengan tutorial yg mereka berikan di github. Saya bandingkan dgn cara yg bapak lakukan ini (python + nltk), hasil tagging-nya banyak yg berbeda. Kira2 itu kenapa ya pak?

  4. Maaf Pak, itu isi file (all_indo_man_tag_corpus_model.crf.tagger) apa bisa di edit ? kalau bisa menggunakan software apa ?? mohon jawabannya ya pak, ini terkait dengan skripsi saya. terimakasih

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google

You are commenting using your Google account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s