Eğitim Simgeleyici ve Engellenecek Kelimeleri Filtreleme
Neden kendi cümle belirtecini eğitmelisiniz?
Bu çok önemli bir soru, eğer NLTK'nın varsayılan cümle belirtecine sahipsek, o zaman neden bir cümle belirtecini eğitmemiz gerekiyor? Bu sorunun cevabı, NLTK'nın varsayılan cümle belirtecinin kalitesinde yatmaktadır. NLTK'nın varsayılan belirteç oluşturucusu temelde genel amaçlı bir belirteçtir. Çok iyi çalışmasına rağmen, standart olmayan metin için, belki metnimiz için iyi bir seçim olmayabilir veya benzersiz bir biçimlendirmeye sahip bir metin için. Bu tür bir metni belirtmek ve en iyi sonuçları elde etmek için kendi cümle belirtecimizi eğitmeliyiz.
Uygulama Örneği
Bu örnek için, webtext korpusunu kullanacağız. Bu külliyattan kullanacağımız metin dosyası, aşağıda gösterilen iletişim kutuları olarak biçimlendirilmiş metne sahip -
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.
Bu metin dosyasını training_tokenizer adıyla kaydettik. NLTK adlı bir sınıf sağlarPunktSentenceTokenizerbunun yardımıyla, özel bir cümle belirteci üretmek için ham metin üzerinde eğitim verebiliriz. Ham metni bir dosyada okuyarak veya bir NLTK derlemesinden,raw() yöntem.
Daha fazla fikir edinmek için aşağıdaki örneğe bakalım -
İlk olarak, içe aktarın PunktSentenceTokenizer sınıf nltk.tokenize paket -
from nltk.tokenize import PunktSentenceTokenizer
Şimdi içe aktar webtext külliyat nltk.corpus paket
from nltk.corpus import webtext
Sonra, kullanarak raw() yöntem, ham metni al training_tokenizer.txt aşağıdaki gibi dosya -
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
Şimdi bir örnek oluşturun PunktSentenceTokenizer ve belirteçli cümleleri metin dosyasından aşağıdaki gibi yazdırın -
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])
Çıktı
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...
Eksiksiz uygulama örneği
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])
Çıktı
White guy: So, do you have any plans for this evening?
NLTK'nın varsayılan cümle belirteci ile kendi eğitimli cümle belirteçleştiricimiz arasındaki farkı anlamak için, aynı dosyayı varsayılan cümle belirteç yani sent_tokenize () ile belirtelim.
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?
Çıktıdaki farkın yardımıyla, kendi cümle belirteçimizi eğitmenin neden faydalı olduğu kavramını anlayabiliriz.
Engellenecek kelimeler nelerdir?
Metinde bulunan ancak cümlenin anlamına katkıda bulunmayan bazı yaygın sözcükler. Bu tür kelimeler, bilgi edinme veya doğal dil işleme amacıyla hiç de önemli değildir. En yaygın engellenecek kelimeler "the" ve "a" dır.
NLTK engellenecek kelimeler korpusu
Aslında, Natural Language Tool kiti, birçok dil için kelime listelerini içeren bir engellenecek kelime külliyatıyla birlikte gelir. Aşağıdaki örnek yardımıyla kullanımını anlayalım -
Öncelikle, nltk.corpus paketinden engellenecek kelimeler kopyasını içe aktarın -
from nltk.corpus import stopwords
Şimdi, İngilizce dillerinden engellenecek kelimeleri kullanacağız
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]
Çıktı
['I', 'writer']
Eksiksiz uygulama örneği
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]
Çıktı
['I', 'writer']
Desteklenen dillerin tam listesini bulmak
Aşağıdaki Python komut dosyası yardımıyla, NLTK engellenecek kelimeler külliyatının desteklediği dillerin tam listesini de bulabiliriz -
from nltk.corpus import stopwords
stopwords.fileids()
Çıktı
[
'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
'swedish', 'tajik', 'turkish'
]