NLTK ile POS Etiketleme ve NLP'de Parçalama [ÖRNEKLER]

POS Etiketleme

POS Etiketleme (Konuşma Bölümleri Etiketleme), bir konuşmanın belirli bir bölümü için, tanımına ve bağlamına göre kelimeleri metin biçiminde işaretleme işlemidir. Bir dildeki metnin okunmasından ve her kelimeye belirli bir belirtecin (Konuşmanın Bölümleri) atanmasından sorumludur. Buna gramer etiketlemesi de denir.

NLTK Konuşma Bölümü örneğiyle öğrenelim:

Giriş: Bize izin verecek her şey.

Çıktı: [('Her şey', NN),('kime', TO), ('izin', VB), ('biz', PRP)]

POS etiketleme örneğinde yer alan adımlar

  • Metni simgeleştirme (word_tokenize)
  • nltk.pos_tag(tokenize_text) olan yukarıdaki adıma pos_tag'i uygulayın

NLTK POS Etiket Örnekleri aşağıdaki gibidir:

Kısaltma anlam
CC koordine edici bağlaç
CD kardinal rakam
DT belirlemek
EX orada varoluşsal
FW yabancı kelime
IN edat/alt bağlaç
JJ Bu NLTK POS Etiketi bir sıfattır (büyük)
JJR sıfat, karşılaştırmalı (daha büyük)
JJS sıfat, üstünlük (en büyük)
LS liste pazarı
MD modal (yapabilir, yapacak)
NN isim, tekil (kedi, ağaç)
NNS isim çoğul (masalar)
NNP özel isim, tekil (sarah)
NNPS özel isim, çoğul (Kızılderililer veya Amerikalılar)
PDT önceden belirleyici (tümü, her ikisi, yarım)
POS iyelik eki (ebeveyn\ 'ler)
PRP şahıs zamiri (onunki, kendisi, kendisi, kendisi)
PRP $ iyelik zamiri (o, onun, benim, benim, bizim)
RB zarf (ara sıra, hızla)
RBR zarf, karşılaştırmalı (daha büyük)
RBS zarf, üstünlük (en büyük)
RP parçacık (yaklaşık)
TO sonsuz işaretleyici (to)
UH ünlem (güle güle)
VB fiil (sormak)
GBV Fiil ulaç (yargılama)
VBD Fiilin geçmiş zamanı (yalvardı)
VBN fiil geçmiş katılımcı (yeniden birleştirilmiş)
VBP fiil, şimdiki zaman 3. tekil şahıs değil (wrap)
VBZ fiil, 3. tekil şahısla şimdiki zaman (temel)
wdt ne-belirleyici (bu, ne)
WP wh- zamiri (kim)
WRB ne- zarf (nasıl)

Yukarıdaki NLTK POS etiketi listesi tüm NLTK POS Etiketlerini içerir. NLTK POS etiketleyici, cümlenin her kelimesinin dilbilgisi bilgilerini atamak için kullanılır. POS NLTK'nin tüm paketlerinin kurulumu, içe aktarılması ve indirilmesi tamamlandı.

NLP'de Parçalama Nedir?

Kümeleme NLP'de, küçük bilgi parçalarını alıp bunları büyük birimlere gruplama sürecidir. Chunking'in birincil kullanımı, "isim öbekleri" grupları oluşturmaktır. Cümleye, düzenli ifadelerle birleştirilmiş POS etiketlemeyi izleyerek yapı eklemek için kullanılır. Ortaya çıkan kelime grubuna "chunks" denir. Ayrıca, yüzeysel ayrıştırma olarak da adlandırılır.

Sığ ayrıştırmada kökler ile yapraklar arasında en fazla bir seviye bulunurken derin ayrıştırma birden fazla seviyeden oluşur. Sığ ayrıştırmaya aynı zamanda hafif ayrıştırma veya parçalama da denir.

Parçalama Kuralları

Önceden tanımlanmış kurallar yoktur ancak bunları ihtiyaca ve ihtiyaca göre birleştirebilirsiniz.

Örneğin, cümleden İsim, fiil (geçmiş zaman), sıfat ve eşgüdüm kavşağını etiketlemeniz gerekir. Kuralı aşağıdaki gibi kullanabilirsiniz

parça:{ * * * ?}

Aşağıdaki tabloda çeşitli sembollerin ne anlama geldiği gösterilmektedir:

Sembolün adı Açıklamalar
. Yeni satır dışında herhangi bir karakter
* 0 veya daha fazla tekrarı eşleştirin
? 0 veya 1 tekrarı eşleştirin

Şimdi kuralı daha iyi anlamak için kodu yazalım.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Çıktı:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

Yukarıdaki Konuşma Kısmı etiketlemesinden elde edilen sonuç Python örnek: "make" kurala dahil olmayan bir fiil olduğundan mychunk olarak etiketlenmez

Parçalama Kullanım Örneği

Parçalama, varlık tespiti için kullanılır. Varlık, cümlenin, makinenin herhangi bir amacın değerini elde etmesini sağlayan kısmıdır.

Example: 
Temperature of New York. 
Here Temperature is the intention and New York is an entity. 

Başka bir deyişle, tokenların alt kümelerini seçmek için parçalama kullanılır. Belirteçleri seçmek için parçalamanın nasıl kullanıldığını anlamak için lütfen aşağıdaki kodu izleyin. Bu örnekte, bir isim tamlamasının bir kısmına karşılık gelen grafiği göreceksiniz. Daha iyi anlaşılması için kodu yazıp grafiğini çizeceğiz.

Kullanım Durumunu Gösterecek Kod

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {<DT>?<JJ>*<NN>}"
cp  =nltk.RegexpParser(grammar)
result = cp.parse(tag)
print(result)
result.draw()    # It will draw the pattern graphically which can be seen in Noun Phrase chunking 

Çıktı:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

grafik

İsim Cümle Parçalama Grafiği
İsim Cümle parçalama Grafiği

Grafikten, "learn" ve "guru99"un iki farklı belirteç olduğu ancak İsim Cümlesi olarak kategorize edildiği, "from" belirtecinin ise İsim Cümlesine ait olmadığı sonucuna varabiliriz.

Parçalama, farklı tokenleri aynı parçada kategorize etmek için kullanılır. Sonuç, seçilen dilbilgisine bağlı olacaktır. Daha fazla Parçalama NLTK, kalıpları etiketlemek ve metin bütünlerini keşfetmek için kullanılır.

POS ETİKETLERİNİ SAYMAK

Çeşitli konuları tartıştık konum etiketi önceki bölümde. Bu özel derste bu etiketlerin nasıl sayılacağını öğreneceksiniz. Etiketlerin sayılması, metin sınıflandırmanın yanı sıra özelliklerin Doğal dil tabanlı işlemlere hazırlanması açısından da çok önemlidir. Sizlerle guru99'un kod hazırlarken izlediği yaklaşımı çıktı tartışmasıyla birlikte tartışacağım. Umarım bu size yardımcı olacaktır.

Etiketler nasıl sayılır:

Burada öncelikle çalışma kodunu yazacağız, daha sonra kodu açıklamak için farklı adımlar yazacağız.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Çıktı:

Sayaç({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Kodun detaylandırılması

POS ETİKETLERİNİ SAYMAK

  1. Etiketleri saymak için koleksiyonun modülündeki Counter paketini kullanabilirsiniz. Sayaç, anahtar-değer işlemi prensibiyle çalışan bir sözlük alt sınıfıdır. Sayı değerleri iken öğelerin sözlük anahtarı olarak saklandığı sırasız bir koleksiyondur.
  2. Metni simgeleştirmek için modüller içeren nltk'yi içe aktarın.
  3. POS_tag'ını saymak istediğiniz metni yazın.
  4. Bazı kelimeler büyük, bazıları ise küçük harf olduğundan, tokenizasyon uygulamadan önce tüm kelimelerin küçük harfe dönüştürülmesi uygundur.
  5. Kelimeleri nltk'den word_tokenize yoluyla iletin.
  6. Her jetonun pos_tag'ını hesaplayın
    Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
  7. Şimdi sözlük sayacının rolü geliyor. Kod satırı 1'i içe aktardık. Kelimeler anahtardır ve etiketler değerdir ve sayaç, metinde bulunan her etiketin toplam sayısını sayar.

Frekans dağılımı

Frekans Dağılımı, bir deneyin sonucunun ortaya çıkma sayısı olarak adlandırılır. Bir belgede geçen her kelimenin sıklığını bulmak için kullanılır. Kullanır FrekDist sınıfı ve tarafından tanımlanmış nltk.olasılık modülü.

Bir frekans dağılımı genellikle deneyi tekrar tekrar çalıştıran örneklerin sayılmasıyla oluşturulur. Sayım sayısı her seferinde bir artırılır. Örneğin

freq_dist = FrekDist()

belgedeki belirteç için:

freq_dist.inc(token.type())

Herhangi bir kelimenin belirli bir belgede kaç kez geçtiğini kontrol edebiliriz. Örneğin

  1. Sayma Yöntemi: freq_dist.count('and')Bu ifade 've'nin kaç kez oluştuğunun değerini döndürür. Buna sayma yöntemi denir.
  2. Frekans Yöntemi: freq_dist.freq('and')Bu ifade, belirli bir örneğin frekansını döndürür.

Küçük bir program yazacağız ve çalışmasını detaylı olarak anlatacağız. Bir miktar metin yazacağız ve metindeki her kelimenin sıklık dağılımını hesaplayacağız.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Frekans dağılımı

Kodun açıklaması:

  1. Nltk modülünü içe aktarın.
  2. Kelime dağılımını bulmanız gereken metni yazın.
  3. Nltk'nin FreqDist modülüne girdi olarak sunulan metindeki her kelimeyi simgeleştirin.
  4. Her kelimeyi bir liste biçiminde nlk.FreqDist'e uygulayın
  5. Grafikteki kelimeleri grafiği kullanarak (plot()) çizin

Yazılan metnin daha iyi anlaşılması için lütfen grafiği görselleştirin

Grafikteki Her Kelimenin Frekans Dağılımı

Grafikteki her kelimenin frekans dağılımı

NOT: Yukarıdaki grafiği görebilmeniz için matplotlib'in kurulu olması gerekmektedir.

Yukarıdaki grafiği inceleyin. Metindeki her kelimenin geçişini saymaya karşılık gelir. Metnin incelenmesine ve ayrıca metne dayalı duygusal analizin uygulanmasına yardımcı olur. Özetle, nltk'nin metindeki her kelimenin geçişini sayan ve doğal dil özelliklerinin istatistiklerini hazırlamaya yardımcı olan bir modüle sahip olduğu sonucuna varılabilir. Metindeki anahtar kelimelerin bulunmasında önemli rol oynar. Ayrıca extract, PyPDF2 gibi kütüphaneleri kullanarak metni pdf'ten çıkarabilir ve metni nlk.FreqDist'e besleyebilirsiniz.

Anahtar terim “tokenleştirme”dir. Belirleme işleminden sonra belirli bir paragraftaki veya metin belgesindeki her bir sözcüğün kaç kez gerçekleştiğini belirlemek için kontrol eder. Bunun için NLTK araç setine ihtiyacınız yok. Bunu kendi python programlama becerilerinizle de yapabilirsiniz. NLTK araç seti yalnızca çeşitli işlemler için kullanıma hazır bir kod sağlar.

Her bir kelimeyi saymak pek faydalı olmayabilir. Bunun yerine, bir çiftte çok sayıda kelimeyle ilgilenen kolokasyon ve bigramlara odaklanılmalıdır. Bu çiftler, makineye beslenebilecek daha iyi doğal dil özellikleri için faydalı anahtar sözcükleri belirler. Ayrıntılar için lütfen aşağıya bakın.

Eşdizimler: Bigramlar ve Trigramlar

Sıralamalar Nedir?

Eşdizimler, bir belgede birçok kez bir arada bulunan sözcük çiftleridir. Bu çiftlerin sayısının belgenin genel kelime sayısına oranıyla hesaplanır.

Ultraviyole ışınlar, kızılötesi ışınlar gibi kelimelerle elektromanyetik spektrumu düşünün.

Ultraviyole ve ışınlar kelimeleri ayrı ayrı kullanılmaz ve dolayısıyla Sıralama olarak ele alınabilir. Başka bir örnek CT Taramasıdır. CT ve Scan'i ayrı ayrı söylemiyoruz ve bu nedenle bunlar aynı zamanda sıralama olarak da değerlendiriliyor.

Eşdizim bulmanın, kelimelerin sıklıklarını ve başka kelimeler bağlamındaki görünümlerini hesaplamayı gerektirdiğini söyleyebiliriz. Bu spesifik kelime koleksiyonları, yararlı içerik terimlerini korumak için filtreleme gerektirir. Daha sonra kelimelerin her bir gramı, her bir Ingram'ın bir eşdizim olma olasılığını belirlemek için bazı ilişkilendirme ölçümlerine göre puanlanabilir.

Sıralama iki türe ayrılabilir:

  • Bigram ciki kelimenin birleşimi
  • Trigramüç kelimenin birleşimi

Bigramlar ve Trigramlar özellik çıkarma aşaması için daha anlamlı ve kullanışlı özellikler sağlar. Bunlar özellikle metin tabanlı duygusal analizde faydalıdır.

Bigram Örnek Kodu

import nltk

text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Çıktı:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Trigram Örnek Kodu

Bazen istatistiksel analiz ve sıklık sayımı için cümlede üç kelime çiftini görmek önemli hale gelir. Bu yine oluşumunda önemli bir rol oynar NLP (doğal dil işleme özellikleri) ve metin tabanlı duygusal tahmin.

Trigramların hesaplanması için aynı kod çalıştırılır.

import nltk
text = “Guru99 is a totally new kind of learning experience.”
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Çıktı:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]   

Cümleleri Etiketleme

Cümleyi Etiketlemek daha geniş anlamda cümlenin bağlamına göre fiil, isim vb. etiketlerin eklenmesi anlamına gelir. POS etiketlerinin tanımlanması karmaşık bir süreçtir. Bu nedenle, bazı kelimeler cümlenin yapısına göre farklı (belirsiz) anlamlara sahip olabileceğinden, POS'un genel etiketlemesi manuel olarak mümkün değildir. Metnin liste biçiminde dönüştürülmesi, listedeki her kelimenin döngüye alınması ve belirli bir etiket için sayılması nedeniyle etiketlemeden önce önemli bir adımdır. Daha iyi anlamak için lütfen aşağıdaki koda bakın

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Çıktı:

[('Merhaba', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Siz', 'PRP'), ('sahip', 'VBP') , ('derleme', 'VBN'), ('a', 'DT'), ('çok', 'RB'), ('iyi', 'JJ'), ('site', 'NN') , ('ve', 'CC'), ('Ben', 'PRP'), ('seviyorum', 'VBP'), ('ziyaret', 'VBG'), ('sizin', 'PRP$' ), ('site', 'NN'), ('.', '.')]

Cümleleri Etiketleme

Kod Açıklaması:

  1. Nltk'yi içe aktaracak kod (Cümle tokenizasyonu ve kelime tokenizasyonu gibi alt modülleri içeren doğal dil araç seti.)
  2. Etiketleri yazdırılacak metin.
  3. Cümle Belirtme
  4. For döngüsü, kelimelerin cümleden simgeleştirildiği ve her kelimenin etiketinin çıktı olarak yazdırıldığı yerde uygulanır.

Corpus'ta iki tür POS etiketleyici vardır:

  • Kural Tabanlı
  • Stokastik POS Etiketleyicileri

1.Kural Tabanlı POS Etiketleyici: Anlamı belirsiz olan kelimeler için, bağlamsal bilgiye dayalı kural tabanlı yaklaşım uygulanır. Bu, önceki veya sonraki kelimenin anlamını kontrol ederek veya analiz ederek yapılır. Bilgi, kelimenin çevresinden veya kendi içinden analiz edilir. Bu nedenle kelimeler, büyük harf kullanımı ve noktalama gibi belirli bir dilin dilbilgisi kurallarına göre etiketlenir. Örneğin, Brill'in etiketleyicisi.

2. Stokastik POS Etiketleyici: Bu yöntem kapsamında frekans veya olasılık gibi farklı yaklaşımlar uygulanmaktadır. Bir kelime eğitim setinde çoğunlukla belirli bir etiketle etiketleniyorsa, test cümlesinde o belirli etiket ona verilir. Kelime etiketi yalnızca kendi etiketine değil aynı zamanda bir önceki etikete de bağlıdır. Bu yöntem her zaman doğru değildir. Diğer bir yol ise belirli bir etiketin cümlede bulunma olasılığını hesaplamaktır. Böylece son etiket, bir kelimenin belirli bir etikete sahip olma olasılığının en yüksek olup olmadığı kontrol edilerek hesaplanır.

Gizli Markov Modeli ile POS etiketleme

Etiketleme Sorunları HMM kullanılarak da modellenebilir. Etiketler gizli durumlar olarak kabul edilirken giriş belirteçlerini gözlemlenebilir bir sıra olarak ele alır ve amaç, gizli durum sırasını belirlemektir. Örneğin x = x1,x2,…………,Xn burada x bir jeton dizisidir, oysa y = y1,y2,y3,y4………yngizli dizidir.

Gizli Markov Modeli (HMM) Nasıl Çalışır?

HMM, P(x, y) olan birleştirme dağıtımını kullanır; burada x, giriş dizisi/belirteç dizisi ve y, etiket dizisidir.

x için Etiket Sırası argmax olacaktıry1….ynp(x1,x2,….xn,y1,y2,y3,…..). Metindeki etiketleri kategorize ettik ancak bu tür etiketlerin istatistikleri hayati önem taşıyor. Bir sonraki kısım istatistiksel çalışma için bu etiketleri saymaktır.

ÖZET

  • POS Etiketleme NLTK bir konuşmanın belirli bir bölümüne ilişkin kelimeleri, tanımına ve bağlamına göre metin formatında işaretleme işlemidir.
  • Bazı NLTK POS etiketleme örnekleri şunlardır: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, vb.
  • POS etiketleyici, cümledeki her kelimenin gramer bilgisini atamak için kullanılır. NLTK ile Konuşma Bölümü etiketlemesinin tüm paketlerinin kurulumu, içe aktarılması ve indirilmesi tamamlandı.
  • NLP'de parçalama, küçük bilgi parçalarını alıp bunları büyük birimler halinde gruplandırma işlemidir.
  • Önceden tanımlanmış kurallar yoktur ancak bunları ihtiyaca ve ihtiyaca göre birleştirebilirsiniz.
  • Parçalama, varlık tespiti için kullanılır. Varlık, cümlenin, makinenin herhangi bir amacın değerini elde etmesini sağlayan kısmıdır.
  • Parçalama, farklı tokenleri aynı parçada kategorize etmek için kullanılır.