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