Estoy aplicando NB y NLTK para clasificar frases según algunos sentimientos, como tristeza, miedo, alegría, etc.

classificador = nltk.NaiveBayesClassifier.train(base_completa_treinamento)

Y aplicando esta función a una frase:

def avalia(teste):
    #teste = 'Pqp, que trânsito chato da porra!'
    testeStemming = []
    stemmer = nltk.stem.RSLPStemmer()
    for (palavras_treinamento) in teste.split():
        comStem = [p for p in palavras_treinamento.split()]
        testeStemming.append(str(stemmer.stem(comStem[0])))

    novo = extrator_palavras(testeStemming)
    distribuicao = classificador.prob_classify(novo)
    for classe in distribuicao.samples():
        print('%s: %f' % (classe, (distribuicao.prob(classe))))

Así:

avalia('he died')

Y obtén esto como resultado:

alegria: 0.117609
nojo: 0.050533
medo: 0.207932
raiva: 0.226550
surpresa: 0.045293
tristeza: 0.352083

¿Cómo cambio la función avalia () para mostrar solo el valor más alto ('tristeza: 0.35')? Traté de demandar a la función máxima pero no funcionó.

Gracias

0
StatsPy 12 may. 2021 a las 01:32

1 respuesta

La mejor respuesta

En lugar de esta parte:

for classe in distribuicao.samples():
    print('%s: %f' % (classe, (distribuicao.prob(classe))))

Inténtalo de esta manera

classe_array = [(classe, (distribuicao.prob(classe))) for classe in distribuicao.samples()]
inverse = [(value, key) for key, value in classe_array]
max_key = max(inverse)[1]
for each in classe_array:
   if each[0] == max_key:
      print(each)
2
top talent 11 may. 2021 a las 22:48