Perangkat Bahasa Alami - Mengubah Bagian
Mengapa mengubah potongan?
Sampai saat ini kita telah mendapatkan potongan atau frase dari kalimat tapi apa yang harus kita lakukan dengannya. Salah satu tugas penting adalah mengubahnya. Tapi kenapa? Untuk melakukan hal berikut -
- koreksi tata bahasa dan
- mengatur ulang frase
Memfilter kata-kata yang tidak penting / tidak berguna
Misalkan jika Anda ingin menilai arti dari sebuah frase maka ada banyak kata yang umum digunakan seperti, 'the', 'a', tidak signifikan atau tidak berguna. Misalnya, lihat frasa berikut -
'Filmnya bagus'.
Di sini kata yang paling penting adalah 'film' dan 'bagus'. Kata lain, 'the' dan 'was' keduanya tidak berguna atau tidak signifikan. Itu karena tanpa mereka juga kita bisa mendapatkan arti kalimat yang sama. 'Film bagus'.
Dalam resep python berikut, kita akan belajar cara menghapus kata-kata yang tidak berguna / tidak penting dan menyimpan kata-kata penting dengan bantuan tag POS.
Contoh
Pertama, dengan melihat-lihat treebankcorpus untuk stopwords kita perlu memutuskan tag part-of-speech mana yang signifikan dan mana yang tidak. Mari kita lihat tabel kata dan tag tidak penting berikut -
Kata | Menandai |
---|---|
Sebuah | DT |
Semua | PDT |
Sebuah | DT |
Dan | CC |
Atau | CC |
Bahwa | WDT |
Itu | DT |
Dari tabel di atas, kita dapat melihat selain CC, semua tag lainnya diakhiri dengan DT yang berarti kita dapat menyaring kata-kata yang tidak penting dengan melihat sufiks tag.
Untuk contoh ini, kita akan menggunakan fungsi bernama filter()yang mengambil satu potongan dan mengembalikan potongan baru tanpa kata-kata yang tidak ditandai. Fungsi ini menyaring semua tag yang diakhiri dengan DT atau CC.
Contoh
import nltk
def filter(chunk, tag_suffixes=['DT', 'CC']):
significant = []
for word, tag in chunk:
ok = True
for suffix in tag_suffixes:
if tag.endswith(suffix):
ok = False
break
if ok:
significant.append((word, tag))
return (significant)
Sekarang, mari kita gunakan filter fungsi ini () dalam resep Python kita untuk menghapus kata-kata yang tidak penting -
from chunk_parse import filter
filter([('the', 'DT'),('good', 'JJ'),('movie', 'NN')])
Keluaran
[('good', 'JJ'), ('movie', 'NN')]
Koreksi Kata Kerja
Seringkali, dalam bahasa dunia nyata kita melihat bentuk kata kerja yang salah. Misalnya, 'Anda baik-baik saja?' tidak benar. Bentuk kata kerja salah dalam kalimat ini. Kalimatnya harus 'apakah kamu baik-baik saja?' NLTK memberi kita cara untuk memperbaiki kesalahan tersebut dengan membuat pemetaan koreksi kata kerja. Pemetaan koreksi ini digunakan tergantung pada apakah ada kata benda jamak atau tunggal dalam potongan.
Contoh
Untuk mengimplementasikan resep Python, pertama-tama kita perlu mendefinisikan pemetaan koreksi kata kerja. Mari kita buat dua pemetaan sebagai berikut -
Plural to Singular mappings
plural= {
('is', 'VBZ'): ('are', 'VBP'),
('was', 'VBD'): ('were', 'VBD')
}
Singular to Plural mappings
singular = {
('are', 'VBP'): ('is', 'VBZ'),
('were', 'VBD'): ('was', 'VBD')
}
Seperti yang terlihat di atas, setiap pemetaan memiliki kata kerja yang diberi tag yang memetakan ke kata kerja yang diberi tag. Pemetaan awal dalam contoh kami mencakup dasar-dasar pemetaanis to are, was to were, dan sebaliknya.
Selanjutnya, kami akan menentukan fungsi bernama verbs(), di mana Anda dapat melewati celah dengan bentuk kata kerja yang salah dan akan mendapatkan bagian yang dikoreksi kembali. Untuk menyelesaikannya,verb() fungsi menggunakan fungsi pembantu bernama index_chunk() yang akan mencari potongan untuk posisi kata pertama yang diberi tag.
Mari kita lihat fungsi-fungsi ini -
def index_chunk(chunk, pred, start = 0, step = 1):
l = len(chunk)
end = l if step > 0 else -1
for i in range(start, end, step):
if pred(chunk[i]):
return i
return None
def tag_startswith(prefix):
def f(wt):
return wt[1].startswith(prefix)
return f
def verbs(chunk):
vbidx = index_chunk(chunk, tag_startswith('VB'))
if vbidx is None:
return chunk
verb, vbtag = chunk[vbidx]
nnpred = tag_startswith('NN')
nnidx = index_chunk(chunk, nnpred, start = vbidx+1)
if nnidx is None:
nnidx = index_chunk(chunk, nnpred, start = vbidx-1, step = -1)
if nnidx is None:
return chunk
noun, nntag = chunk[nnidx]
if nntag.endswith('S'):
chunk[vbidx] = plural.get((verb, vbtag), (verb, vbtag))
else:
chunk[vbidx] = singular.get((verb, vbtag), (verb, vbtag))
return chunk
Simpan fungsi ini dalam file Python di direktori lokal Anda tempat Python atau Anaconda diinstal dan jalankan. Saya telah menyimpannya sebagaiverbcorrect.py.
Sekarang, mari kita telepon verbs() berfungsi pada POS dengan tag is you fine potongan -
from verbcorrect import verbs
verbs([('is', 'VBZ'), ('you', 'PRP$'), ('fine', 'VBG')])
Keluaran
[('are', 'VBP'), ('you', 'PRP$'), ('fine','VBG')]
Menghilangkan kalimat pasif dari frase
Tugas berguna lainnya adalah menghilangkan kalimat pasif dari frasa. Ini dapat dilakukan dengan bantuan menukar kata-kata di sekitar kata kerja. Sebagai contoh,‘the tutorial was great’ dapat diubah menjadi ‘the great tutorial’.
Contoh
Untuk mencapai ini kita mendefinisikan fungsi bernama eliminate_passive()yang akan menukar sisi kanan potongan dengan sisi kiri dengan menggunakan kata kerja sebagai titik pivot. Untuk menemukan kata kerja yang akan berputar, itu juga akan menggunakanindex_chunk() fungsi yang didefinisikan di atas.
def eliminate_passive(chunk):
def vbpred(wt):
word, tag = wt
return tag != 'VBG' and tag.startswith('VB') and len(tag) > 2
vbidx = index_chunk(chunk, vbpred)
if vbidx is None:
return chunk
return chunk[vbidx+1:] + chunk[:vbidx]
Sekarang, mari kita telepon eliminate_passive() berfungsi pada POS dengan tag the tutorial was great potongan -
from passiveverb import eliminate_passive
eliminate_passive(
[
('the', 'DT'), ('tutorial', 'NN'), ('was', 'VBD'), ('great', 'JJ')
]
)
Keluaran
[('great', 'JJ'), ('the', 'DT'), ('tutorial', 'NN')]
Menukar kata benda kardinal
Seperti yang kita ketahui, kata utama seperti 5, ditandai sebagai CD dalam potongan. Kata-kata utama ini sering muncul sebelum atau sesudah kata benda, tetapi untuk tujuan normalisasi, sebaiknya selalu diletakkan sebelum kata benda. Misalnya tanggalJanuary 5 dapat ditulis sebagai 5 January. Mari kita pahami dengan contoh berikut.
Contoh
Untuk mencapai ini kita mendefinisikan fungsi bernama swapping_cardinals()yang akan menukar kardinal apa pun yang muncul segera setelah kata benda dengan kata benda. Dengan ini kardinal akan muncul tepat sebelum kata benda. Untuk melakukan perbandingan kesetaraan dengan tag yang diberikan, itu menggunakan fungsi pembantu yang kami namai sebagaitag_eql().
def tag_eql(tag):
def f(wt):
return wt[1] == tag
return f
Sekarang kita bisa mendefinisikan swapping_cardinals () -
def swapping_cardinals (chunk):
cdidx = index_chunk(chunk, tag_eql('CD'))
if not cdidx or not chunk[cdidx-1][1].startswith('NN'):
return chunk
noun, nntag = chunk[cdidx-1]
chunk[cdidx-1] = chunk[cdidx]
chunk[cdidx] = noun, nntag
return chunk
Sekarang, mari kita telepon swapping_cardinals() berfungsi pada kencan “January 5” -
from Cardinals import swapping_cardinals()
swapping_cardinals([('Janaury', 'NNP'), ('5', 'CD')])
Keluaran
[('10', 'CD'), ('January', 'NNP')]
10 January