<jupyter_start><jupyter_text><jupyter_code><jupyter_output><empty_output><jupyter_text>**Traditional NLP**   **Corpora, Tokens, and Types**

semua metode NLP, baik itu klasik ataupun modern membutuhkan dataset *text* , biasanya dataset text ini disebut sebagai *corpus*. *corpus* biasanya berisi sekumpulan kata atau kalimat (bisa dalam bentuk ASCII atau UTF-8). kalimat tersebut biasa disebut sebagai **metadata**. seperti yang kita tahu bahwa kata itu adalah kumpulan huruf. kumpulan huruf bisa memiliki arti atau makna dan tidak memiliki makna. kumpulan huruf ini dalam NLP biasanya disebut **token**. perhatikan ilustrasi gambar di bawah ini.  

![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtQAAAIACAYAAACigvvJAAAgAElEQVR4AeydCZRdVZX+0dZuZdb+K6ACtqvtFkRpZXUv0W7pBaK2KEY<KEY>hJCEDmeekMlVSmVMQMg+VOalUJanMITMEkNmA+7++k9ov+9069031hvve+2qts859957hvvO+c8/v7trnnLOEf2wBtgBbgC3AFmALsAXYAmwBtkDGLXBWxjmZkS3AFmALsAXYAmwBtgBbgC3AFhACNUXAFmALsAXYAmwBtgBbgC3AFmhGCxQFUP/tb38TBrYBNUANUAPUADVADVAD5aWBZjBuXrNGBqjZQcqrg/D35u9NDVAD1AA1QA1QA83VQF6pOUFlBQPq5jYg87MTUgPUADVADVAD1AA1QA1YDSRg3pxeyitQ2y/sO37//feFgW1ADVAD1AA1QA1QA9QANZBIA<KEY>IFAT<KEY>)  Tokenization<jupyter_code>import spacy
# jika tidak menggunakan library spacy maka ketika dilakukan perulangan terhadap suatu kalimat
# akan direturn dalam bentuk karakter

print([str(token) for token in (text.lower())])
# nah kedua kita menggunakan library spacy untuk melakukan tokenisasi
# berikut adalah contoh tokenisasi bahawa inggris

nlp = spacy.load('en')
text = "Mary, don't slap the green witch"

print([str(token) for token in nlp(text.lower())])
# berikut adalah contoh tokenisasi bahasa indonesia

nlp = spacy.blank('id')
text = 'Mary, jangan menampar penyihir hijau itu!'

print([str(token) for token in nlp(text.lower())])


# nah mantapp kan? wkwkwk
# tapi bagaimana misalnya kalau kita menambahkan emoticon? apakah bisa?

nlp = spacy.load('en')
text = u"Snow White and the Seven Degrees #MakeAMovieCold@midnight:)"

print([str(token) for token in nlp(text.lower())])
# selain menggunakan library spacy, kita juga bisa melakukan tokenisasi menggunakan library nltk

from nltk.tokenize import TweetTokenizer

tweet = u"Snow White and the Seven Degrees #MakeAMovieCold@midnight:) "

tokenizer = TweetTokenizer()
print(tokenizer.tokenize(tweet.lower()))<jupyter_output><empty_output><jupyter_text>Unigrams, Bigrams, Trigrams, ... , N-grams

bagaimana misalkan kita ingin mengumpulkan beberapa kata? nah n-grams adalah salah satu pendekatan yang bisa dilakukan untuk mereturn beberapa kata<jupyter_code>def n_grams(text, n):
  '''
  takes tokens ot text, return a list of n-grams
  '''
  return [text[i:i+n] for i in range(len(text)-n+1)]

cleaned = [str(token) for token in nlp(text.lower())]
print(n_grams(cleaned, 3))<jupyter_output><empty_output><jupyter_text>Lemmas and Stems

gampangnya *lemmas* adalah induk kata (tanpa imbuhan). cara untuk mencari induk kata dari suatu kata maka disebut *lemmatization*. contoh dalam bahasa inggris : fly = flew, flies, flown, flowing, dll.<jupyter_code># contoh lemmatization

import spacy
nlp = spacy.load('en')
doc = nlp(u"he was running late")

for token in doc:
  print('{} --> {}'.format(token, token.lemma_) )
from spacy.lang.id import 

import random
lemma_as_list = list(LOOKUP.items())
samples = random.choices(lemma_as_list, k=20)
for k, v in samples:
    print(f'{k}: {v}')
# contoh lemmatization bahasa indonesia
nlp = spacy.blank('id')
doc = nlp('tertidur tidur tercyduk')
for token in doc:
    ori = token.text
    lemma = token.lemma_  # token.lemma is integer index
    print(ori, lemma)
# preprocessing text using stanza nlp stanford
# install library stanza

!pip install stanza
import stanza
# Download an English model into the default directory
print("Downloading English model...")
stanza.download('en')

# Download an Indonesian model into the default directory
print("Downloading Indonesian model... ")
stanza.download('id')
# Build an English pipeline, with all processors by default
print("Building an English pipeline...")
en_nlp = stanza.Pipeline('en')

# Build a Chinese pipeline, with customized processor list and no logging, and force it to use CPU
print("Building a Indonesia pipeline...")
id_nlp = stanza.Pipeline('id', processors='tokenize,lemma,pos,depparse', verbose=False, use_gpu=False)
# Processing English text
en_doc = en_nlp("<NAME> was born in Hawaii.  He was elected president in 2008.")
print(type(en_doc))

# Processing Indonesia text
id_doc = id_nlp("Tak ada penjagaan di check point ganjil genap di Tugu Kujang, Kota Bogor. Sehingga, pelanggar ganjil genap di Kota Bogor tidak mendapat sanksi putar balik atau diberhentikan.")
print(type(id_doc))
for i, sent in enumerate(en_doc.sentences):
    print("[Sentence {}]".format(i+1))
    for word in sent.words:
        print("{:12s}\t{:12s}\t{:6s}\t{:d}\t{:12s}".format(\
              word.text, word.lemma, word.pos, word.head, word.deprel))
    print("")
for i, sent in enumerate(id_doc.sentences):
    print("[Sentence {}]".format(i+1))
    for word in sent.words:
        print("{:12s}\t{:12s}\t{:6s}\t{:d}\t{:12s}".format(\
              word.text, word.lemma, word.pos, word.head, word.deprel))
    print("")<jupyter_output><empty_output><jupyter_text>Categorizing Sentence and Documents

kategori atau klasifikasi dokumen adalah salah satu penerapan dari NLP. TF dan TF-IDF adalah salah satu metode untuk mengklasifikasikan atau mengkategorikan text, kalimat, dan dokumen. beberapa contoh permasalahan yang biasanya diatasi adalah menentukan topik dari suatu dokumen, memprediksikan sentiment dari review konsumen, filter email yang gak berguna, mengklasifikasikan bahasa yang digunakan.   Categorizing : Words as POS (Part-of-Speech) Tagging

salah satu penerapan yang paling umum dalam mengkategorikan suatu kata adalah dengan menggunakan metode POS tagging. yaa yang paling simple POS tagging ini bisa dijalankan dengan menggunakan library *spacy* dan *stanza*<jupyter_code># contoh penerapan POS tagging menggunakan spacy

import spacy

nlp = spacy.load("en")
doc = nlp("Will you marry me?")
for token in doc:
  print('{} - {}'.format(token, token.pos_))
indo_nlp = spacy.blank("id")
dok = indo_nlp("apakah kamu mau menjadi kekasihku?")
for token in dok:
  print('{} - {}'.format(token, token.pos_))

# hasilnya tidak sesuai harapan wkwkwk
# contoh pos tagging menggunakan library stanza

!pip install stanza

import stanza
# Download an Indonesian model into the default directory
print("Downloading Indonesian model... ")
stanza.download('id')
# Build an Indonesia pipeline, with all processors by default
print("Building an Indonesia pipeline...")
id_nlp = stanza.Pipeline('id')
indo_dok = id_nlp("apakah kamu mau menjadi kekasihku?")

for i,sents in enumerate(indo_dok.sentences):
  print("sentence : {}".format((i+1)))
  for token in sents.words:
    print("{} - {}".format(token.text, token.pos))

# nah kalau ini hasilnya lebih bagus wkwkwk<jupyter_output><empty_output><jupyter_text>Kesimpulan

di materi kali ini kta belajar beberapa terminologi dasar yang dipakai di NLP. pemahaman dasar tentang NLP ini diperlukan untuk memahami lebih dalam lagi tentang NLP terutama di chapter selanjutnya. oke sekian semoga bermanfaat terimakasih..<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09911003236245955, 'fraction_numerical': 0.011461704422869472, 'mean_word_length': 5.180833333333333, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 30, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 9, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '140124', 'license': 'Apache-2.0', 'n_tokens_mistral': 2954, 'n_tokens_neox': 2798, 'n_words': 739, 'path': 'Natural-Language-Processing-with-Pytorch/Chapter2_A_Quick_Tour_of_Traditional_NLP.ipynb', 'repo_name': 'gilangarisptr/NLP', 'size': '82634'}