Natural Language Toolkit - Metni Belirtme

Tokenizing nedir?

Bir metin parçasını cümleler ve kelimeler gibi daha küçük parçalara ayırma süreci olarak tanımlanabilir. Bu daha küçük parçalara jeton adı verilir. Örneğin, bir kelime cümledeki bir simgedir ve bir cümle bir paragraftaki bir simgedir.

NLP'nin duyarlılık analizi, QA sistemleri, dil çevirisi, akıllı sohbet robotları, ses sistemleri vb. Uygulamaları oluşturmak için kullanıldığını bildiğimiz için, bunları oluşturmak için metindeki kalıbı anlamak hayati hale geliyor. Yukarıda bahsedilen belirteçler, bu kalıpları bulmada ve anlamada çok kullanışlıdır. Tokenleştirmeyi kök oluşturma ve lemmatizasyon gibi diğer tarifler için temel adım olarak düşünebiliriz.

NLTK paketi

nltk.tokenize Tokenizasyon sürecini gerçekleştirmek için NLTK modülü tarafından sağlanan pakettir.

Cümleleri kelimelere dönüştürme

Cümlenin kelimelere bölünmesi veya bir dizeden bir kelime listesi oluşturulması, her metin işleme faaliyetinin önemli bir parçasıdır. Bunu, tarafından sağlanan çeşitli işlevler / modüller yardımıyla anlayalımnltk.tokenize paketi.

word_tokenize modülü

word_tokenizemodül temel kelime belirtme işlemi için kullanılır. Aşağıdaki örnek, bir cümleyi kelimelere ayırmak için bu modülü kullanacaktır.

Misal

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')

Çıktı

['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']

TreebankWordTokenizer Sınıfı

word_tokenize modül, temelde, tokenize () işlevini işlevin bir örneği olarak çağıran bir sarmalayıcı işlevidir. TreebankWordTokenizersınıf. Cümleleri kelimeye ayırmak için word_tokenize () modülünü kullanırken aldığımız çıktı ile aynı çıktıyı verecektir. Yukarıda uygulanan aynı örneği görelim -

Misal

İlk olarak, doğal dil araç setini (nltk) içe aktarmamız gerekiyor.

import nltk

Şimdi, TreebankWordTokenizer kelime belirteç algoritmasını uygulamak için sınıf -

from nltk.tokenize import TreebankWordTokenizer

Ardından, aşağıdaki gibi TreebankWordTokenizer sınıfının bir örneğini oluşturun -

Tokenizer_wrd = TreebankWordTokenizer()

Şimdi, belirteçlere dönüştürmek istediğiniz cümleyi girin -

Tokenizer_wrd.tokenize(
   'Tutorialspoint.com provides high quality technical tutorials for free.'
)

Çıktı

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials', 'for', 'free', '.'
]

Eksiksiz uygulama örneği

Aşağıdaki tam uygulama örneğini görelim

import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')

Çıktı

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials','for', 'free', '.'
]

Bir jetonlaştırıcının en önemli kuralı, kasılmaları ayırmaktır. Örneğin bu amaçla word_tokenize () modülünü kullanırsak, çıktı aşağıdaki gibi verecektir -

Misal

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')

Çıktı

['wo', "n't"]]

Bu tür bir kongre tarafından TreebankWordTokenizerkabul edilemez. Bu nedenle, iki alternatif kelime jetonlaştırıcımız var:PunktWordTokenizer ve WordPunctTokenizer.

WordPunktTokenizer Sınıfı

Tüm noktalama işaretlerini ayrı belirteçlere bölen alternatif bir sözcük belirteç oluşturucu. Bunu aşağıdaki basit örnekle anlayalım -

Misal

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")

Çıktı

['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']

Metni cümlelere dönüştürme

Bu bölümde metni / paragrafı cümlelere ayıracağız. NLTK sağlarsent_tokenize bu amaç için modül.

Neden gerekli?

Aklımıza gelen açık bir soru, kelime belirteçine sahip olduğumuzda neden cümle belirtecine ihtiyacımız var veya neden metni cümleler halinde belirtmemiz gerektiğidir. Cümlelerdeki ortalama kelimeleri saymamız gerektiğini varsayalım, bunu nasıl yapabiliriz? Bu görevi başarmak için hem cümle belirtme hem de sözcük belirtme işlemine ihtiyacımız var.

Aşağıdaki basit örnek yardımıyla cümle ve kelime belirteç arasındaki farkı anlayalım -

Misal

import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer. 
It is going to be a simple example."
sent_tokenize(text)

Çıktı

[
   "Let us understand the difference between sentence & word tokenizer.", 
   'It is going to be a simple example.'
]

Normal ifadeler kullanarak cümle belirtme

Sözcük belirtecinin çıktısının kabul edilemez olduğunu düşünüyorsanız ve metnin nasıl belirtileceğini tam olarak kontrol etmek istiyorsanız, cümle belirtme işlemi yaparken kullanılabilecek normal ifadeye sahibiz. NLTK sağlarRegexpTokenizer bunu başarmak için sınıf.

Aşağıdaki iki örnek yardımıyla kavramı anlayalım.

İlk örnekte, alfanümerik belirteçleri ve tek tırnak işaretlerini eşleştirmek için normal ifadeyi kullanacağız, böylece kısaltmaları ayırmayalım. “won’t”.

örnek 1

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")

Çıktı

["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']

İlk örnekte, boşlukta belirtmek için normal ifadeyi kullanacağız.

Örnek 2

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")

Çıktı

["won't", 'is', 'a', 'contraction']

Yukarıdaki çıktıdan, noktalama işaretlerinin jetonlarda kaldığını görebiliriz. Parametre boşlukları = True, modelin belirtilecek boşlukları belirleyeceği anlamına gelir. Öte yandan, gaps = False parametresini kullanacaksak, model aşağıdaki örnekte görülebilecek jetonları tanımlamak için kullanılacaktır -

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")

Çıktı

[ ]

Bize boş çıktı verecek.