Synonym & Antonym Ersatz

Ersetzen von Wörtern durch gebräuchliche Synonyme

Während der Arbeit mit NLP, insbesondere bei der Frequenzanalyse und Textindizierung, ist es immer vorteilhaft, das Vokabular zu komprimieren, ohne an Bedeutung zu verlieren, da dadurch viel Speicherplatz gespart wird. Um dies zu erreichen, müssen wir die Zuordnung eines Wortes zu seinen Synonymen definieren. Im folgenden Beispiel erstellen wir eine Klasse mit dem Namenword_syn_replacer die verwendet werden können, um die Wörter durch ihre gemeinsamen Synonyme zu ersetzen.

Beispiel

Importieren Sie zunächst das erforderliche Paket re mit regulären Ausdrücken arbeiten.

import re
from nltk.corpus import wordnet

Erstellen Sie als Nächstes die Klasse, für die eine Wortersetzungszuordnung erforderlich ist.

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)

Speichern Sie dieses Python-Programm (z. B. replacesyn.py) und führen Sie es an der Python-Eingabeaufforderung aus. Nach dem Ausführen importierenword_syn_replacerKlasse, wenn Sie Wörter durch gebräuchliche Synonyme ersetzen möchten. Mal sehen wie.

from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)

Ausgabe

'birthday'

Vollständiges Implementierungsbeispiel

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)

Nachdem Sie das obige Programm gespeichert und ausgeführt haben, können Sie die Klasse importieren und wie folgt verwenden:

from replacesyn import word_syn_replacer
rep_syn = word_syn_replacer ({‘bday’: ‘birthday’)
rep_syn.replace(‘bday’)

Ausgabe

'birthday'

Der Nachteil der obigen Methode ist, dass wir die Synonyme in einem Python-Wörterbuch fest codieren müssen. Wir haben zwei bessere Alternativen in Form von CSV- und YAML-Dateien. Wir können unser Synonymvokabular in jeder der oben genannten Dateien speichern und konstruierenword_mapWörterbuch von ihnen. Lassen Sie uns das Konzept anhand von Beispielen verstehen.

CSV-Datei verwenden

Um die CSV-Datei für diesen Zweck verwenden zu können, sollte die Datei zwei Spalten haben, wobei die erste Spalte aus einem Wort und die zweite Spalte aus den Synonymen besteht, die sie ersetzen sollen. Speichern wir diese Datei alssyn.csv. Im folgenden Beispiel erstellen wir eine Klasse mit dem Namen CSVword_syn_replacer das wird sich ausdehnen word_syn_replacer im replacesyn.py Datei und wird verwendet, um die zu erstellen word_map Wörterbuch von syn.csv Datei.

Beispiel

Importieren Sie zunächst die erforderlichen Pakete.

import csv

Erstellen Sie als Nächstes die Klasse, für die eine Wortersetzungszuordnung erforderlich ist.

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)

Nach dem Ausführen importieren CSVword_syn_replacerKlasse, wenn Sie Wörter durch gebräuchliche Synonyme ersetzen möchten. Mal sehen wie?

from replacesyn import CSVword_syn_replacer
rep_syn = CSVword_syn_replacer (‘syn.csv’)
rep_syn.replace(‘bday’)

Ausgabe

'birthday'

Vollständiges Implementierungsbeispiel

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)

Nachdem Sie das obige Programm gespeichert und ausgeführt haben, können Sie die Klasse importieren und wie folgt verwenden:

from replacesyn import CSVword_syn_replacer
rep_syn = CSVword_syn_replacer (‘syn.csv’)
rep_syn.replace(‘bday’)

Ausgabe

'birthday'

Verwenden der YAML-Datei

Da wir eine CSV-Datei verwendet haben, können wir zu diesem Zweck auch eine YAML-Datei verwenden (PyYAML muss installiert sein). Speichern wir die Datei untersyn.yaml. Im folgenden Beispiel erstellen wir eine Klasse mit dem Namen YAMLword_syn_replacer das wird sich ausdehnen word_syn_replacer im replacesyn.py Datei und wird verwendet, um die zu erstellen word_map Wörterbuch von syn.yaml Datei.

Beispiel

Importieren Sie zunächst die erforderlichen Pakete.

import yaml

Erstellen Sie als Nächstes die Klasse, für die eine Wortersetzungszuordnung erforderlich ist.

class YAMLword_syn_replacer(word_syn_replacer):
   def __init__(self, fname):
   word_map = yaml.load(open(fname))
   super(YamlWordReplacer, self).__init__(word_map)

Nach dem Ausführen importieren YAMLword_syn_replacerKlasse, wenn Sie Wörter durch gebräuchliche Synonyme ersetzen möchten. Mal sehen wie?

from replacesyn import YAMLword_syn_replacer
rep_syn = YAMLword_syn_replacer (‘syn.yaml’)
rep_syn.replace(‘bday’)

Ausgabe

'birthday'

Vollständiges Implementierungsbeispiel

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)

Nachdem Sie das obige Programm gespeichert und ausgeführt haben, können Sie die Klasse importieren und wie folgt verwenden:

from replacesyn import YAMLword_syn_replacer
rep_syn = YAMLword_syn_replacer (‘syn.yaml’)
rep_syn.replace(‘bday’)

Ausgabe

'birthday'

Antonym Ersatz

Wie wir wissen, ist ein Antonyme ein Wort, das die entgegengesetzte Bedeutung eines anderen Wortes hat, und das Gegenteil von Synonymersatz wird Antonymenersatz genannt. In diesem Abschnitt beschäftigen wir uns mit dem Ersetzen von Antonyme, dh dem Ersetzen von Wörtern durch eindeutige Antonyme mithilfe von WordNet. Im folgenden Beispiel erstellen wir eine Klasse mit dem Namenword_antonym_replacer die zwei Methoden haben, eine zum Ersetzen des Wortes und eine zum Entfernen der Negationen.

Beispiel

Importieren Sie zunächst die erforderlichen Pakete.

from nltk.corpus import wordnet

Erstellen Sie als Nächstes die benannte Klasse 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

Speichern Sie dieses Python-Programm (z. B. replaceeantonym.py) und führen Sie es an der Python-Eingabeaufforderung aus. Nach dem Ausführen importierenword_antonym_replacerKlasse, wenn Sie Wörter durch ihre eindeutigen Antonyme ersetzen möchten. Mal sehen wie.

from replacerantonym import word_antonym_replacer
rep_antonym = word_antonym_replacer ()
rep_antonym.replace(‘uglify’)

Ausgabe

['beautify'']
sentence = ["Let us", 'not', 'uglify', 'our', 'country']
rep_antonym.replace _negations(sentence)

Ausgabe

["Let us", 'beautify', 'our', 'country']

Vollständiges Implementierungsbeispiel

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

Nachdem Sie das obige Programm gespeichert und ausgeführt haben, können Sie die Klasse importieren und wie folgt verwenden:

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)

Ausgabe

["Let us", 'beautify', 'our', 'country']