2016-10-22 2 views
0

Когда я запускаю этот код, он выдает ошибку, которая, по моему мнению, обусловлена ​​тем, что метод batch_classify не присутствует в NLTK 3.0. Мне интересно, как решить этот тип проблемы, когда что-то из более старой версии исчезает в более новой версии.Метод классификатора классов классификатора NLTK 2.0

def accuracy(classifier, gold): 
    results = classifier.batch_classify([fs for (fs,l) in gold]) 
    correct = [l==r for ((fs,l), r) in zip(gold, results)] 
    if correct: 
     return float(sum(correct))/len(correct) 
    else: 
     return 0 

def apr (classifier, gold): 
    results = classifier.batch_classify([fs for (fs,l) in gold]) 
    #gold_class_dict = defaultdict(list) 
    #classifier_class_dict = {} 
    sys_correct_dict = Counter() 
    num_guessed = Counter() 
    gold_num = Counter() 
    num_right = 0 
    total = 0 
+0

Почему вы используете старую версию 'nltk'? Попробуйте 'pip install -U nltk' на терминале/powershell. – alvas

+0

@alvas Я думаю, речь идет о переносе кода с NLTK 2.0 на NLTK 3.0. – lenz

+1

Надеемся, это поможет: https://github.com/nltk/nltk/wiki/Porting-your-code-to-NLTK-3.0 – alvas

ответ

2

Метод был переименован в classify_many() (я не мог найти документацию NLTK 2,0, чтобы проверить это, но я уверен, что это то, что случилось).

Вы должны заменить все вхождения batch_classify(...)classify_many(...) в свой код. При переходе от одной основной версии библиотеки к другой вы должны ожидать такого рода обратно-несовместимые изменения; в идеале они должны быть задокументированы в журнале изменений. Тем не менее, я должен признать, что в прошлом NLTK вводил обратно-несовместимые изменения даже между второстепенными версиями, что, по моему мнению, является плохой практикой.

Смежные вопросы