Perangkat Bahasa Alami - Penggantian Kata
Stemming dan lemmatization dapat dianggap sebagai sejenis kompresi linguistik. Dalam pengertian yang sama, penggantian kata dapat dianggap sebagai normalisasi teks atau koreksi kesalahan.
Tetapi mengapa kami membutuhkan penggantian kata? Misalkan jika kita berbicara tentang tokenisasi, maka itu mengalami masalah dengan kontraksi (seperti tidak bisa, tidak mau, dll.). Jadi, untuk menangani masalah seperti itu kita membutuhkan penggantian kata. Misalnya, kita dapat mengganti kontraksi dengan bentuknya yang diperluas.
Penggantian kata menggunakan ekspresi reguler
Pertama, kami akan mengganti kata-kata yang cocok dengan ekspresi reguler. Tetapi untuk ini kita harus memiliki pemahaman dasar tentang ekspresi reguler serta modul ulang python. Pada contoh di bawah ini, kita akan mengganti kontraksi dengan bentuk yang diperluas (misalnya “tidak bisa” akan diganti dengan “tidak bisa”), semua itu dengan menggunakan ekspresi reguler.
Contoh
Pertama, impor kembali paket yang diperlukan untuk bekerja dengan ekspresi reguler.
import re
from nltk.corpus import wordnet
Selanjutnya, tentukan pola penggantian pilihan Anda sebagai berikut -
R_patterns = [
(r'won\'t', 'will not'),
(r'can\'t', 'cannot'),
(r'i\'m', 'i am'),
r'(\w+)\'ll', '\g<1> will'),
(r'(\w+)n\'t', '\g<1> not'),
(r'(\w+)\'ve', '\g<1> have'),
(r'(\w+)\'s', '\g<1> is'),
(r'(\w+)\'re', '\g<1> are'),
]
Sekarang, buat kelas yang bisa digunakan untuk mengganti kata -
class REReplacer(object):
def __init__(self, pattern = R_patterns):
self.pattern = [(re.compile(regex), repl) for (regex, repl) in patterns]
def replace(self, text):
s = text
for (pattern, repl) in self.pattern:
s = re.sub(pattern, repl, s)
return s
Simpan program python ini (katakanlah repRE.py) dan jalankan dari command prompt python. Setelah menjalankannya, impor kelas REReplacer ketika Anda ingin mengganti kata. Mari kita lihat caranya.
from repRE import REReplacer
rep_word = REReplacer()
rep_word.replace("I won't do it")
Output:
'I will not do it'
rep_word.replace("I can’t do it")
Output:
'I cannot do it'
Contoh implementasi lengkap
import re
from nltk.corpus import wordnet
R_patterns = [
(r'won\'t', 'will not'),
(r'can\'t', 'cannot'),
(r'i\'m', 'i am'),
r'(\w+)\'ll', '\g<1> will'),
(r'(\w+)n\'t', '\g<1> not'),
(r'(\w+)\'ve', '\g<1> have'),
(r'(\w+)\'s', '\g<1> is'),
(r'(\w+)\'re', '\g<1> are'),
]
class REReplacer(object):
def __init__(self, patterns=R_patterns):
self.patterns = [(re.compile(regex), repl) for (regex, repl) in patterns]
def replace(self, text):
s = text
for (pattern, repl) in self.patterns:
s = re.sub(pattern, repl, s)
return s
Sekarang setelah Anda menyimpan program di atas dan menjalankannya, Anda dapat mengimpor kelas dan menggunakannya sebagai berikut -
from replacerRE import REReplacer
rep_word = REReplacer()
rep_word.replace("I won't do it")
Keluaran
'I will not do it'
Penggantian sebelum pemrosesan teks
Salah satu praktik umum saat bekerja dengan pemrosesan bahasa alami (NLP) adalah membersihkan teks sebelum pemrosesan teks. Dalam perhatian ini kami juga dapat menggunakan fileREReplacer kelas yang dibuat di atas pada contoh sebelumnya, sebagai langkah awal sebelum pemrosesan teks yaitu tokenisasi.
Contoh
from nltk.tokenize import word_tokenize
from replacerRE import REReplacer
rep_word = REReplacer()
word_tokenize("I won't be able to do this now")
Output:
['I', 'wo', "n't", 'be', 'able', 'to', 'do', 'this', 'now']
word_tokenize(rep_word.replace("I won't be able to do this now"))
Output:
['I', 'will', 'not', 'be', 'able', 'to', 'do', 'this', 'now']
Dalam resep Python di atas, kita dapat dengan mudah memahami perbedaan antara keluaran kata tokenizer tanpa dan dengan menggunakan ganti ekspresi reguler.
Penghapusan karakter berulang
Apakah kita ketat gramatikal dalam bahasa kita sehari-hari? Tidak, bukan kami. Misalnya, terkadang kita menulis 'Hiiiiiiiiiiii Mohan' untuk menekankan kata 'Hi'. Tetapi sistem komputer tidak mengetahui bahwa 'Hiiiiiiiiiiii' adalah variasi dari kata “Hi”. Pada contoh di bawah ini, kami akan membuat kelas bernamarep_word_removal yang dapat digunakan untuk menghapus kata-kata yang berulang.
Contoh
Pertama, impor kembali paket yang diperlukan untuk bekerja dengan ekspresi reguler
import re
from nltk.corpus import wordnet
Sekarang, buat kelas yang dapat digunakan untuk menghapus kata-kata yang berulang -
class Rep_word_removal(object):
def __init__(self):
self.repeat_regexp = re.compile(r'(\w*)(\w)\2(\w*)')
self.repl = r'\1\2\3'
def replace(self, word):
if wordnet.synsets(word):
return word
repl_word = self.repeat_regexp.sub(self.repl, word)
if repl_word != word:
return self.replace(repl_word)
else:
return repl_word
Simpan program python ini (katakan removalrepeat.py) dan jalankan dari prompt perintah python. Setelah menjalankannya, imporRep_word_removalkelas ketika Anda ingin menghapus kata-kata yang berulang. Mari kita lihat bagaimana caranya?
from removalrepeat import Rep_word_removal
rep_word = Rep_word_removal()
rep_word.replace ("Hiiiiiiiiiiiiiiiiiiiii")
Output:
'Hi'
rep_word.replace("Hellooooooooooooooo")
Output:
'Hello'
Contoh implementasi lengkap
import re
from nltk.corpus import wordnet
class Rep_word_removal(object):
def __init__(self):
self.repeat_regexp = re.compile(r'(\w*)(\w)\2(\w*)')
self.repl = r'\1\2\3'
def replace(self, word):
if wordnet.synsets(word):
return word
replace_word = self.repeat_regexp.sub(self.repl, word)
if replace_word != word:
return self.replace(replace_word)
else:
return replace_word
Sekarang setelah Anda menyimpan program di atas dan menjalankannya, Anda dapat mengimpor kelas dan menggunakannya sebagai berikut -
from removalrepeat import Rep_word_removal
rep_word = Rep_word_removal()
rep_word.replace ("Hiiiiiiiiiiiiiiiiiiiii")
Keluaran
'Hi'