Pelatihan Tokenizer & Filtering Stopwords

Mengapa melatih tokenizer kalimat sendiri?

Ini adalah pertanyaan yang sangat penting bahwa jika kita memiliki tokenizer kalimat default NLTK lalu mengapa kita perlu melatih tokenizer kalimat? Jawaban atas pertanyaan ini terletak pada kualitas tokenizer kalimat default NLTK. Tokenizer default NLTK pada dasarnya adalah tokenizer tujuan umum. Meskipun berfungsi dengan sangat baik tetapi ini mungkin bukan pilihan yang baik untuk teks tidak standar, mungkin teks kita, atau untuk teks yang memiliki format unik. Untuk membuat token teks semacam itu dan mendapatkan hasil terbaik, kita harus melatih tokenizer kalimat kita sendiri.

Contoh Implementasi

Untuk contoh ini, kami akan menggunakan korpus webtext. File teks yang akan kita gunakan dari korpus ini memiliki format teks seperti dialog yang ditunjukkan di bawah ini -

Guy: How old are you?
Hipster girl: You know, I never answer that question. Because to me, it's about
how mature you are, you know? I mean, a fourteen year old could be more mature
than a twenty-five year old, right? I'm sorry, I just never answer that question.
Guy: But, uh, you're older than eighteen, right?
Hipster girl: Oh, yeah.

Kami telah menyimpan file teks ini dengan nama training_tokenizer. NLTK menyediakan kelas bernamaPunktSentenceTokenizerdengan bantuan yang dapat kita latih pada teks mentah untuk menghasilkan tokenizer kalimat khusus. Kita bisa mendapatkan teks mentah baik dengan membaca dalam file atau dari korpus NLTK menggunakanraw() metode.

Mari kita lihat contoh di bawah ini untuk mendapatkan lebih banyak wawasan tentangnya -

Pertama, impor PunktSentenceTokenizer kelas dari nltk.tokenize paket -

from nltk.tokenize import PunktSentenceTokenizer

Sekarang, impor webtext korpus dari nltk.corpus paket

from nltk.corpus import webtext

Selanjutnya, dengan menggunakan raw() metode, dapatkan teks mentah dari training_tokenizer.txt mengajukan sebagai berikut -

text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')

Sekarang, buat instance PunktSentenceTokenizer dan cetak kalimat tokenisasi dari file teks sebagai berikut -

sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Keluaran

White guy: So, do you have any plans for this evening?
print(sents_1[1])
Output:
Asian girl: Yeah, being angry!
print(sents_1[670])
Output:
Guy: A hundred bucks?
print(sents_1[675])
Output:
Girl: But you already have a Big Mac...

Contoh implementasi lengkap

from nltk.tokenize import PunktSentenceTokenizer
from nltk.corpus import webtext
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Keluaran

White guy: So, do you have any plans for this evening?

Untuk memahami perbedaan antara tokenizer kalimat default NLTK dan tokenizer kalimat terlatih kita sendiri, mari kita membuat token file yang sama dengan tokenizer kalimat default yaitu sent_tokenize ().

from nltk.tokenize import sent_tokenize
   from nltk.corpus import webtext
   text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sents_2 = sent_tokenize(text)

print(sents_2[0])
Output:

White guy: So, do you have any plans for this evening?
print(sents_2[675])
Output:
Hobo: Y'know what I'd do if I was rich?

Dengan bantuan perbedaan dalam output, kita dapat memahami konsep mengapa berguna untuk melatih tokenizer kalimat kita sendiri.

Apa itu stopwords?

Beberapa kata umum yang ada dalam teks tetapi tidak berkontribusi dalam arti kalimat. Kata-kata seperti itu sama sekali tidak penting untuk tujuan pencarian informasi atau pemrosesan bahasa alami. Kata sandi yang paling umum adalah 'the' dan 'a'.

Korpus stopwords NLTK

Sebenarnya, Natural Language Tool kit hadir dengan korpus stopword yang berisi daftar kata untuk banyak bahasa. Mari kita pahami penggunaannya dengan bantuan contoh berikut -

Pertama, impor kopus stopwords dari paket nltk.corpus -

from nltk.corpus import stopwords

Sekarang, kami akan menggunakan stopwords dari Bahasa Inggris

english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Keluaran

['I', 'writer']

Contoh implementasi lengkap

from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Keluaran

['I', 'writer']

Menemukan daftar lengkap bahasa yang didukung

Dengan bantuan skrip Python berikut, kami juga dapat menemukan daftar lengkap bahasa yang didukung oleh NLTK stopwords corpus -

from nltk.corpus import stopwords
stopwords.fileids()

Keluaran

[
   'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
   'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
   'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
   'swedish', 'tajik', 'turkish'
]