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'