Corpus Readers dan Custom Corpora
Apa itu corpus?
Korpus adalah kumpulan besar, dalam format terstruktur, teks yang dapat dibaca mesin yang telah diproduksi dalam pengaturan komunikatif alami. Kata Corpora adalah bentuk jamak dari Corpus. Corpus dapat diturunkan dengan berbagai cara sebagai berikut -
- Dari teks yang aslinya elektronik
- Dari transkrip bahasa lisan
- Dari pengenalan karakter optik dan sebagainya
Corpus Representativeness, Corpus Balance, Sampling, Corpus Size merupakan elemen-elemen yang berperan penting dalam mendesain corpus. Beberapa corpus paling populer untuk tugas NLP adalah TreeBank, PropBank, VarbNet dan WordNet.
Bagaimana cara membangun korpus khusus?
Saat mengunduh NLTK, kami juga menginstal paket data NLTK. Jadi, kami sudah menginstal paket data NLTK di komputer kami. Jika kita berbicara tentang Windows, kita akan menganggap bahwa paket data ini diinstal diC:\natural_language_toolkit_data dan jika kita berbicara tentang Linux, Unix dan Mac OS X, kita akan berasumsi bahwa paket data ini diinstal di /usr/share/natural_language_toolkit_data.
Dalam resep Python berikut, kita akan membuat corpora khusus yang harus berada dalam salah satu jalur yang ditentukan oleh NLTK. Karena dapat ditemukan oleh NLTK. Untuk menghindari konflik dengan paket data NLTK resmi, mari kita buat direktori natural_language_toolkit_data kustom di direktori home kita.
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)
Keluaran
True
Sekarang, Mari kita periksa apakah kita memiliki direktori natural_language_toolkit_data di direktori home kita atau tidak -
import nltk.data
path in nltk.data.path
Keluaran
True
Karena kita sudah mendapatkan output True, berarti kita punya nltk_data direktori di direktori home kami.
Sekarang kita akan membuat file daftar kata, bernama wordfile.txt dan taruh di folder bernama corpus in nltk_data direktori (~/nltk_data/corpus/wordfile.txt) dan akan memuatnya dengan menggunakan nltk.data.load -
import nltk.data
nltk.data.load(‘corpus/wordfile.txt’, format = ‘raw’)
Keluaran
b’tutorialspoint\n’
Pembaca korpus
NLTK menyediakan berbagai kelas CorpusReader. Kami akan membahasnya dalam resep python berikut
Membuat korpus daftar kata
NLTK memiliki WordListCorpusReaderkelas yang menyediakan akses ke file yang berisi daftar kata. Untuk resep Python berikut, kita perlu membuat file daftar kata yang bisa berupa CSV atau file teks biasa. Misalnya, kami telah membuat file bernama 'list' yang berisi data berikut -
tutorialspoint
Online
Free
Tutorials
Sekarang Mari kita contoh a WordListCorpusReader kelas yang menghasilkan daftar kata dari file yang kami buat ‘list’.
from nltk.corpus.reader import WordListCorpusReader
reader_corpus = WordListCorpusReader('.', ['list'])
reader_corpus.words()
Keluaran
['tutorialspoint', 'Online', 'Free', 'Tutorials']
Membuat corpus kata dengan tag POS
NLTK memiliki TaggedCorpusReaderkelas dengan bantuan yang kita dapat membuat korpus kata dengan tag POS. Sebenarnya, penandaan POS adalah proses mengidentifikasi tag part-of-speech untuk sebuah kata.
Salah satu format paling sederhana untuk korpus yang diberi tag adalah dalam bentuk 'kata / tag' seperti kutipan berikut dari korpus coklat -
The/at-tl expense/nn and/cc time/nn involved/vbn are/ber
astronomical/jj ./.
Dalam kutipan di atas, setiap kata memiliki tag yang menunjukkan POS-nya. Sebagai contoh,vb mengacu pada kata kerja.
Sekarang Mari kita contoh a TaggedCorpusReaderkelas memproduksi kata-kata dengan tag POS dari file ‘list.pos’, yang memiliki kutipan di atas.
from nltk.corpus.reader import TaggedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.pos')
reader_corpus.tagged_words()
Keluaran
[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ...]
Membuat korpus frase yang terpotong-potong
NLTK memiliki ChnkedCorpusReaderkelas dengan bantuan yang kita dapat membuat korpus frase Chunked. Sebenarnya, potongan adalah frasa pendek dalam sebuah kalimat.
Misalnya, kami memiliki kutipan berikut dari tag treebank korpus -
[Earlier/JJR staff-reduction/NN moves/NNS] have/VBP trimmed/VBN about/
IN [300/CD jobs/NNS] ,/, [the/DT spokesman/NN] said/VBD ./.
Dalam kutipan di atas, setiap potongan adalah frase kata benda tetapi kata-kata yang tidak ada dalam tanda kurung adalah bagian dari pohon kalimat dan bukan bagian dari subpohon frase kata benda.
Sekarang Mari kita contoh a ChunkedCorpusReader kelas memproduksi frase potongan dari file ‘list.chunk’, yang memiliki kutipan di atas.
from nltk.corpus.reader import ChunkedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.chunk')
reader_corpus.chunked_words()
Keluaran
[
Tree('NP', [('Earlier', 'JJR'), ('staff-reduction', 'NN'), ('moves', 'NNS')]),
('have', 'VBP'), ...
]
Membuat korpus teks yang dikategorikan
NLTK memiliki CategorizedPlaintextCorpusReaderkelas dengan bantuan yang kita dapat membuat korpus teks yang dikategorikan. Ini sangat berguna jika kita memiliki korpus teks yang besar dan ingin mengkategorikannya menjadi beberapa bagian terpisah.
Misalnya, korpus coklat memiliki beberapa kategori berbeda. Mari kita cari tahu dengan bantuan kode Python berikut -
from nltk.corpus import brown^M
brown.categories()
Keluaran
[
'adventure', 'belles_lettres', 'editorial', 'fiction', 'government',
'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion',
'reviews', 'romance', 'science_fiction'
]
Salah satu cara termudah untuk mengkategorikan korpus adalah dengan memiliki satu file untuk setiap kategori. Misalnya, mari kita lihat dua kutipan darimovie_reviews korpus -
movie_pos.txt
Garis merah tipis cacat tetapi memprovokasi.
movie_neg.txt
Anggaran besar dan produksi glossy tidak bisa menutupi kurangnya spontanitas yang merembes ke acara TV mereka.
Jadi, dari dua file di atas, kami memiliki dua kategori yaitu pos dan neg.
Sekarang mari kita contoh a CategorizedPlaintextCorpusReader kelas.
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’])
Keluaran
['neg', 'pos']
['movie_neg.txt']
['movie_pos.txt']