def traintag(corpusname, corpus):
        def savetagger(tagfilename,tagger):
                outfile = open(tagfilename, 'wb')
                dump(tagger,outfile,-1); outfile.close()
                return
        # Training UnigramTagger.
        uni_tag = ut(corpus)
        savetagger(corpusname+'_unigram.tagger',uni_tag)
        # Training BigramTagger.
        bi_tag = bt(corpus)
        savetagger(corpusname+'_bigram.tagger',bi_tag)
        print ("Tagger trained with",corpusname,"using" +\
                                "UnigramTagger and BigramTagger.")
        return
def traintag(corpusname, corpus):
    # Function to save tagger.
    def savetagger(tagfilename, tagger):
        outfile = open(tagfilename, 'wb')
        dump(tagger, outfile, -1)
        outfile.close()
        return

    # Training UnigramTagger.
    uni_tag = ut(corpus)
    savetagger(corpusname + '_unigram.tagger', uni_tag)
    # Training BigramTagger.
    bi_tag = bt(corpus)
    savetagger(corpusname + '_bigram.tagger', bi_tag)
    print "Tagger trained with",corpusname,"using" +\
       "UnigramTagger and BigramTagger."
    return
Example #3
0
with open("sentence-pt") as content_file:
    content = content_file.read()
    content = normalize(content)

    tokens = word_tokenize(content)

    sents = floresta.tagged_sents()

    uni_tag = ut(sents)
    print uni_tag.tag(tokens)

    # Split corpus into training and testing set.
    train = int(len(sents) * 90 / 100)  # 90%

    # Train a bigram tagger with only training data.
    bi_tag = bt(sents[:train])

    # Evaluates on testing data remaining 10%
    bi_tag.evaluate(sents[train + 1 :])

    # Using the tagger.
    print bi_tag.tag(tokens)

#    tokens = word_tokenize(content)
#    print tokens
#
#    tagged = pos_tag(tokens)
#
#    entities = chunk.ne_chunk(tagged)
#    print entities
Example #4
0
from nltk import BigramTagger as bt  # El tagger (de a dos palabras)

# Leemos el corpus a una lista
# Cada entrada de la lista es una frase
cess_sents = cess.tagged_sents()

# Dividimos el corpus en dos partes: entrenamiento y testeo
train = int(len(cess_sents) * 90 / 100)  # 90% entrenamiento

import pickle
crear_taggers = True
if crear_taggers:
    # Entrenamos el tagger de unigramas (no tiene caso el testeo con unigramas)
    uni_tag = ut(cess_sents)
    # Entramos el tagger de bigramas con sólamente la data de entrenamiento
    bi_tag = bt(cess_sents[:train])

    # Guardamos los taggers en archivos para ahorrar tiempo la siguiente vez
    with open('test/cess_unigram.tagger.pkl', 'wb') as output:
        pickle.dump(uni_tag, output, pickle.HIGHEST_PROTOCOL)
    with open('test/cess_bigram.tagger.pkl', 'wb') as output:
        pickle.dump(bi_tag, output, pickle.HIGHEST_PROTOCOL)

    # Evaluamos en los datos de testeo, el 10% restante
    evaluacion = bi_tag.evaluate(cess_sents[train + 1:])
    print u"\nEvaluación:"
    print evaluacion
else:
    # Si ya están generados los taggers podemos simplemente abrirlos
    with open('test/cess_unigram.tagger.pkl', 'rb') as input:
        uni_tag = pickle.load(input)
Example #5
0
uni_tagger.evaluate(cess_sents[fraction+1:])

# Al final se obtiene la métrica de la asignación de etiquetas

"""Aplicamos el algoritmo previamente entrenado y evaluado"""

uni_tagger.tag("Yo soy una persona muy amable".split(" "))

"""## @title Entrenamiento del tagger por bigramas"""

# Obtenemos un fracción del Dataset
fraction = int(len(cess_sents)*90/100)
# Definimos una instancia del etiquetador por bigramas
# Le pasamos una francción del Dataset para realizar el entrenamiento
# Lo entrenamos con el 90% del conjunto de datos
bi_tagger = bt(cess_sents[:fraction])
# Despues de entrenar hacemos la evaluación con el resto del Dataset
bi_tagger.evaluate(cess_sents[fraction+1:])

# Al final se obtiene la métrica de la asignación de etiquetas

bi_tagger.tag("Yo soy una persona muy amable".split(" "))

"""<font color="green"> Al analizar las pruebas previamente descritas podemos decir que el etiquetador por `unigramas` es mejor que el etiquedador por `bigramas` y no se recomienda usar el segundo </font>

# Etiquetado mejorado con Stanza (StanfordNLP)

**¿Que es Stanza?**

* El grupo de investigacion en NLP de Stanford tenía una suite de librerias que ejecutaban varias tareas de NLP, esta suite se unifico en un solo servicio que llamaron **CoreNLP** con base en codigo java: https://stanfordnlp.github.io/CoreNLP/index.html
Example #6
0
 def __init__(self):
     cess_sents = cess.tagged_sents()
     self.uni_tag = ut(cess_sents)
     train = int(len(cess_sents)*90/100)  # 90%
     self.bi_tag = bt(cess_sents[:train])
     self.bi_tag.evaluate(cess_sents[train+1:])
Example #7
0

reload(sys)
sys.setdefaultencoding('utf8')

cess_sents = cess.tagged_sents()

uni_tag = ut(cess_sents)

f = open('texto.txt')
tagged_words = nltk.word_tokenize(f.read())
uni_tag.tag(tagged_words)

train = int(len(cess_sents) * 90 / 100)

bi_tag = bt(cess_sents[:train], backoff=uni_tag)

bi_tag.evaluate(cess_sents[train + 1:])

taggedText = bi_tag.tag(tagged_words)

labeled_names = ([word, tag] for word, tag in taggedText)

featuresets = [(word_features(n), tag) for (n, tag) in labeled_names]

for item in featuresets:
    print(item)
train_set, test_set = featuresets[250:], featuresets[:250]
clasiffier = nltk.NaiveBayesClassifier.train(train_set)

print(clasiffier.show_most_informative_features(10))