- 自然語言工具包教程
- 自然語言工具包 - 首頁
- 自然語言工具包 - 簡介
- 自然語言工具包 - 入門
- 自然語言工具包 - 文字標記化
- 訓練標記器和過濾停用詞
- 在WordNet中查詢單詞
- 詞幹提取和詞形還原
- 自然語言工具包 - 單詞替換
- 同義詞和反義詞替換
- 語料庫讀取器和自定義語料庫
- 詞性標註基礎
- 自然語言工具包 - 單詞標註器
- 自然語言工具包 - 組合標註器
- 自然語言工具包 - 更多NLTK標註器
- 自然語言工具包 - 解析
- 分塊和資訊提取
- 自然語言工具包 - 轉換分塊
- 自然語言工具包 - 轉換樹
- 自然語言工具包 - 文字分類
- 自然語言工具包資源
- 自然語言工具包 - 快速指南
- 自然語言工具包 - 有用資源
- 自然語言工具包 - 討論
同義詞和反義詞替換
用常見的同義詞替換單詞
在使用自然語言處理時,尤其是在頻率分析和文字索引的情況下,壓縮詞彙量而不丟失含義總是很有益的,因為它節省了大量的記憶體。為了實現這一點,我們必須定義一個單詞到其同義詞的對映。在下面的示例中,我們將建立一個名為word_syn_replacer的類,它可以用於用它們的常用同義詞替換單詞。
示例
首先,匯入必要的包re來處理正則表示式。
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)
儲存此Python程式(例如replacesyn.py)並從Python命令提示符執行它。執行後,當您想用常見同義詞替換單詞時,匯入word_syn_replacer類。讓我們看看如何操作。
from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)
輸出
'birthday'
完整的實現示例
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)
現在,一旦您儲存了上述程式並執行它,您就可以匯入該類並按如下方式使用它 -
from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)
輸出
'birthday'
上述方法的缺點是我們必須在Python字典中硬編碼同義詞。我們有兩種更好的替代方案,即CSV和YAML檔案。我們可以將我們的同義詞詞彙表儲存在上述任何一個檔案中,並可以從中構建word_map字典。讓我們藉助示例來理解這個概念。
使用CSV檔案
為了為此目的使用CSV檔案,該檔案應有兩列,第一列包含單詞,第二列包含用於替換它的同義詞。讓我們將此檔案儲存為syn.csv。在下面的示例中,我們將建立一個名為CSVword_syn_replacer的類,它將擴充套件replacesyn.py檔案中的word_syn_replacer,並將用於從syn.csv檔案中構建word_map字典。
示例
首先,匯入必要的包。
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)
執行後,當您想用常見同義詞替換單詞時,匯入CSVword_syn_replacer類。讓我們看看如何操作?
from replacesyn import CSVword_syn_replacer rep_syn = CSVword_syn_replacer (‘syn.csv’) rep_syn.replace(‘bday’)
輸出
'birthday'
完整的實現示例
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)
現在,一旦您儲存了上述程式並執行它,您就可以匯入該類並按如下方式使用它 -
from replacesyn import CSVword_syn_replacer rep_syn = CSVword_syn_replacer (‘syn.csv’) rep_syn.replace(‘bday’)
輸出
'birthday'
使用YAML檔案
就像我們使用CSV檔案一樣,我們也可以使用YAML檔案為此目的(我們必須安裝PyYAML)。讓我們將檔案儲存為syn.yaml。在下面的示例中,我們將建立一個名為YAMLword_syn_replacer的類,它將擴充套件replacesyn.py檔案中的word_syn_replacer,並將用於從syn.yaml檔案中構建word_map字典。
示例
首先,匯入必要的包。
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)
執行後,當您想用常見同義詞替換單詞時,匯入YAMLword_syn_replacer類。讓我們看看如何操作?
from replacesyn import YAMLword_syn_replacer rep_syn = YAMLword_syn_replacer (‘syn.yaml’) rep_syn.replace(‘bday’)
輸出
'birthday'
完整的實現示例
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)
現在,一旦您儲存了上述程式並執行它,您就可以匯入該類並按如下方式使用它 -
from replacesyn import YAMLword_syn_replacer rep_syn = YAMLword_syn_replacer (‘syn.yaml’) rep_syn.replace(‘bday’)
輸出
'birthday'
反義詞替換
眾所周知,反義詞是指與另一個單詞意思相反的單詞,同義詞替換的反面稱為反義詞替換。在本節中,我們將處理反義詞替換,即使用WordNet用明確的反義詞替換單詞。在下面的示例中,我們將建立一個名為word_antonym_replacer的類,它有兩個方法,一個用於替換單詞,另一個用於刪除否定。
示例
首先,匯入必要的包。
from nltk.corpus import wordnet
接下來,建立名為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
儲存此Python程式(例如replaceantonym.py)並從Python命令提示符執行它。執行後,當您想用明確的反義詞替換單詞時,匯入word_antonym_replacer類。讓我們看看如何操作。
from replacerantonym import word_antonym_replacer rep_antonym = word_antonym_replacer () rep_antonym.replace(‘uglify’)
輸出
['beautify''] sentence = ["Let us", 'not', 'uglify', 'our', 'country'] rep_antonym.replace _negations(sentence)
輸出
["Let us", 'beautify', 'our', 'country']
完整的實現示例
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
現在,一旦您儲存了上述程式並執行它,您就可以匯入該類並按如下方式使用它 -
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)
輸出
["Let us", 'beautify', 'our', 'country']