PNL | WordNet para etiquetar

WordNet es la base de datos léxica, es decir, un diccionario para el idioma inglés, diseñado específicamente para el procesamiento del lenguaje natural.

Código #1: Crear clase para buscar palabras en WordNet.

from nltk.tag import SequentialBackoffTagger
from nltk.corpus import wordnet
from nltk.probability import FreqDist
  
class WordNetTagger(SequentialBackoffTagger):
      
    '''
    >>> wt = WordNetTagger()
    >>> wt.tag(['food', 'is', 'great'])
    [('food', 'NN'), ('is', 'VB'), ('great', 'JJ')]
    '''
      
    def __init__(self, *args, **kwargs):
          
        SequentialBackoffTagger.__init__(self, *args, **kwargs)
        self.wordnet_tag_map = {
        'n': 'NN',
        's': 'JJ',
        'a': 'JJ',
        'r': 'RB',
        'v': 'VB'
        }
      
    def choose_tag(self, tokens, index, history):
          
    word = tokens[index]
    fd = FreqDist()
      
    for synset in wordnet.synsets(word):
        fd[synset.pos()] += 1
          
          
    return self.wordnet_tag_map.get(fd.max())

Esta clase WordNetTagger contará el no. de cada etiqueta POS que se encuentra en Synsets para una palabra y luego, la etiqueta más común es la etiqueta del banco de árboles usando el mapeo interno.

Código #2: Usar un WordNetTagger() simple

from taggers import WordNetTagger
from nltk.corpus import treebank
  
# Initializing
default_tag = DefaultTagger('NN')
  
# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
  
wn_tagging = WordNetTagger()
a = wn_tagger.evaluate(test_data)
  
print ("Accuracy of WordNetTagger : ", a)

Producción :

Accuracy of WordNetTagger : 0.17914876598160262

Usando el Código 3, podemos mejorar la precisión.
Código n.º 3: clase WordNetTagger al final de una string de retroceso de NgramTagger

from taggers import WordNetTagger
from nltk.corpus import treebank
from tag_util import backoff_tagger
from nltk.tag import UnigramTagger, BigramTagger, TrigramTagger
  
# Initializing
default_tag = DefaultTagger('NN')
  
# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
  
tagger = backoff_tagger(train_data,
                        [UnigramTagger, BigramTagger,
                         TrigramTagger], backoff = wn_tagger)
      
a = tagger.evaluate(test_data)
  
print ("Accuracy : ", a)

Producción :

Accuracy : 0.8848262464925534

Publicación traducida automáticamente

Artículo escrito por Mohit Gupta_OMG 🙂 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *