POS Tagging dengan NLTK dan Chunking di NLP [CONTOH]
Penandaan POS
Penandaan POS (Parts of Speech Tagging) adalah proses menandai kata-kata dalam format teks untuk suatu bagian pidato tertentu berdasarkan definisi dan konteksnya. Ini bertanggung jawab untuk membaca teks dalam suatu bahasa dan menetapkan beberapa token tertentu (Parts of Speech) untuk setiap kata. Ini juga disebut penandaan tata bahasa.
Mari belajar dengan contoh NLTK Part of Speech:
Memasukkan: Semuanya mengizinkan kita.
Keluaran: [('Semuanya', NN),('ke', TO), ('izin', VB), ('kita', PRP)]
Langkah-langkah yang Terlibat dalam contoh penandaan POS
- Tokenisasi teks (word_tokenize)
- terapkan pos_tag ke langkah di atas yaitu nltk.pos_tag(tokenize_text)
Contoh Tag NLTK POS adalah seperti di bawah ini:
singkatan | Arti |
---|---|
CC | konjungsi koordinatif |
CD | angka kardinal |
DT | penentu |
EX | eksistensial di sana |
FW | kata asing |
IN | kata depan/konjungsi bawahan |
JJ | Tag NLTK POS ini merupakan kata sifat (besar) |
JJR | kata sifat, komparatif (lebih besar) |
JJS | kata sifat, superlatif (terbesar) |
LS | daftar pasar |
MD | modal (bisa, akan) |
NN | kata benda, tunggal (kucing, pohon) |
NNS | kata benda jamak (meja) |
NNP | kata benda yang tepat, tunggal (sarah) |
NNPS | kata benda yang tepat, jamak (India atau Amerika) |
PDT | predeterminer (semua, keduanya, setengah) |
POS | akhiran posesif (orang tua) |
PRP | kata ganti orang (miliknya, dirinya sendiri, dia, dirinya sendiri) |
PRP$ | kata ganti posesif (dia, miliknya, milikku, milikku, milik kita) |
RB | kata keterangan (kadang-kadang, dengan cepat) |
RBR | kata keterangan, komparatif (lebih besar) |
RBS | kata keterangan, superlatif (terbesar) |
RP | partikel (tentang) |
UNTUK | penanda tak terbatas (ke) |
UH | kata seru (selamat tinggal) |
VB | kata kerja (bertanya) |
GBV | kata kerja gerund (menilai) |
VBD | kata kerja past tense (memohon) |
VBN | kata kerja past participle (disatukan kembali) |
VBP | kata kerja, present tense bukan orang ketiga tunggal (bungkus) |
VBZ | kata kerja, present tense dengan orang ketiga tunggal (basis) |
WDT | penentu wh (itu, apa) |
WP | wh- kata ganti (siapa) |
WRB | wh- kata keterangan (bagaimana) |
Daftar tag NLTK POS di atas berisi semua Tag NLTK POS. NLTK POS tagger digunakan untuk memberikan informasi tata bahasa setiap kata dalam kalimat. Instalasi, Impor dan download semua paket POS NLTK selesai.
Apa itu Chunking di NLP?
Memotong dalam NLP merupakan proses untuk mengambil potongan-potongan kecil informasi dan mengelompokkannya menjadi unit-unit besar. Penggunaan utama Chunking adalah membuat kelompok-kelompok “frasa kata benda.” Chunking digunakan untuk menambahkan struktur pada kalimat dengan mengikuti penandaan POS yang dikombinasikan dengan ekspresi reguler. Kelompok kata yang dihasilkan disebut “chunk.” Chunking juga disebut shallow parsing.
Pada penguraian dangkal, maksimal terdapat satu tingkat antara akar dan daun, sedangkan penguraian dalam terdiri dari lebih dari satu tingkat. Parsing dangkal disebut juga light parsing atau chunking.
Aturan untuk Memotong
Tidak ada aturan yang ditentukan sebelumnya, tetapi Anda dapat menggabungkannya sesuai kebutuhan dan kebutuhan.
Misalnya, Anda perlu menandai Kata Benda, kata kerja (past tense), kata sifat, dan sambungan koordinat dari kalimat. Anda dapat menggunakan aturan seperti di bawah ini
bingkah:{ * * * ?}
Tabel berikut menunjukkan arti dari berbagai simbol tersebut:
Nama simbol | Description |
---|---|
. | Karakter apa pun kecuali baris baru |
* | Cocokkan 0 atau lebih pengulangan |
? | Cocokkan 0 atau 1 pengulangan |
Sekarang Mari kita menulis kode untuk memahami aturan dengan lebih baik
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)
Keluaran:
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))
Kesimpulan dari penandaan Part of Speech di atas Python Contoh: “make” adalah kata kerja yang tidak termasuk dalam aturan, sehingga tidak diberi tag mychunk
Kasus Penggunaan Chunking
Chunking digunakan untuk deteksi entitas. Entitas adalah bagian kalimat yang mesinnya mendapatkan nilai untuk maksud apa pun.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Dengan kata lain, chunking digunakan sebagai pemilihan subset token. Silakan ikuti kode di bawah ini untuk memahami bagaimana chunking digunakan untuk memilih token. Dalam contoh ini, Anda akan melihat grafik yang sesuai dengan potongan frase kata benda. Kami akan menulis kode dan menggambar grafik untuk pemahaman yang lebih baik.
Kode untuk Mendemonstrasikan Kasus Penggunaan
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
Keluaran:
['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
Dari grafik tersebut, kita dapat menyimpulkan bahwa “belajar” dan “guru99” adalah dua token yang berbeda tetapi dikategorikan sebagai Noun Phrase sedangkan token “from” bukan milik Noun Phrase.
Chunking digunakan untuk mengkategorikan token yang berbeda ke dalam potongan yang sama. Hasilnya akan tergantung pada tata bahasa yang dipilih. Chunking NLTK lebih lanjut digunakan untuk menandai pola dan menjelajahi corpora teks.
MENGHITUNG TAG POS
Berbagai macam sudah kami bahas pos_tag di bagian sebelumnya. Dalam tutorial khusus ini, Anda akan mempelajari cara menghitung tag ini. Menghitung tag sangat penting untuk klasifikasi teks serta menyiapkan fitur untuk operasi berbasis bahasa alami. Saya akan membahas dengan Anda pendekatan yang diikuti guru99 saat menyiapkan kode beserta pembahasan tentang output. Semoga ini dapat membantu Anda.
Cara menghitung Tag:
Di sini pertama-tama kita akan menulis kode kerja dan kemudian kita akan menulis langkah-langkah berbeda untuk menjelaskan kode tersebut.
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)
Keluaran:
Penghitung({'NN': 5, ',': 2, 'KE': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})
Elaborasi kode
- Untuk menghitung tag, Anda dapat menggunakan paket Counter dari modul koleksi. Counter adalah subkelas dictionary yang bekerja berdasarkan prinsip operasi key-value. Ini adalah koleksi tak berurutan di mana elemen disimpan sebagai kunci dictionary sementara count adalah nilainya.
- Impor nltk yang berisi modul untuk memberi token pada teks.
- Tulis teks yang pos_tagnya ingin Anda hitung.
- Beberapa kata menggunakan huruf besar dan beberapa menggunakan huruf kecil, jadi sebaiknya ubah semua kata menjadi huruf kecil sebelum menerapkan tokenisasi.
- Sampaikan kata-kata melalui word_tokenize dari nltk.
- Hitung pos_tag setiap token
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')]
- Kini hadir peran penghitung kamus. Kami telah mengimpor baris kode 1. Kata-kata adalah kuncinya dan tag adalah nilainya dan penghitung akan menghitung setiap jumlah total tag yang ada dalam teks.
Distribusi Frekuensi
Distribusi Frekuensi disebut sebagai berapa kali suatu hasil percobaan terjadi. Ini digunakan untuk menemukan frekuensi setiap kata yang muncul dalam sebuah dokumen. Ini menggunakan Kelas FreqDist dan ditentukan oleh nltk.probabilitas modul.
Distribusi frekuensi biasanya dibuat dengan menghitung sampel dari percobaan yang dijalankan berulang kali. Jumlah hitungan bertambah satu, setiap kali. Misalnya
freq_dist = FreqDist()
untuk token dalam dokumen:
freq_dist.inc(token.type())
Untuk kata apa pun, kita dapat memeriksa berapa kali kata tersebut muncul dalam dokumen tertentu. Misalnya
- Metode Penghitungan: freq_dist.count('and')Ekspresi ini mengembalikan nilai berapa kali 'dan' terjadi. Ini disebut metode penghitungan.
- Metode Frekuensi: freq_dist.freq('and') Ekspresi ini mengembalikan frekuensi sampel tertentu.
Kami akan menulis sebuah program kecil dan akan menjelaskan cara kerjanya secara rinci. Kami akan menulis beberapa teks dan menghitung distribusi frekuensi setiap kata dalam teks.
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()
Penjelasan kode:
- Impor modul nltk.
- Tulis teks yang distribusi katanya perlu Anda temukan.
- Tokenisasikan setiap kata dalam teks yang disajikan sebagai masukan ke modul FreqDist di nltk.
- Terapkan setiap kata ke nlk.FreqDist dalam bentuk daftar
- Plot kata-kata dalam grafik menggunakan plot()
Silakan visualisasikan grafik untuk pemahaman yang lebih baik tentang teks yang ditulis
CATATAN: Anda harus menginstal matplotlib untuk melihat grafik di atas
Perhatikan grafik di atas. Ini berhubungan dengan menghitung kemunculan setiap kata dalam teks. Ini membantu dalam mempelajari teks dan selanjutnya dalam menerapkan analisis sentimental berbasis teks. Singkatnya, dapat disimpulkan bahwa nltk memiliki modul untuk menghitung kemunculan setiap kata dalam teks yang membantu dalam mempersiapkan statistik fitur bahasa alami. Ini memainkan peran penting dalam menemukan kata kunci dalam teks. Anda juga dapat mengekstrak teks dari pdf menggunakan perpustakaan seperti ekstrak, PyPDF2 dan memasukkan teks ke nlk.FreqDist.
Istilah kuncinya adalah "tokenisasi." Setelah tokenisasi, ia memeriksa setiap kata dalam paragraf atau dokumen teks tertentu untuk menentukan berapa kali kata itu muncul. Anda tidak memerlukan perangkat NLTK untuk ini. Anda juga dapat melakukannya dengan keterampilan pemrograman python Anda sendiri. Perangkat NLTK hanya menyediakan kode siap pakai untuk berbagai operasi.
Menghitung setiap kata mungkin tidak banyak berguna. Sebaliknya, seseorang harus fokus pada kolokasi dan bigram yang menangani banyak kata dalam satu pasangan. Pasangan ini mengidentifikasi kata kunci yang berguna untuk fitur bahasa alami yang lebih baik yang dapat dimasukkan ke mesin. Silakan lihat di bawah untuk perinciannya.
Kolokasi: Bigram dan Trigram
Apa itu Kolokasi?
Kolokasi adalah pasangan kata yang muncul bersamaan berkali-kali dalam sebuah dokumen. Ini dihitung berdasarkan jumlah pasangan yang muncul bersamaan dengan jumlah kata keseluruhan dalam dokumen.
Pertimbangkan spektrum elektromagnetik dengan kata-kata seperti sinar ultraviolet, sinar inframerah.
Kata ultraviolet dan sinar tidak digunakan secara terpisah sehingga dapat dianggap sebagai Kolokasi. Contoh lainnya adalah CT Scan. Kami tidak menyebut CT dan Scan secara terpisah, dan karenanya keduanya juga diperlakukan sebagai kolokasi.
Kita dapat mengatakan bahwa menemukan kolokasi memerlukan penghitungan frekuensi kata dan kemunculannya dalam konteks kata lain. Kumpulan kata spesifik ini memerlukan pemfilteran untuk mempertahankan istilah konten yang berguna. Setiap gram kata kemudian dapat dinilai berdasarkan beberapa ukuran asosiasi, untuk menentukan kemungkinan relatif setiap Ingram menjadi kolokasi.
Kolokasi dapat dikategorikan menjadi dua jenis-
- Bigram ckombinasi dua kata
- Trigramkombinasi tiga kata
Bigram dan Trigram memberikan fitur yang lebih bermakna dan berguna untuk tahap ekstraksi fitur. Ini khususnya berguna dalam analisis sentimental berbasis teks.
Kode Contoh Bigram
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Keluaran:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Kode Contoh Trigram
Terkadang menjadi penting untuk melihat sepasang tiga kata dalam sebuah kalimat untuk analisis statistik dan penghitungan frekuensi. Ini sekali lagi memainkan peran penting dalam pembentukan NLP (fitur pemrosesan bahasa alami) serta prediksi sentimental berbasis teks.
Kode yang sama dijalankan untuk menghitung trigram.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Keluaran:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Menandai Kalimat
Penandaan Kalimat dalam arti yang lebih luas mengacu pada penambahan label pada kata kerja, kata benda, dan lain-lain, sesuai dengan konteks kalimat. Identifikasi tag POS adalah proses yang rumit. Oleh karena itu, penandaan umum POS secara manual tidak dapat dilakukan karena beberapa kata mungkin memiliki arti yang berbeda (ambigu) sesuai dengan struktur kalimat. Konversi teks dalam bentuk daftar merupakan langkah penting sebelum pemberian tag karena setiap kata dalam daftar dilingkarkan dan dihitung untuk tag tertentu. Silakan lihat kode di bawah ini untuk memahaminya dengan lebih baik
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)))
Keluaran:
[('Halo', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Kamu', 'PRP'), ('punya', 'VBP') , ('membangun', 'VBN'), ('a', 'DT'), ('sangat', 'RB'), ('bagus', 'JJ'), ('situs', 'NN') , ('dan', 'CC'), ('I', 'PRP'), ('cinta', 'VBP'), ('mengunjungi', 'VBG'), ('Anda', 'PRP$' ), ('situs', 'NN'), ('.', '.')]
Penjelasan Kode:
- Kode untuk mengimpor nltk (Perangkat bahasa alami yang berisi submodul seperti tokenize kalimat dan tokenize kata.)
- Teks yang tagnya akan dicetak.
- Tokenisasi Kalimat
- For loop diimplementasikan di mana kata-kata diberi token dari kalimat dan tag setiap kata dicetak sebagai output.
Di Corpus ada dua jenis POS tagger:
- Berbasis Aturan
- Penanda POS Stochastic
1.Penanda POS Berbasis Aturan: Untuk kata-kata yang memiliki makna ambigu, pendekatan berbasis aturan berdasarkan informasi kontekstual diterapkan. Pendekatan ini dilakukan dengan memeriksa atau menganalisis makna kata sebelum atau sesudahnya. Informasi dianalisis dari sekitar kata atau dari dalam dirinya sendiri. Oleh karena itu, kata-kata diberi tag berdasarkan aturan tata bahasa suatu bahasa tertentu seperti kapitalisasi dan tanda baca. Misalnya, penanda Brill.
2. Penanda POS Stokastik: Pendekatan berbeda seperti frekuensi atau probabilitas diterapkan dalam metode ini. Jika suatu kata sebagian besar ditandai dengan tag tertentu di set pelatihan, maka dalam kalimat pengujian kata tersebut diberi tag tertentu. Tag kata tidak hanya bergantung pada tagnya sendiri tetapi juga pada tag sebelumnya. Cara ini tidak selalu akurat. Cara lain adalah dengan menghitung probabilitas kemunculan tag tertentu dalam sebuah kalimat. Dengan demikian tag akhir dihitung dengan memeriksa probabilitas tertinggi suatu kata dengan tag tertentu.
Penandaan POS dengan Model Markov Tersembunyi
Masalah Penandaan juga dapat dimodelkan menggunakan HMM. Ini memperlakukan token masukan sebagai urutan yang dapat diamati sementara tag dianggap sebagai status tersembunyi dan tujuannya adalah untuk menentukan urutan status tersembunyi. Misalnya x = x1,x2,…………,Xn dimana x adalah barisan token while kamu = kamu1,y2,y3,y4………kamunadalah urutan tersembunyi.
Bagaimana Model Markov Tersembunyi (HMM) Bekerja?
HMM menggunakan distribusi join yaitu P(x, y) dimana x adalah urutan input/urutan token dan y adalah urutan tag.
Urutan Tag untuk x akan menjadi argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Kami telah mengkategorikan tag dari teks, tetapi statistik dari tag tersebut sangat penting. Jadi bagian selanjutnya adalah menghitung tag ini untuk studi statistik.
Kesimpulan
- Penandaan POS NLTK adalah proses menandai kata-kata dalam format teks untuk bagian pidato tertentu berdasarkan definisi dan konteksnya.
- Beberapa contoh penandaan POS NLTK adalah: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, dll.
- POS tagger digunakan untuk memberikan informasi tata bahasa setiap kata dalam kalimat. Instalasi, Impor dan download semua paket penandaan Part of Speech dengan NLTK selesai.
- Chunking dalam NLP adalah proses mengambil potongan-potongan kecil informasi dan mengelompokkannya menjadi unit-unit besar.
- Tidak ada aturan yang ditentukan sebelumnya, tetapi Anda dapat menggabungkannya sesuai kebutuhan dan kebutuhan.
- Chunking digunakan untuk deteksi entitas. Entitas adalah bagian kalimat yang mesinnya mendapatkan nilai untuk maksud apa pun.
- Chunking digunakan untuk mengkategorikan token yang berbeda ke dalam potongan yang sama.