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'
]