Mathematic, Natural Language Processing, Programming, Python

Program sederhana Sentiment Analysis menggunakan Python dan NLTK

Text mining dilakukan oleh komputer untuk mendapatkan sesuatu yang baru, sesuatu yang tidak diketahui sebelumnya atau menemukan kembali informasi yang tersirat secara implisit, yang berasal dari informasi yang diekstrak secara otomatis dari sumber-sumber data teks yang berbedabeda (Feldman & Sanger, 2007).

Text mining merupakan teknik yang digunakan untuk menangani masalah klasifikasi, clustering, information extraction dan information retrival (Berry & Kogan, 2010). Pada dasarnya proses kerja dari text mining banyak mengapdopsi dari penelitian Data Mining namun yang menjadi perbedaan adalah pola yang digunakan oleh text mining diambil dari sekumpulan bahasa alami yang tidak terstruktur sedangkan dalam Data Mining pola yang diambil dari database yang terstruktur (Han & Kamber, 2006).

Salah satu topik dalam text mining adalah sentiment analysis.

Sentiment analysis atau opinion mining adalah studi komputasional dari opiniopini orang, sentimen dan emosi melalui entitas dan atribut yang dimiliki yang diekspresikan dalam bentuk teks (Liu, 2012). Analisis sentimen akan mengelompokkan polaritas dari teks yang ada dalam kalimat atau dokumen untuk 2 mengetahui pendapat yang dikemukakan dalam kalimat atau dokumen tersebut apakah bersifat positif, negatif atau netral (Pang & Lee, 2008).

from nltk.classify import NaiveBayesClassifier
from nltk.corpus import subjectivity
from nltk.sentiment import SentimentAnalyzer
from nltk.sentiment.util import *

n_instances = 100
subj_docs = [(sent, 'subj') for sent in subjectivity.sents(categories='subj')[:n_instances]]
obj_docs = [(sent, 'obj') for sent in subjectivity.sents(categories='obj')[:n_instances]]
len(subj_docs)
len(obj_docs)

train_subj_docs = subj_docs[:80]
test_subj_docs = subj_docs[80:100]
train_obj_docs = obj_docs[:80]
test_obj_docs = obj_docs[80:100]

training_docs = train_subj_docs + train_obj_docs
testing_docs = test_subj_docs + test_obj_docs

sentiment_analyzer = SentimentAnalyzer()
all_words_neg = sentiment_analyzer.all_words([mark_negation(doc) for doc in training_docs])

unigram_feats = sentiment_analyzer.unigram_word_feats(all_words_neg, min_freq=4)
len(unigram_feats)

sentiment_analyzer.add_feat_extractor(extract_unigram_feats, unigrams=unigram_feats)

training_set = sentiment_analyzer.apply_features(training_docs)
test_set = sentiment_analyzer.apply_features(testing_docs)

trainer = NaiveBayesClassifier.train
classifier = sentiment_analyzer.train(trainer, training_set)

for key, value in sorted(sentiment_analyzer.evaluate(test_set).items()):
	print('{0}: {1}'.format(key, value))

print

from nltk.sentiment.vader import SentimentIntensityAnalyzer
sentences = ["Ahmad is a student in Malang.","Ahmad is an ordinary student in Malang!"]
paragraph = "It was one of the worst movies I've seen."

from nltk import tokenize
lines_list = tokenize.sent_tokenize(paragraph)
sentences.extend(lines_list)

tricky_sentences = ["Most automated sentiment analysis tools are shit.","VADER sentiment analysis is the shit."]
sentences.extend(tricky_sentences)

sid = SentimentIntensityAnalyzer()
for sentence in sentences:
	print(sentence)
	ss = sid.polarity_scores(sentence)
	for k in sorted(ss):
		print('{0}: {1}, '.format(k, ss[k]))
	print

Hasil dari kode program diatas seperti berikut ini :

screen-shot-2016-12-07-at-12-39-40-pm

Dari hasil percobaan diatas, kita dapat melihat perhitungan klasifikasi kalimat yang di input dibagi menjadi compound, negative, neutral, dan positive. semakin besar nilai suatu kelas klasifikasi tersebut maka jenis kalimat yang di input dapat diketahui.

Sekian tulisan singkat nan sederhana dari penulis, kurang lebihnya mohon maaf sebesar-besarnya.

Terima kasih.

Sumber :

  • Tuhan, sang pemilik Ilmu Pengetahuan.
  • Python https://www.python.org/
  • Pustaka NLTK http://www.nltk.org/
Advertisements

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 )

Google+ photo

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

Connecting to %s