Derlem Okuyucuları ve Özel Kuruluş

Bir külliyat nedir?

Bir külliyat, doğal bir iletişim ortamında üretilmiş, makine tarafından okunabilir metinlerin yapılandırılmış biçimde büyük bir koleksiyonudur. Corpora kelimesi Corpus'un çoğuludur. Derlem aşağıdaki gibi birçok şekilde türetilebilir -

  • Orijinal olarak elektronik olan metinden
  • Konuşulan dilin transkriptlerinden
  • Optik karakter tanımadan vb.

Derlem temsilciliği, Derlem Dengesi, Örnekleme, Derlem Büyüklüğü, derlem tasarlanırken önemli rol oynayan unsurlardır. NLP görevleri için en popüler külliyatlardan bazıları TreeBank, PropBank, VarbNet ve WordNet'tir.

Özel korpus nasıl oluşturulur?

NLTK'yi indirirken, NLTK veri paketini de kurduk. Yani, zaten bilgisayarımızda NLTK veri paketi kurulu. Windows hakkında konuşursak, bu veri paketinin şu adrese yüklendiğini varsayacağız:C:\natural_language_toolkit_data ve Linux, Unix ve Mac OS X hakkında konuşursak, bu veri paketinin şu adrese yüklendiğini varsayacağız: /usr/share/natural_language_toolkit_data.

Aşağıdaki Python tarifinde, NLTK tarafından tanımlanan yollardan biri içinde olması gereken özel corpora oluşturacağız. Öyle çünkü NLTK tarafından bulunabilir. Resmi NLTK veri paketiyle çakışmayı önlemek için, ana dizinimizde özel bir doğal_dil_toolkit_data dizini oluşturalım.

import os, os.path
path = os.path.expanduser('~/natural_language_toolkit_data')
if not os.path.exists(path):
   os.mkdir(path)
os.path.exists(path)

Çıktı

True

Şimdi, ana dizinimizde natural_language_toolkit_data dizinimiz olup olmadığını kontrol edelim -

import nltk.data
path in nltk.data.path

Çıktı

True

True çıktısına sahip olduğumuz için, nltk_data ana dizinimizdeki dizin.

Şimdi adlı bir wordlist dosyası yapacağız. wordfile.txt ve bunu korpus adlı bir klasöre koyun nltk_data dizin (~/nltk_data/corpus/wordfile.txt) ve kullanarak yükleyecek nltk.data.load -

import nltk.data
nltk.data.load(‘corpus/wordfile.txt’, format = ‘raw’)

Çıktı

b’tutorialspoint\n’

Derlem okuyucuları

NLTK, çeşitli CorpusReader sınıfları sağlar. Bunları aşağıdaki piton tariflerinde ele alacağız

Kelime listesi külliyatının oluşturulması

NLTK, WordListCorpusReaderkelime listesi içeren dosyaya erişim sağlayan sınıf. Aşağıdaki Python tarifi için, CSV veya normal metin dosyası olabilen bir wordlist dosyası oluşturmamız gerekiyor. Örneğin, aşağıdaki verileri içeren 'liste' adlı bir dosya oluşturduk -

tutorialspoint
Online
Free
Tutorials

Şimdi bir örnekleyelim WordListCorpusReader Oluşturduğumuz dosyadan kelime listesini üreten sınıf ‘list’.

from nltk.corpus.reader import WordListCorpusReader
reader_corpus = WordListCorpusReader('.', ['list'])
reader_corpus.words()

Çıktı

['tutorialspoint', 'Online', 'Free', 'Tutorials']

POS etiketli kelime külliyatı oluşturma

NLTK, TaggedCorpusReaderPOS etiketli bir kelime korpusu oluşturabileceğimiz bir sınıf. Aslında, POS etiketleme, bir kelime için konuşma parçası etiketini tanımlama işlemidir.

Etiketli bir külliyat için en basit biçimlerden biri, kahverengi külliyattan alınan alıntıdan sonra gelen 'kelime / etiket' biçimindedir -

The/at-tl expense/nn and/cc time/nn involved/vbn are/ber
astronomical/jj ./.

Yukarıdaki alıntıda, her kelimenin POS'unu gösteren bir etiketi vardır. Örneğin,vb bir fiil anlamına gelir.

Şimdi bir örnekleyelim TaggedCorpusReadersınıf üreten POS etiketli kelimeleri dosyadan oluşturur ‘list.pos’, yukarıdaki alıntıya sahip.

from nltk.corpus.reader import TaggedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.pos')
reader_corpus.tagged_words()

Çıktı

[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ...]

Yığınlanmış kelime öbeği korpusu oluşturma

NLTK, ChnkedCorpusReaderyardımıyla bir Chunked cümle külliyatını oluşturabileceğimiz sınıf. Aslında yığın, cümle içindeki kısa bir ifadedir.

Örneğin, etiketli aşağıdaki alıntıya sahibiz: treebank külliyat -

[Earlier/JJR staff-reduction/NN moves/NNS] have/VBP trimmed/VBN about/
IN [300/CD jobs/NNS] ,/, [the/DT spokesman/NN] said/VBD ./.

Yukarıdaki alıntıda, her yığın bir isim tümcecikidir, ancak parantez içinde olmayan sözcükler cümle ağacının bir parçasıdır ve herhangi bir isim tümcesi alt ağacının parçası değildir.

Şimdi bir örnekleyelim ChunkedCorpusReader dosyadan öbek öbek üreten sınıf üreten ‘list.chunk’, yukarıdaki alıntıya sahip.

from nltk.corpus.reader import ChunkedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.chunk')
reader_corpus.chunked_words()

Çıktı

[
   Tree('NP', [('Earlier', 'JJR'), ('staff-reduction', 'NN'), ('moves', 'NNS')]),
   ('have', 'VBP'), ...
]

Kategorize Edilmiş Metin Külliyatı Oluşturma

NLTK, CategorizedPlaintextCorpusReaderyardımıyla kategorize edilmiş bir metin korpusu oluşturabileceğimiz sınıf. Büyük bir metin külliyatına sahip olduğumuzda ve bunu ayrı bölümlere ayırmak istediğimizde çok kullanışlıdır.

Örneğin, kahverengi külliyatın birkaç farklı kategorisi vardır. Bunları Python kodunu takip ederek bulalım -

from nltk.corpus import brown^M
brown.categories()

Çıktı

[
   'adventure', 'belles_lettres', 'editorial', 'fiction', 'government',
   'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion',
   'reviews', 'romance', 'science_fiction'
]

Bir derlemeyi kategorize etmenin en kolay yollarından biri, her kategori için bir dosyaya sahip olmaktır. Örneğin, şu iki alıntıyı görelim:movie_reviews külliyat -

movie_pos.txt

İnce kırmızı çizgi kusurlu ama kışkırtıyor.

movie_neg.txt

Büyük bütçeli ve gösterişli bir yapım, televizyon şovlarına nüfuz eden kendiliğindenlik eksikliğini telafi edemez.

Yani, yukarıdaki iki dosyadan iki kategorimiz var: pos ve neg.

Şimdi bir örnekleyelim CategorizedPlaintextCorpusReader sınıf.

from nltk.corpus.reader import CategorizedPlaintextCorpusReader
reader_corpus = CategorizedPlaintextCorpusReader('.', r'movie_.*\.txt',
cat_pattern = r'movie_(\w+)\.txt')
reader_corpus.categories()
reader_corpus.fileids(categories = [‘neg’])
reader_corpus.fileids(categories = [‘pos’])

Çıktı

['neg', 'pos']
['movie_neg.txt']
['movie_pos.txt']