() translation by (you can also view the original English article)
Kamu mungkin pernah menemui buku teks yang besar dan menemukan indeks di akhirnya. Dengan buku cetak, akan memudahkan jika memiliki indeks untuk membantu navigasi ke halaman yang dibutuhkan. Saya baru-baru ini mempublikasi sebuah buku pendek, dan saat perlu membuat indeks, tugas tersebut nampak sulit walau buku tersebut sangat pendek. Buku tersebut belum memiliki sebuah indeks.
Jika kamu pernah mengikuti artikel saya, kamu akan perhatikan saya umumnya menulis tentang Python dan bagaimana itu bisa membantu kita memecahkan berbagai masalah dengan cara yang sederhana. Jadi mari kita lihat bagaimana membuat indeks buku menggunakan Python.
Tanpa berlama-lama, mari kita mulai.
Apakah Indeks Buku Itu?
Saya rasa sebagian besar dari kamu sudah tahu apa indeks buku, tapi saya hanya ingin menjelaskan konsep ini dengan cepat.
Indeks buku adalah koleksi kata atau frase yang dianggap penting untuk buku tersebut, bersama dengan lokasinya dalam buku. Indeks tidak berisi semua kata atau frane dalam buku. Alasannya akan kita lihat pada bagian berikutnya.
Apakah yang membuat sebuah indeks buku yang baik?
Bagaimana jika kamu memiliki indeks di mana kamu bisa menemukan semua kata dalam buku? Bukankah hal itu akan dianggap indeks yang diinginkan semua orang? Salah!
Indeks yang akan dipilih semua orang, atau apa yang dianggap indeks yang baik, adalah indeks yang menunjukkan posisi kata-kata penting atau frasa dalam buku. Kamu mungkin bertanya-tanya alasan untuk itu. Mari ambil sebuah contoh. Misalnya kita memiliki buku yang hanya berisi kalimat berikut:
My book is short
Apa yang akan terjadi jika kita mencoba membuat indeks setiap kata dan frase dalam kalimat pendek tersebut, dengan asumsi lokasi adalah jumlah kata pada kalimat tersebut. Berikut adalah indeks yang dihasilkan:
1 |
my book is short: 1 |
2 |
my book is: 1 |
3 |
my book: 1 |
4 |
my: 1 |
5 |
short: 4 |
6 |
is short: 3 |
7 |
is: 3 |
8 |
book is short: 2 |
9 |
book is: 2 |
10 |
book: 2 |
Dari contoh di atas, kita bisa lihat bahwa indeks seperti itu akan lebih besar dari bukunya sendiri! Jadi indeks yang baik adalah yang memiliki kata dan frase penting untuk para pembaca.
Persiapan
Natural Language Toolkit (NLTK)
Pada tutorial ini, kita akan menggunakan library Natural Language Toolkit (NLTK), yang akan digunakan untuk berkerja dengan data bahasa manusia. Seperti yang disebutkan pada dokumentasi, NLTK disebut 'perangkat yang baik untuk mengajarkan, dan bekerja dalam komputasi linguistik dengan Python', dan 'library yang hebat untuk bermain dengan bahasa natural'.
Saya menulis tutorial ini dari mesin Ubuntu saya, dan langkah-langkah menginstall NLTK pada bagian ini akan relevan untuk sistem operasi Ubuntu. Tapi jangan khawatir, kamu bisa menemukan langkah menginstall NLTK pada sistem operasi lain pada website NLTK.
Untuk menginstall NLTK, saya akan menggunakan pip. Jika kamu belum memiliki pip, kamu bisa menggunakan perintah berikut pada terminal untuk menginstall pip
:
sudo easy_install3 pip
Untuk memastikan kamu sudah memiliki pip terinstall, ketik perintah berikut:
pip --version
Kamu akan mendapatkan yang seperti berikut:
pip 8.1.2 from /usr/local/lib/python3.5/dist-packages/pip-8.1.2-py3.5.egg (python 3.5)
Sekarang, untuk menginstall NLTK, cukup jalankan perintah berikut pada terminalmu:
sudo pip install -U nltk
Kamu bisa menguji instalasi nltk dengan mengetik python
, lalu mengimpor nltk pada terminal. Jika kamu mendapat ImportError: No module named nltk
, thread berikut mungkin akan membantumu.
File test
Di titik ini, kita akan membutuhkan file test (buku) untuk kita buat indeksnya. Saya akan gunakan buku ini: The Rate of Change of the Rate of Change dari EFF. Kamu bisa mendownload file teks buku dari Dropbox. Tentu saja kamu bisa menggunakan buku apa saja yang kamu pilih; kamu hanya perlu sesuatu untuk digunakan eksperimen dalam tutorial ini.
Program
Kita mulai dengan bagian menarik dari tutorial ini, program yang akan membantu kita membuat indeks buku. Hal pertama yang ingin kita lakukan adalah menemukan frekuensi sebuah kata dalam buku. Saya sudah menunjukkan bagaimana kita bisa melakukannya pada tutorial lain, tapi saya ingin menunjukkan bagaimana kita bisa melakukannya menggunakan library NLTK.
Hal tersebut bisa kita lakukan sebagai berikut:
1 |
import nltk, collections |
2 |
from nltk.collocations import * |
3 |
|
4 |
frequencies = collections.Counter() |
5 |
with open('bigd10.txt') as book: |
6 |
read_book = book.read() |
7 |
words = nltk.word_tokenize(read_book) |
8 |
|
9 |
for w in words: |
10 |
frequencies[w] += 1 |
11 |
|
12 |
print (frequencies) |
Saat kamu jalankan program, kamu akan melihat bahwa kita memiliki sebuah daftar kata yang sangat panjang dan frekuensinya.
Sebelum maju lebih jauh, kita analisis kode tersebut terlebih dahulu. Pada baris berikut:
1 |
frequencies = collections.Counter() |
Kita menggunakan fungsi Counter()
untuk mendapatkan frekuensi kata dalam buku (berapa kali kata muncul dalam buku).
Sedangkan word_tokenize
membagi kalimat menjadi bagian-bagian. Kita lihat contoh sederhana bagaimana word_tokenize
bekerja:
1 |
from nltk.tokenize import word_tokenize |
2 |
sentence = 'My name is Abder. I like Python. It\'s a pretty nice programming language' |
3 |
print (word_tokenize(sentence)) |
Hasil dari skrip di atas adalah sebagai berikut:
['My', 'name', 'is', 'Abder', '.', 'I', 'like', 'Python', '.', 'It', "'s", 'a', 'pretty', 'nice', 'programming', 'language']
Lalu kita proses semua kata dan temukan frekuensi setiap kata.
Bagaimana dengan frase (kombinasi kata)? Hal itu disebut collocations (urutan kata yang sering muncul bersamaan). Contoh collocation adalah bigram, yaitu daftar pasangan kata. Selain itu, ada juga trigrams (kombinasi tiga kata), dan seterusnya (misalnya n-grams).
Misalnya kita ingin mengekstrak bigram dari buku kita. Kita bisa lakukan sebagai berikut:
1 |
bigram = nltk.collocations.BigramAssocMeasures() |
2 |
finder = BigramCollocationFinder.from_words(words) |
3 |
finder.apply_freq_filter(2) |
Nomor 2
pada fungsi apply_freq_filter()
memberi tahu kita untuk mengabaikan semua bigram yang muncul kurang dari dua kali dalam buku ini.
Jika kita ingin menemukan 30
bigram yang paling sering muncul di buku, kita bisa menggunakan kode berikut:
1 |
print (finder.nbest(bigram.pmi, 30)) |
Akhirnya, jika kita ingin menemukan lokasi, dalam kasus kita adalah di mana kata atau frase tersebut muncul di buku (bukan nomor halaman), kita bisa lakukan hal berikut:
1 |
print (read_book.index('computer')) |
2 |
print (read_book.index('Assisted Reporting')) |
Pernyataan di atas sepertinya mengembalikakn lokasi kata pada sebuah kalimat, sama dengan yang sudah kita lihat pada contoh kalimat di awal tutorial.
Menggabungkan semuanya
Kita tulis yang sudah kita pelajari dalam sebuah skrip Python. Skrip berikut akan membaca buku kita, dan mengembalikan frekuensi kata, berserta dengan 30 bigram yang paling sering muncul di buku, dan ditambah lokasi kata dan frase dalam buku:
1 |
import nltk, collections |
2 |
from nltk.collocations import * |
3 |
|
4 |
frequencies = collections.Counter() |
5 |
with open('bigd10.txt') as book: |
6 |
read_book = book.read() |
7 |
words = nltk.word_tokenize(read_book) |
8 |
|
9 |
for w in words: |
10 |
frequencies[w] += 1 |
11 |
|
12 |
bigram = nltk.collocations.BigramAssocMeasures() |
13 |
finder = BigramCollocationFinder.from_words(words) |
14 |
finder.apply_freq_filter(2) |
15 |
|
16 |
print ('Those are the words and their frequency of occurrence in the book:') |
17 |
print (frequencies) |
18 |
print ('#################################################################') |
19 |
print ('Those are the 30 most bigrams occurring in the book:') |
20 |
print (finder.nbest(bigram.pmi, 30)) |
21 |
print (read_book.index('computer')) |
22 |
print (read_book.index('Assisted Reporting')) |
Kesimpulan
Seperti yang kita lihat pada tutorial ini, bahkan teks yang pendek bisa menantang saat perlu membangun indeks untuk teks tersebut. Dan cara otomatis untuk membangun indeks yang optimal untuk sebuah buku belum bisa diterapkan.
Kita bisa memecahkan masalah ini menggunakan Python dan library NLTK, di mana kita bisa memilih kata dan frase terbaik untuk indeks buku berdasarkan frekuensi kemunculan (dengan kata lain, tingkat kepentingan) kata dalam buku.
Tentu saja, masih banyak yang bisa kamu lakukan dengan NLTK, seperti yang ditampilkan pada dokumentasi NLTK. Kamu juga bisa membaca buku Natural Language Processing with Python jika ingin lebih dalam menggunakan library ini.