Cara Mengekstrak Kalimat dari Teks Menggunakan Modul Python NLTK

Natural Language Toolkit (NLTK) adalah modul pemrosesan bahasa dan teks untuk Python. NLTK dapat menganalisis, memproses, dan menandai teks yang tersedia dalam banyak bahasa berbeda menggunakan perpustakaan korpora bawaannya dan kumpulan besar data leksikal. Python adalah salah satu bahasa pemrograman paling populer yang digunakan dalam ilmu data dan pemrosesan bahasa, terutama karena keserbagunaan bahasa dan ketersediaan modul yang berguna seperti NLTK. Artikel ini akan menjelaskan cara mengekstrak kalimat dari paragraf teks menggunakan NLTK. Kode dalam panduan ini telah diuji dengan Python 3.8.2 dan NLTK 3.4.5 di Ubuntu 20.04 LTS.

Menginstal NLTK di Linux

Untuk menginstal NLTK di Ubuntu, jalankan perintah di bawah ini:

$ sudo apt install python3-nltk

Paket NLTK tersedia di semua distribusi Linux utama. Cari kata kunci “NLTK” di manajer paket untuk menginstal paket. Jika karena alasan tertentu, NLTK tidak tersedia di repositori distribusi Anda, Anda dapat menginstalnya dari manajer paket pip dengan menjalankan perintah di bawah ini:

$ pip install --user -U nltk

Perhatikan bahwa Anda harus menginstal pip terlebih dahulu dari manajer paket Anda agar perintah di atas berfungsi. Pada beberapa distribusi, ini bisa disebut pip3. Anda juga dapat mengikuti petunjuk pemasangan terperinci yang tersedia di situs web resmi NLTK.

Mengekstrak Kalimat dari Paragraf Menggunakan NLTK

Untuk paragraf tanpa tanda baca dan spasi yang rumit, Anda dapat menggunakan tokenizer kalimat NLTK bawaan, yang disebut “Punkt tokenizer,” yang hadir dengan model yang telah dilatih sebelumnya. Anda juga dapat menggunakan model data terlatih Anda sendiri untuk menandai teks menjadi kalimat. Model data yang dilatih khusus berada di luar cakupan artikel ini, jadi kode di bawah ini akan menggunakan tokenizer Punkt English bawaan. Untuk mengdownload file sumber daya Punkt, jalankan tiga perintah berikut secara berurutan, dan tunggu hingga downloadan selesai:

$ python3
$ import nltk
$ nltk.download('punkt')

Sebuah paragraf dari “Alice’s Adventures in Wonderland” akan digunakan dalam contoh kode di bawah ini:

import nltk

para = '''Either the well was very deep, or she fell very slowly, for she had
plenty of time as she went down to look about her and to wonder what was going
to happen next. First, she tried to look down and make out what she was coming to,
but it was too dark to see anything; then she looked at the sides of the well, and
noticed that they were filled with cupboards and book-shelves; here and there she
saw maps and pictures hung upon pegs. She took down a jar from one of the shelves
as she passed; it was labelled 'ORANGE MARMALADE', but to her great disappointment it
was empty: she did not like to drop the jar for fear of killing somebody, so managed
to put it into one of the cupboards as she fell past it.'''

tokens = nltk.sent_tokenize(para)
for t in tokens:
print (t, "n")

Menjalankan kode di atas akan memberi Anda output berikut:

Either the well was very deep, or she fell very slowly, for she had plenty of time as
 she went down to look about her and to wonder what was going to happen next.

First, she tried to look down and make out what she was coming to, but it was too dark
to see anything; then she looked at the sides of the well, and noticed that they were
filled with cupboards and book-shelves; here and there she saw maps and pictures hung
upon pegs.

She took down a jar from one of the shelves as she passed; it was labelled 'ORANGEMARMALADE',
but to her great disappointment it was empty: she did not like to drop the jar for fear of
killing somebody, so managed to put it into one of the cupboards as she fell past it.

Tokenizer kalimat Punkt bawaan berfungsi dengan baik jika Anda ingin menandai paragraf sederhana. Setelah mengimpor modul NLTK, yang perlu Anda lakukan hanyalah menggunakan metode “sent_tokenize()” pada korpus teks besar. Namun, tokenizer kalimat Punkt mungkin tidak mendeteksi kalimat dengan benar ketika ada paragraf kompleks yang berisi banyak tanda baca, tanda seru, singkatan, atau simbol berulang. Tidak mungkin mendefinisikan cara standar untuk mengatasi masalah ini. Anda harus menulis kode khusus untuk mengatasi masalah ini menggunakan regex, manipulasi string, atau dengan melatih model data Anda sendiri alih-alih menggunakan model data Punkt bawaan.

Anda juga dapat mencoba mengubah model Punkt yang ada untuk memperbaiki tokenisasi yang salah dengan menggunakan beberapa parameter tambahan. Untuk melakukannya, ikuti dokumentasi tokenisasi Punkt resmi yang tersedia di sini. Untuk menggunakan tweak kustom Anda sendiri, sedikit perubahan pada kode diperlukan:

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters

para = '''Either the well was very deep, or she fell very slowly, for she had plenty
of time as she went down to look about her and to wonder what was going to happen
next. First, she tried to look down and make out what she was coming to, but it was
too dark to see anything; then she looked at the sides of the well, and noticed
that they were filled with cupboards and book-shelves; here and there she saw maps
and pictures hung upon pegs. She took down a jar from one of the shelves as she
passed; it was labelled 'ORANGE MARMALADE', but to her great disappointment it was
empty: she did not like to drop the jar for fear of killing somebody, so managed to
put it into one of the cupboards as she fell past it.'''

punkt_params = PunktParameters()
punkt_params.abbrev_types = set(['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer(punkt_params)
tokens = tokenizer.tokenize(para)

for t in tokens:
    print (t, "n")

Kode di atas melakukan pekerjaan yang sama dengan metode “sent_tokenize()”. Namun, Anda sekarang dapat menentukan aturan Anda sendiri menggunakan metode bawaan dan meneruskannya sebagai argumen, seperti yang dijelaskan dalam dokumentasi. Misalnya, beberapa singkatan telah ditambahkan ke kode di atas. Jika singkatan ini diikuti dengan tanda baca, mereka tidak akan dipecah menjadi kalimat baru. Perilaku normalnya adalah menggunakan titik atau titik sebagai indikasi akhir kalimat.

Kesimpulan

NLTK dan metode tokenisasinya cukup efisien dalam tokenizing dan pemrosesan data teks. Namun, model yang telah dilatih sebelumnya mungkin tidak berfungsi 100% dengan jenis teks yang berbeda. Anda mungkin perlu meningkatkan model yang ada, melatih dan menyediakan sendiri, atau menulis kode Anda sendiri untuk memperbaiki anomali.

Related Posts