Классификатор NLTK - объект «dict», не подлежащий вызову в наивной байесовской классификации NLTK - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь написать небольшой классификатор для классификации мужских и женских имен и постоянно получаю сообщение об ошибке «объект dict не вызывается». Я заменил dict () на my_dict (), чтобы увидеть, произошло ли это из-за зарезервированных слов, но затем ошибка становится «my_dict () не определен». Пожалуйста, помогите.

Мой код:

import nltk, random


class GenderApp(object):
    def __init__(self):
        names_sample = nltk.corpus.names
        self.names = [(name.lower(), 'male') for name in names_sample.words('male.txt')] + [(name.lower(), 'female') for name in names_sample.words('female.txt')]
        random.shuffle(self.names)
        self.feature_sets = [(GenderApp.gender_features_part2(name), gender) for name, gender in self.names]
        self.train_set = self.feature_sets[:4000]
        self.test_set = self.feature_sets[4000:]
        self.classifier = nltk.NaiveBayesClassifier.train(self.train_set)

    @staticmethod
    def gender_features_part2(word):
        name = word.lower()  # let's normalise our input
        features = dict()
        features['first_letter'] = name[0]
        features['last_letter'] = name[1]
        for letter in 'abcdefghijklmnopqrstuvwxyz':
            features['count' + letter] = name.count(letter)
            features['has' + letter] = letter in name
        return features

    def check_gender(self, name):
        name = name.lower()
        print('Gender for ' + name + ' : ' + self.classifier.classify(GenderApp.gender_features_part2(name)))

    def check_accuracy_of_the_classifier(self):
        print('Accuracy of classifier is : ', nltk.classify.accuracy(self.classifier, self.test_set) * 100)

    def see_learned_information_of_classifier(self, n=10):
        self.classifier.show_most_informative_features(n)

if __name__ == '__main__':
    app = GenderApp()
    app.check_gender('Neo')
    app.see_learned_information_of_classifier(20)
    app.check_accuracy_of_the_classifier()

Ошибка:

<ipython-input-143-050ff81df34d> in <listcomp>(.0)
      8 for name in names_sample.words('female.txt')]
      9 random.shuffle(self.names)
---> 10         self.feature_sets = [(GenderApp.gender_features_part2(name), gender) for name, gender in self.names]
     11         self.train_set = self.feature_sets[:4000]
     12         self.test_set = self.feature_sets[4000:]

<ipython-input-143-050ff81df34d> in gender_features_part2(word)
     16     def gender_features_part2(word):
     17         name = word.lower()  # let's normalise our input
---> 18         features = dict()
     19         features['first_letter'] = name[0]
     20         features['last_letter'] = name[1]

TypeError: 'dict' object is not callable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...