Penggantian Sinonim & Antonim
Mengganti kata dengan sinonim umum
Saat bekerja dengan NLP, terutama dalam kasus analisis frekuensi dan pengindeksan teks, mengompresi kosakata tanpa kehilangan makna selalu bermanfaat karena menghemat banyak memori. Untuk mencapai ini, kita harus mendefinisikan pemetaan kata ke sinonimnya. Pada contoh di bawah ini, kami akan membuat kelas bernamaword_syn_replacer yang dapat digunakan untuk mengganti kata-kata dengan sinonim umumnya.
Contoh
Pertama, impor paket yang diperlukan re untuk bekerja dengan ekspresi reguler.
import re
from nltk.corpus import wordnet
Selanjutnya, buat kelas yang menggunakan pemetaan penggantian kata -
class word_syn_replacer(object):
def __init__(self, word_map):
self.word_map = word_map
def replace(self, word):
return self.word_map.get(word, word)
Simpan program python ini (katakanlah replacesyn.py) dan jalankan dari command prompt python. Setelah menjalankannya, imporword_syn_replacerkelas ketika Anda ingin mengganti kata-kata dengan sinonim umum. Mari kita lihat caranya.
from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)
Keluaran
'birthday'
Contoh implementasi lengkap
import re
from nltk.corpus import wordnet
class word_syn_replacer(object):
def __init__(self, word_map):
self.word_map = word_map
def replace(self, word):
return self.word_map.get(word, word)
Sekarang setelah Anda menyimpan program di atas dan menjalankannya, Anda dapat mengimpor kelas dan menggunakannya sebagai berikut -
from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)
Keluaran
'birthday'
Kerugian dari metode di atas adalah kita harus melakukan hardcode sinonim dalam kamus Python. Kami memiliki dua alternatif yang lebih baik dalam bentuk file CSV dan YAML. Kami dapat menyimpan kosakata sinonim kami di salah satu file yang disebutkan di atas dan dapat membuatnyaword_mapkamus dari mereka. Mari kita pahami konsepnya dengan bantuan contoh.
Menggunakan file CSV
Untuk menggunakan file CSV untuk tujuan ini, file harus memiliki dua kolom, kolom pertama berisi kata dan kolom kedua berisi sinonim yang dimaksudkan untuk menggantikannya. Biarkan kami menyimpan file ini sebagaisyn.csv. Pada contoh di bawah ini, kami akan membuat kelas bernama CSVword_syn_replacer yang akan meluas word_syn_replacer di replacesyn.py file dan akan digunakan untuk membuat file word_map kamus dari syn.csv mengajukan.
Contoh
Pertama, impor paket yang diperlukan.
import csv
Selanjutnya, buat kelas yang menggunakan pemetaan penggantian kata -
class CSVword_syn_replacer(word_syn_replacer):
def __init__(self, fname):
word_map = {}
for line in csv.reader(open(fname)):
word, syn = line
word_map[word] = syn
super(Csvword_syn_replacer, self).__init__(word_map)
Setelah menjalankannya, impor CSVword_syn_replacerkelas ketika Anda ingin mengganti kata-kata dengan sinonim umum. Mari kita lihat bagaimana caranya?
from replacesyn import CSVword_syn_replacer
rep_syn = CSVword_syn_replacer (‘syn.csv’)
rep_syn.replace(‘bday’)
Keluaran
'birthday'
Contoh implementasi lengkap
import csv
class CSVword_syn_replacer(word_syn_replacer):
def __init__(self, fname):
word_map = {}
for line in csv.reader(open(fname)):
word, syn = line
word_map[word] = syn
super(Csvword_syn_replacer, self).__init__(word_map)
Sekarang setelah Anda menyimpan program di atas dan menjalankannya, Anda dapat mengimpor kelas dan menggunakannya sebagai berikut -
from replacesyn import CSVword_syn_replacer
rep_syn = CSVword_syn_replacer (‘syn.csv’)
rep_syn.replace(‘bday’)
Keluaran
'birthday'
Menggunakan file YAML
Karena kami telah menggunakan file CSV, kami juga dapat menggunakan file YAML untuk tujuan ini (kami harus menginstal PyYAML). Mari kita simpan file tersebut sebagaisyn.yaml. Pada contoh di bawah ini, kami akan membuat kelas bernama YAMLword_syn_replacer yang akan meluas word_syn_replacer di replacesyn.py file dan akan digunakan untuk membuat file word_map kamus dari syn.yaml mengajukan.
Contoh
Pertama, impor paket yang diperlukan.
import yaml
Selanjutnya, buat kelas yang menggunakan pemetaan penggantian kata -
class YAMLword_syn_replacer(word_syn_replacer):
def __init__(self, fname):
word_map = yaml.load(open(fname))
super(YamlWordReplacer, self).__init__(word_map)
Setelah menjalankannya, impor YAMLword_syn_replacerkelas ketika Anda ingin mengganti kata-kata dengan sinonim umum. Mari kita lihat bagaimana caranya?
from replacesyn import YAMLword_syn_replacer
rep_syn = YAMLword_syn_replacer (‘syn.yaml’)
rep_syn.replace(‘bday’)
Keluaran
'birthday'
Contoh implementasi lengkap
import yaml
class YAMLword_syn_replacer(word_syn_replacer):
def __init__(self, fname):
word_map = yaml.load(open(fname))
super(YamlWordReplacer, self).__init__(word_map)
Sekarang setelah Anda menyimpan program di atas dan menjalankannya, Anda dapat mengimpor kelas dan menggunakannya sebagai berikut -
from replacesyn import YAMLword_syn_replacer
rep_syn = YAMLword_syn_replacer (‘syn.yaml’)
rep_syn.replace(‘bday’)
Keluaran
'birthday'
Penggantian antonim
Seperti kita ketahui bahwa antonim adalah kata yang memiliki arti berlawanan dengan kata lain, dan kebalikan dari pengganti sinonim disebut dengan pengganti antonim. Pada bagian ini, kita akan berurusan dengan penggantian antonim, yaitu mengganti kata-kata dengan antonim yang tidak ambigu dengan menggunakan WordNet. Pada contoh di bawah ini, kami akan membuat kelas bernamaword_antonym_replacer yang memiliki dua metode, satu untuk mengganti kata dan lainnya untuk menghilangkan negasi.
Contoh
Pertama, impor paket yang diperlukan.
from nltk.corpus import wordnet
Selanjutnya, buat kelas bernama word_antonym_replacer -
class word_antonym_replacer(object):
def replace(self, word, pos=None):
antonyms = set()
for syn in wordnet.synsets(word, pos=pos):
for lemma in syn.lemmas():
for antonym in lemma.antonyms():
antonyms.add(antonym.name())
if len(antonyms) == 1:
return antonyms.pop()
else:
return None
def replace_negations(self, sent):
i, l = 0, len(sent)
words = []
while i < l:
word = sent[i]
if word == 'not' and i+1 < l:
ant = self.replace(sent[i+1])
if ant:
words.append(ant)
i += 2
continue
words.append(word)
i += 1
return words
Simpan program python ini (katakan replaceantonym.py) dan jalankan dari prompt perintah python. Setelah menjalankannya, imporword_antonym_replacerkelas saat Anda ingin mengganti kata dengan antonim yang tidak ambigu. Mari kita lihat caranya.
from replacerantonym import word_antonym_replacer
rep_antonym = word_antonym_replacer ()
rep_antonym.replace(‘uglify’)
Keluaran
['beautify'']
sentence = ["Let us", 'not', 'uglify', 'our', 'country']
rep_antonym.replace _negations(sentence)
Keluaran
["Let us", 'beautify', 'our', 'country']
Contoh implementasi lengkap
nltk.corpus import wordnet
class word_antonym_replacer(object):
def replace(self, word, pos=None):
antonyms = set()
for syn in wordnet.synsets(word, pos=pos):
for lemma in syn.lemmas():
for antonym in lemma.antonyms():
antonyms.add(antonym.name())
if len(antonyms) == 1:
return antonyms.pop()
else:
return None
def replace_negations(self, sent):
i, l = 0, len(sent)
words = []
while i < l:
word = sent[i]
if word == 'not' and i+1 < l:
ant = self.replace(sent[i+1])
if ant:
words.append(ant)
i += 2
continue
words.append(word)
i += 1
return words
Sekarang setelah Anda menyimpan program di atas dan menjalankannya, Anda dapat mengimpor kelas dan menggunakannya sebagai berikut -
from replacerantonym import word_antonym_replacer
rep_antonym = word_antonym_replacer ()
rep_antonym.replace(‘uglify’)
sentence = ["Let us", 'not', 'uglify', 'our', 'country']
rep_antonym.replace _negations(sentence)
Keluaran
["Let us", 'beautify', 'our', 'country']