Contoh Program Text Summarization Menggunakan Python NLTK

Contoh Program Text Summarization Menggunakan Python NLTK. Program Text Summarization adalah sebuah program yang dibuat untuk membuat sebuah ringkasan dari sebuah dokumen dengan tetap mempertahankan point penting dari dokumen asli. Program Text Summarization sangat penting untuk kita pelajari dan kembangakan. Mengapa Program Text Summarization sangat penting ?. Coba anda bayangkan ketika anda diberikan setumpuk dokumen (ratusan dan bahkan ribuan dokumen) dan diminta untuk membuat teks ringkasannya, tentu saja akan sangat melelahkan.
Contoh Program Text Summarization Menggunakan Python NLTK

Dengan menggunakan sebuah Program Text Summarization maka meringka sebuah dokumen yang sangat banyak akan sangat mudah. Anda hanya perlu menjalankan program dan tunggu hingga program selesai meringka, maka hasil ringkasan dokumen akan anda dapatkan. Selain itu, dengan menggunakan Text Summarization maka kita dapat mengetahui kata dan bahkan topik apa saja yang sedang hangat dibicarakan oleh banyak orang dari teks tersebut.

Baca Juga : Contoh Program Operasi Matriks Ordo 2x2 Menggunakan Python

Dengan melakukan Text Summarization maka kita dapat memperoleh data yang sangat penting. Contohnya kita melakukan Text Summarization pada semua respon komentar terhadap produk yang pada sebuah toko online. Dengan memanfaatkan Text Summarization maka kita bisa mengetahui dan mengelompokan apa saja yang menjadi keluhan dan masukan dari para pembeli yang paling dominan. Dengan mengetahui informasi ini maka kita dapat dengan mudah memberikan solusi atau memperbaiki kualitas layanan sesuai dengan apa yang dikeluhkan.

Pada kesempatan kali ini gammafisblog.com akan berbagi kepada anda tentang "Contoh Program Text Summarization Menggunakan Python NLTK". Saya menggunakan aplikasi anaconda sebagai tools untuk membuat program ini. Namun, anda bisa menggunakan program apa saya yang suport terhapad bahasa python. Anda juga bisa menggunakan Google Colaboratory ataupun melalui kaggle.com. Untuk cara menggunakanya silahkan cari di google.

Contoh Program Text Summarization Menggunakan Python NLTK

Dibawah ini adalah contoh program Text Summarization. Anda bisa mendownload file tersebut secara gratis. File tersebut berekstensi .ipynb, artinya anda membutuhkan sebuah software untuk membukanya. Anda bisa membukanya menggunakan aplikasi ananconda, google colaboratory dan melalui website kaggle.com. Saya sendiri membuat aplikasi anaconda untuk membuat program ini. Jadi, saya juga menyerankan kepada anda menggunakan aplikasi yang sama seperti saya.

Kelebihan menggunakan aplikasi anaconda adalah aplikasi ini dijalankan di localhost dan tidak  membutuhkan koneksi internet untuk menjalankanya. Namun, ada kekurangannya seperti anda harus menginstal beberapa library secara manual. Sedangkan jika anda menggunakan google colaboratory dan kaggle.com maka kebanyakan library telah terinstal dan anda hanya menggunakannya saja.

Berikut adalah contoh program text summarization menggunakan bahasa pemrograman python NLTK :

Catatan : Sebelum anda menjalankan program ini, maka pastikan anda telah menginstal terlebih dahulu NLTK melalui command prompt anaconda.

# Start : Melakukan Import Library

from gensim.summarization.summarizer import summarize
from gensim.summarization import keywords
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem.wordnet import WordNetLemmatizer
import string
import gensim
import gensim.corpora as corpora
from gensim.utils import simple_preprocess
from gensim.models import CoherenceModel
import pyLDAvis
import pyLDAvis.gensim 
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")
import urllib
from bs4 import BeautifulSoup
import requests

import os
import nltk
import nltk.corpus


# Mencari lokasi Folder Corpora
path = nltk.data.find('corpora')
print(path)
print(os.listdir(nltk.data.find('corpora')))

nltk.corpus.treebank.fileids()

#Data yang terdapat pada chesterton-brown.txt disimpat dengan variabel data_brown
data_treebank = nltk.corpus.treebank.words('wsj_0100.mrg')
print(data_treebank)

#Data yang terdapat pada wsj_0100.mrg disimpat dengan variabel data_treebank
data_treebank = nltk.corpus.treebank.words('wsj_0100.mrg')
print(data_treebank)

# melakukan print data data_treebank sepanjang 300 kata
for word in data_treebank[:300]:
    print(word, sep = ' ', end = ' ')

# Menggabungkan data_treebank
text = " ".join(data_treebank[:1000])
text

#The “get_summary” function generate the summary by using summarize method from gensim.summarizer
def get_summary(text, pct):
    summary = summarize(text,ratio=pct,split=True)
    return summary

#The “get_keywords” function filters the noun and adjective words in the source text as the keywords
def get_keywords(text):
    res = keywords(text, ratio=0.1, words=None, split=False, scores=False, pos_filter=('NN', 'JJ'), lemmatize=False, deacc=False)
    res = res.split("\n")
    return res

print('The Input Text')
print('--------------------------')
print(text)
print('--------------------------')
print('Printing Summary')
print('--------------------------')
print(get_summary(text, 0.3))
print('--------------------------')
print('Printing Keywords')
print('--------------------------')
print(get_keywords(text))

def sent_to_words(sentences):
    for sentence in sentences:
        yield(gensim.utils.simple_preprocess(str(sentence), deacc=True))

list(sent_to_words(get_summary(text, 0.3)))

import re
text_baru = re.sub('[^ a-zA-Z0-9]', '' , text)
print(text_baru)

# Melakukan tokenize
stop_words = set(stopwords.words('english'))
lemma = WordNetLemmatizer()
word_tokens = word_tokenize(str(text_baru))
filtered_sentence = [w for w in word_tokens if not w in stop_words]
normalized = " ".join(lemma.lemmatize(word) for word in filtered_sentence)

print(normalized)

from nltk import ngrams
n = 2
total_grams = []
number_of_grams = ngrams(normalized.split(), n)
for grams in number_of_grams:
    total_grams.append(grams)


# Visualisasi Hasil

from wordcloud import WordCloud
import matplotlib.pyplot as plt

wordcloud = WordCloud(max_font_size=60).generate(normalized)
plt.figure(figsize=(16,12))

'''plot wordcloud in matplotlib'''

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

count = {}
for w in normalized.split():
    if w in count:
        count[w] += 1
    else:
        count[w] = 1
for word, times in count.items():
    if times > 5:
        print("%s was found %d times" % (word, times))


from nltk.book import text2 as content
#*** Introductory Examples for the NLTK Book ***
#Loading text1, ..., text9 and sent1, ..., sent9
#Type the name of the text or sentence to view it.
#Type: 'texts()' or 'sents()' to list the materials.
#text1: Moby Dick by Herman Melville 1851
#text2: Sense and Sensibility by Jane Austen 1811
#text3: The Book of Genesis
#text4: Inaugural Address Corpus
#text5: Chat Corpus
#text6: Monty Python and the Holy Grail
#text7: Wall Street Journal
#text8: Personals Corpus
#text9: The Man Who Was Thursday by G . K . Chesterton 1908

plt.figure(figsize=(8,5))
topics = ['Hahn', 'GeorgiaPacific', 'company', 'Mr', 'say']
content.dispersion_plot(topics)

def sent_to_word(sentence):
    for sentence in sentence:
        yield(gensim.utils.simple_preprocess(str(sentence), deacc=True))

import gensim
from gensim import corpora
tokenized_sent = list(sent_to_word(filtered_sentence))
dictionary = corpora.Dictionary(tokenized_sent)
doc_term_matrix = [dictionary.doc2bow(doc) for doc in tokenized_sent]
doc_term_matrix

# Uji Coba num_topics=2 untuk mengetahui tingkat Koherensi
Lda = gensim.models.ldamodel.LdaModel
ldamodel = Lda(doc_term_matrix, num_topics=2, id2word=dictionary, passes=100)

print('\nPerplexity: ', ldamodel.log_perplexity(doc_term_matrix))
coherence_model_lda=CoherenceModel(
    model=ldamodel,
    texts=tokenized_sent,
    dictionary=dictionary,
    coherence='c_v'
)
coherence_lda = coherence_model_lda.get_coherence()
print("\nCoherence Score ", coherence_lda)

# Uji Coba num_topics=10 untuk mengetahui tingkat Koherensi
Lda = gensim.models.ldamodel.LdaModel
ldamodel = Lda(doc_term_matrix, num_topics=10, id2word=dictionary, passes=100)

print('\nPerplexity: ', ldamodel.log_perplexity(doc_term_matrix))
coherence_model_lda=CoherenceModel(
    model=ldamodel,
    texts=tokenized_sent,
    dictionary=dictionary,
    coherence='c_v'
)
coherence_lda = coherence_model_lda.get_coherence()
print("\nCoherence Score ", coherence_lda)

# Uji Coba num_topics=5 untuk mengetahui tingkat Koherensi
Lda = gensim.models.ldamodel.LdaModel
ldamodel = Lda(doc_term_matrix, num_topics=5, id2word=dictionary, passes=100)

print(ldamodel.print_topics(num_topics=5, num_words=20))

print('\nPerplexity: ', ldamodel.log_perplexity(doc_term_matrix))
coherence_model_lda=CoherenceModel(
    model=ldamodel,
    texts=tokenized_sent,
    dictionary=dictionary,
    coherence='c_v'
)
coherence_lda = coherence_model_lda.get_coherence()
print("\nCoherence Score ", coherence_lda)

pyLDAvis.enable_notebook()
vis=pyLDAvis.gensim.prepare(ldamodel, doc_term_matrix, dictionary)
vis


Baca Juga : Belajar Konsep Dasar For Loop (Perintah Perulangan) pada Java

Berikut adalah code program Text Summarization dengan formast .ipynb yang dapat anda download.


Hasil dan Pembahasan Text Summarization

Koherensi adalah keterkaitan antara bagian yang satu dengan bagian yang lainnya, sehingga kalimat memiliki kesatuan makna yang utuh (Brown dan Yule dalam Mulyana, 2005: 30). Artinya tingkat koherensi menyetakan sebuah hubungan atau keterkaitan topik sehingga membentuk sebuah teks/kalimat dengan satu kesatuan makna. Berdasarkan hasil yang diperoleh, nilai koherensi sangat dipengaruhi oleh jumlah topik pembahasan dalam sebuh teks summary. Jumlah topik pada program ini di inisialisasikan dengan variabel num_topics. Hubungan jumlah topik dan tingkat koherensi adalah berbending terbalik. Hal ini berdarkan hasil uji coba yang telah dilakukan. Semakin banyak jumlah topik yang ingin diketahui dalam sebuah teks maka tingkan koherensi akan semakin rendah. Pada num_topics = 2 diperoleh tingkat koherensinya adalah 0.8599. Kemudian pada num_topics = 5 nilai koherensi yang diperoleh 0.8435 dan pada num_topics = 10 diperoleh nilai koherensi adalah 0.8298. Hal ini membuktikan jumlah topik yang ingin diketahui menentukan nilai koherensi.

Pada definisi num_topics = 5, maka Intertopic Distance Map akan menginterpertasikan hasil dari 5 topik dalam summary teks. Intertopic Distance Map memiliki 2 warna diagram batang. Untuk warna biru muda menunjukan Overall term frequency (frekuensi secara keseluruhan atau gelobal). Sedangkan warna merah menunjukan Estimated term frequency within the selected topic (Frekuensi yang diperkirakan dalam topik yang dipilih). Artinya jika kita memilih atau Selected Topic maka akan ada 2 interpertasi, yaitu frekuensi topik global dan frekuensi dari topik itu sendiri. Contohnya saat kita memilih topik 3 maka kata-kata yang memiliki frekuensi 5 terbesar adalah "hahn, the, university, made dan bid".

Pada 5 kata dengan frekuensi terbesar ada 2 warna yang terlihat diagram batang diatas, yaitu warna merah (frekuensi topik) dan biru (frekuensi global). Yang mana nilai frekuensi global lebih besar dari pada nilai frekuensi kata dalam topik. Artinya setaip kata dalam topik memiliki hubungan atau koherensi terhadap topik secara global. Hal ini akan sama jika kita pada topik yang ke 4, kata-kata yang memiliki frekuensi 5 terbesar adalah "Company, but, vice, in dan paper". Dari sini kita bisa lihat bahwa setiap topik memiliki kata dengan frekuensi terbesarnya masing masing. Namung setiap kata tersebut tetap memiliki hubungan dengan kata-kata secara global.

Oleh karena setiap topik memiliki kata dengan frekuensi terbesarnya masing-masing, artinya semakin diperbanyak topik maka tingkat hubungan (koherensi) antara topik akan berkurang. Hal inilah yang menyebabkan tingkat koherensi menurun seiring dengan penambahan topik yang ingn diketahui dalam sebuah teks. Jadi, secara garis besar dapat disimpulkan bahwa jumlah topik akan mempengaruhi nilai koherensi.

Baca Juga : Belajar Konsep Dasar IF dan ELSE pada Java

Penutup:
Itulah artikel tentang Contoh Program Text Summarization Menggunakan Python NLTK. Semoga artikel ini dapat memberikan manfaat untuk anda. Jangan lupa untuk share artikel ini kepada teman-teman anda dan jangan lupa juga untuk follow blog ini, agar penulis lebih semangat lagi dalam membuat artikel bermanfaat lainya. Mungkin itu saja pembahasan kali ini, akhir kata penulis ucapkan mohon maaf jika ada kesalahan dan sampai jumpa kembali.

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel