Thay thế từ đồng nghĩa & trái nghĩa
Thay thế các từ bằng các từ đồng nghĩa phổ biến
Trong khi làm việc với NLP, đặc biệt là trong trường hợp phân tích tần số và lập chỉ mục văn bản, việc nén từ vựng mà không bị mất nghĩa luôn có lợi vì nó tiết kiệm rất nhiều bộ nhớ. Để đạt được điều này, chúng ta phải xác định ánh xạ của một từ với các từ đồng nghĩa của nó. Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp có tênword_syn_replacer có thể được sử dụng để thay thế các từ bằng các từ đồng nghĩa phổ biến của chúng.
Thí dụ
Đầu tiên, nhập gói cần thiết re để làm việc với các biểu thức chính quy.
import re
from nltk.corpus import wordnet
Tiếp theo, tạo lớp có ánh xạ thay thế từ -
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)
Lưu chương trình python này (nói thay thếyn.py) và chạy nó từ dấu nhắc lệnh python. Sau khi chạy nó, hãy nhậpword_syn_replacerlớp khi bạn muốn thay thế các từ bằng các từ đồng nghĩa thông thường. Hãy để chúng tôi xem làm thế nào.
from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)
Đầu ra
'birthday'
Hoàn thành ví dụ triển khai
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)
Bây giờ khi bạn đã lưu chương trình trên và chạy nó, bạn có thể nhập lớp và sử dụng nó như sau:
from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)
Đầu ra
'birthday'
Nhược điểm của phương pháp trên là chúng ta phải mã hóa các từ đồng nghĩa trong từ điển Python. Chúng tôi có hai lựa chọn thay thế tốt hơn ở dạng tệp CSV và YAML. Chúng tôi có thể lưu từ vựng đồng nghĩa của mình trong bất kỳ tệp nào được đề cập ở trên và có thể xây dựngword_maptừ điển của họ. Hãy để chúng tôi hiểu khái niệm này với sự trợ giúp của các ví dụ.
Sử dụng tệp CSV
Để sử dụng tệp CSV cho mục đích này, tệp phải có hai cột, cột đầu tiên bao gồm từ và cột thứ hai bao gồm các từ đồng nghĩa để thay thế nó. Hãy để chúng tôi lưu tệp này dưới dạngsyn.csv. Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp có tên CSVword_syn_replacer cái nào sẽ kéo dài word_syn_replacer trong replacesyn.py và sẽ được sử dụng để xây dựng word_map từ điển từ syn.csv tập tin.
Thí dụ
Đầu tiên, nhập các gói cần thiết.
import csv
Tiếp theo, tạo lớp có ánh xạ thay thế từ -
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)
Sau khi chạy nó, hãy nhập CSVword_syn_replacerlớp khi bạn muốn thay thế các từ bằng các từ đồng nghĩa thông thường. Hãy để chúng tôi xem như thế nào?
from replacesyn import CSVword_syn_replacer
rep_syn = CSVword_syn_replacer (‘syn.csv’)
rep_syn.replace(‘bday’)
Đầu ra
'birthday'
Hoàn thành ví dụ triển khai
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)
Bây giờ khi bạn đã lưu chương trình trên và chạy nó, bạn có thể nhập lớp và sử dụng nó như sau:
from replacesyn import CSVword_syn_replacer
rep_syn = CSVword_syn_replacer (‘syn.csv’)
rep_syn.replace(‘bday’)
Đầu ra
'birthday'
Sử dụng tệp YAML
Vì chúng tôi đã sử dụng tệp CSV, chúng tôi cũng có thể sử dụng tệp YAML cho mục đích này (chúng tôi phải cài đặt PyYAML). Hãy để chúng tôi lưu tệp dưới dạngsyn.yaml. Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp có tên YAMLword_syn_replacer cái nào sẽ kéo dài word_syn_replacer trong replacesyn.py và sẽ được sử dụng để xây dựng word_map từ điển từ syn.yaml tập tin.
Thí dụ
Đầu tiên, nhập các gói cần thiết.
import yaml
Tiếp theo, tạo lớp có ánh xạ thay thế từ -
class YAMLword_syn_replacer(word_syn_replacer):
def __init__(self, fname):
word_map = yaml.load(open(fname))
super(YamlWordReplacer, self).__init__(word_map)
Sau khi chạy nó, hãy nhập YAMLword_syn_replacerlớp khi bạn muốn thay thế các từ bằng các từ đồng nghĩa thông thường. Hãy để chúng tôi xem như thế nào?
from replacesyn import YAMLword_syn_replacer
rep_syn = YAMLword_syn_replacer (‘syn.yaml’)
rep_syn.replace(‘bday’)
Đầu ra
'birthday'
Hoàn thành ví dụ triển khai
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)
Bây giờ khi bạn đã lưu chương trình trên và chạy nó, bạn có thể nhập lớp và sử dụng nó như sau:
from replacesyn import YAMLword_syn_replacer
rep_syn = YAMLword_syn_replacer (‘syn.yaml’)
rep_syn.replace(‘bday’)
Đầu ra
'birthday'
Thay thế từ trái nghĩa
Như chúng ta biết rằng một từ trái nghĩa là một từ có nghĩa trái ngược với một từ khác, và sự thay thế trái nghĩa của từ đồng nghĩa được gọi là thay thế trái nghĩa. Trong phần này, chúng ta sẽ giải quyết vấn đề thay thế từ trái nghĩa, tức là thay thế các từ bằng các từ trái nghĩa rõ ràng bằng cách sử dụng Mạng từ. Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp có tênword_antonym_replacer có hai phương pháp, một phương pháp để thay thế từ và phương pháp khác để loại bỏ các phủ định.
Thí dụ
Đầu tiên, nhập các gói cần thiết.
from nltk.corpus import wordnet
Tiếp theo, tạo lớp có tên 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
Lưu chương trình python này (nói thay thếantonym.py) và chạy nó từ dấu nhắc lệnh python. Sau khi chạy nó, hãy nhậpword_antonym_replacerlớp khi bạn muốn thay thế các từ bằng các từ trái nghĩa rõ ràng của chúng. Hãy để chúng tôi xem làm thế nào.
from replacerantonym import word_antonym_replacer
rep_antonym = word_antonym_replacer ()
rep_antonym.replace(‘uglify’)
Đầu ra
['beautify'']
sentence = ["Let us", 'not', 'uglify', 'our', 'country']
rep_antonym.replace _negations(sentence)
Đầu ra
["Let us", 'beautify', 'our', 'country']
Hoàn thành ví dụ triển khai
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
Bây giờ khi bạn đã lưu chương trình trên và chạy nó, bạn có thể nhập lớp và sử dụng nó như sau:
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)
Đầu ra
["Let us", 'beautify', 'our', 'country']