目次
問題の説明:
英語の文の同義語を取得したい。wordnet から同義語を検索し、対応する単語を置き換えることで、完全な同義語文を取得できます。
問題が解決しました:
ワードネットのインストール:
まず、wordnet をインストールする必要があります。インストール手順は次のとおりです。
最初に nltk パッケージをインストールします --> インストール後、python コマンドを入力して import nltk を実行します --> 次に wordnet をインストールし、コマンド nltk.download('wordnet') を実行します --> インストールは成功します。
同義語を取得するには 2 つの方法があります。
方法 1:
考え:
現在の文の各単語に対応する同義語リスト内のランダムな単語を wordnet から単語の同義語として取得します。これにより、この文に対応する同義文が得られる。
コード:
# 随机返回同义词中的一个,作为同义词。
from nltk.corpus import wordnet
import random
def get_synonyms(word):
synonyms = set()
for syn in wordnet.synsets(word): # 查询给定单词的WordNet同义词集合(synset)
for lemma in syn.lemmas():
# 获取同义词集合syn中的所有词条(lemma)。一个同义词集合可以包含多个词条,每个词条代表一个具体的同义词。
synonyms.add(lemma.name())
return list(synonyms)
def replace_words(sentence):
words = sentence.split()
print("单词是:",words)
new_sentences = []
for word in words:
synonyms = get_synonyms(word)
print("synonyms is :", synonyms)
if synonyms:
new_word = random.choice(synonyms) # 随机选择同义词
new_sentences.append(new_word)
else:
new_sentences.append(word)
return ' '.join(new_sentences)
sentence = "We researched and found the best price at MacConnection . "
new_sentence = replace_words(sentence)
print(new_sentence)
方法 2:
考え:
現在の文の各単語に対応する同義語リストを wordnet から取得し、現在の単語との類似度が最も高い単語をその単語の同義語として使用して、完全な同義語文を取得します。
コード:
def get_synonyms(sentence):
synonyms = []
words = sentence.split()
for word in words:
max_similarity = 0.0
best_synonyms = word
synsets = wordnet.synsets(word)
print("synsets", synsets)
for synset in synsets:
for lemma in synset.lemmas():
similarity = synset.path_similarity(lemma.synset())
if similarity is not None and similarity > max_similarity:
max_similarity = similarity
best_synonyms = lemma.name()
synonyms.append(best_synonyms)
return ' '.join(synonyms)
sentence = "we are family, and i like you !"
syn_sentence = get_synonyms(sentence)
print(syn_sentence)