Dasar-Dasar Natural Languange Processing (1) - Dividing Text, Tokenization, dan Tagging


Natural Languange Processing atau biasa disingkat dengan NLP adalah ilmu yang mempelajari bagaimana interaksi manusia dengan mesin dengan menggunakan bahasa alami. 

Bagaimana cara sistem seperti Google Assistant atau Alexa memahami instruksi yang kita berikan? Natural language processing adalah program yang digunakan untuk memahami instruksi tersebut. Jadi singkatnya NLP adalah jembatan agar manusia dan mesin saling berinteraksi.

Bagaimana cara bekerja dengan Natural Languange Processing?

Untuk bisa bekerja dengan Natural Languange Processing atau NLP kita perlu sebuah bahasa pemrograman python dan menginstall modul library yaitu Spacy atau NLTK.

Perbedaan antara keduanya adalah NLTK atau Natural Languange Toolkit merupakan library yang mempunyai fungsi NLP seperti klasifikasi, tokenization, stemming, tagging, parsing dsb. Sedangkan Spacy adalah library tingkat lanjut dari NLTK.

Pada artikel ini kita akan membahas bagaimana cara memisakan text menjadi sebuah kalimat, cara kerja Tokenization, dan cara kerja tagging. Pada tutorial kali ini kita akan menggunakan tools Colaboratory dari Google.

1. Dividing text into sentences

  • Pertama install Spacy dan NLTK terlebih dahulu, Kenapa kita menggunakan dua library? karena kita akan membadingkan kecepatan antara keduanya.
pip install nltk
pip install spacy
  • Install modul yang diperlukan.
import nltk 
nltk.download(‘punkt’)

!python -m spacy download en_core_web_sm

  •  Buat script membaca file .txt
filename = “/content/teks.txt”
file = open(filename, “r”, encoding=”utf-8”)
text = file.read()

  • Buat file teks.txt di Colaboratory dan isi dengan 2 atau 3 kalimat didalamnya.
  • Inisialisasi model punkt NLTK sebelumnya. (Jika menggunakan NLTK)
tokenizer = nltk.data.load("tokenizers/punkt/english.pickle")

  • Mengubah teks menjadi kalimat.

sentences = tokenizer.tokenize(text)

  • Untuk Full Codenya sebagai berikut.

import time
import nltk
import spacy

tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
nlp = spacy.load("en_core_web_sm")

def read_text_file(filename):
  file = open(filename, "r", encoding="utf-8") 
  return file.read()

def preprocess_text(text):
  text = text.replace("\n", " ")
  return text

def divide_into_sentences_nltk(text):
  sentences = tokenizer.tokenize(text)
  return sentences

def divide_into_sentences_spacy(text):
  doc = nlp(text)
  return [sentence.text for sentence in doc.sents]

def divide_into_sentences(text):
  return divide_into_sentences_nltk(text)

def main():
  txt_text = read_text_file("/content/teks.txt")
  txt_text = preprocess_text(txt_text)
  sentences = divide_into_sentences(txt_text)
  print(sentences)

if __name__ == '__main__':
  start = time.time()
  main()
  print("%s s" % (time.time() - start))

  •  Hasil program ketika running.
Running dengan NLTK
Running dengan Spacy

Taraaa!!. Teks dari file teks.txt telah dirubah menjadi kalimat. Terlihat juga modul NLTK lebih cepat dibandingkan modul Spacy. Ketika mengubah modul NLTK menjadi Spacy cukup ubah kode program pada def divide_into_sentences(text):.

2. Dividing sentences into words - Tokenization

  • Install modul-modul yang diperlukan seperti langkah sebelumnya (Jika sudah terinstall lanjut step berikutnya)

  • Buat script membaca file .txt
filename = “/content/teks.txt”
file = open(filename, “r”, encoding=”utf-8”)
text = file.read()

  • Buat file teks.txt di Colaboratory dan isi dengan 2 atau 3 kalimat seperti pada cara sebelumnya.

  • Mengubah teks menjadi kata. (Jika menggunakan NLTK)

words = nltk.tokenize.word_tokenize(text)

  • Untuk Full Codenya sebagai berikut.

import nltk
import time
import spacy

nlp = spacy.load("en_core_web_sm")

def read_text_file(filename):
 file = open(filename, "r", encoding="utf-8")
 return file.read()

def preprocess_text(text):
 text = text.replace("\n", " ")
 return text

def tokenize_nltk(text):
 return nltk.tokenize.word_tokenize(text)

def tokenize_spacy(text):
 doc = nlp(text)
 return [token.text for token in doc]

def tokenize(text):
 return tokenize_spacy(text)

def main():
  txt_text = read_text_file("/content/teks.txt")
  txt_text = preprocess_text(txt_text)
  words = tokenize(txt_text)
  print(words)

if __name__ == "__main__":
 start = time.time()
 main()
 print("%s s" % (time.time() - start))

  •  Hasil program ketika running.
Running dengan NLTK
Running dengan Spacy

Taraaa!!. Teks dari file teks.txt telah dirubah menjadi per kata menggunakan Tokenization. Tokenization adalah proses sederhana dan esensial pada NLP dalam mengambil data mentah dan mengubahnya menjadi data string.



3. Tagging

  • Install modul-modul yang diperlukan seperti langkah sebelumnya (Jika sudah terinstall lanjut step berikutnya)

  • Buat script membaca file .txt
filename = “/content/teks.txt”
file = open(filename, “r”, encoding=”utf-8”)
text = file.read()

  • Buat file teks.txt di Colaboratory dan isi dengan 2 atau 3 kalimat seperti pada cara sebelumnya.

  • Inisialisasi Spacy Engine (Jika menggunakan Spacy)

nlp = spacy.load("en_core_web_sm")
  • Menggunakan Spacy engine untuk memroses teks

doc = nlp(text)
  • Mendapatkan list tuples yang berisi kata dan tag part-of-speech

words = [token.text for token in doc]
pos = [token.pos_ for token in doc]
word_pos_tuples = list(zip(words, pos))

  • Untuk Full Codenya sebagai berikut.

import nltk
import time
import spacy

tokenizer = nltk.data.load("tokenizers/punkt/english.pickle")
nlp = spacy.load("en_core_web_sm")

def read_text_file(filename):
 file = open(filename, "r", encoding="utf-8") 
 return file.read()

def preprocess_text(text):
 text = text.replace("\n", " ")
 return text

def divide_into_sentences_nltk(text):
 sentences = tokenizer.tokenize(text)
 return sentences

def tokenize_nltk(text):
 return nltk.tokenize.word_tokenize(text)

def pos_tag_spacy(text):
 doc = nlp(text)
 words = [token.text for token in doc]
 pos = [token.pos_ for token in doc]
 return list(zip(words, pos))

def pos_tag_nltk(text):
 words = tokenize_nltk(text)
 words_with_pos = nltk.pos_tag(words)
 return words_with_pos

def pos_tag(text):
 text = preprocess_text(text)
 words_with_pos = pos_tag_spacy(text)
 return words_with_pos

def main():
 txt_text = read_text_file("/content/teks.txt")
 txt_text = preprocess_text(txt_text)
 words_with_pos = pos_tag(txt_text)
 print(words_with_pos)
if __name__ == '__main__':
 start = time.time()
 main()
 print("%s s" % (time.time() - start))

  •  Hasil program ketika running.
Running dengan NLTK
Running dengan Spacy

Tagging adalah proses dalam NLP yang umum dan mengacu pada pengkategorian kata-kata dalam teks (corpus) dalam korespondensi dengan bagian tertentu dari suatu bahasa, tergantung pada definisi kata dan konteksnya. Untuk melihat list taggingnya bisa dilihat disini : 

NOTE!!
Permasalahan umum ketika kita menggunakan Colaboratory bisa saja muncul error berikut 


Untuk mengatasi hal tersebut silahkan copy kode yang berwarna merah lalu jalankan seperti biasa.

Sekian dari artikel kali ini yang membahas bagaimana cara kerja Pengelompokkan kalimat, Tokenization, dan Tagging. Berikutnya kita akan membahas bagaimana cara kerja Stemming, Lemmatization, dan StopWord.

Jika ada kesalahan dari penjelasan saya mohon dimaafkan dan dibenarkan hehe. Jika ada error kita bisa saling bantu satu sama lain yak. Terimakasihhh


1 Comments

Next Post Previous Post