2016-10-22 48 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'舊版本?在終端/ powershell上嘗試'pip install -U nltk'。 – 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甚至在小版本之間引入了向後不兼容的變化,我認爲這是不好的做法。