2016-11-30 49 views
0

我有以下功能:类型错误:列表对象是不可调用的

def sample_handling(sample, lexicon, classification): 
    featureset = [] 

    with open(sample, 'r') as f: 
     contents = f.readlines() 
     for l in contents[:hm_lines]: 
      current_words = word_tokenize(l.lower()) 
      current_words = [lemmatizer.lemmatize(i) for i in current_words] 
      features = np.zeros(len(lexicon)) 
      for word in current_words(): 
       if word.lower() in lexicon: 
        index_value = lexicon.index(word.lower()) 
        features[index_value] += 1 
      features = list(features) 
      featureset.append([features, classification]) 

    return featureset 

当我运行的代码,它给了我下面的错误:

TypeError: 'list' object is not callable

是否有任何掩盖回事?我跟着很多线程处理这个错误,但无法解决我的问题。

这是我的全码:

import nltk 
from nltk.tokenize import word_tokenize 
from nltk.stem import WordNetLemmatizer 
import numpy as np 
import random 
import pickle 
from collections import Counter 

lemmatizer = WordNetLemmatizer() 
hm_lines = 10000000 

def create_lexicon(pos, neg): 
    lexicon = [] 
    for fi in [pos, neg]: 
     with open(fi, 'r') as f: 
      contents = f.readlines() 
      for l in contents[:hm_lines]: 
       all_words = word_tokenize(l.lower()) 
       lexicon += list(all_words) 
    lexicon = [lemmatizer.lemmatize(i) for i in lexicon] 
    w_counts = Counter(lexicon) 
    #w_counts = {'the': 52521, 'and': 25242} 

    l2 = [] 
    for w in w_counts: 
     if 1000 > w_counts[w] > 50: 
      l2.append(w) 

    print(l2) 
    return l2 

def sample_handling(sample, lexicon, classification): 
    featureset = [] 

    with open(sample, 'r') as f: 
     contents = f.readlines() 
     for l in contents[:hm_lines]: 
      current_words = word_tokenize(l.lower()) 
      current_words = [lemmatizer.lemmatize(i) for i in current_words] 
      features = np.zeros(len(lexicon)) 
      for word in current_words(): 
       if word.lower() in lexicon: 
        index_value = lexicon.index(word.lower()) 
        features[index_value] += 1 
      features = list(features) 
      featureset.append([features, classification]) 

    return featureset 

def create_feature_sets_and_lables(pos, neg, test_size = 0.1): 
    lexicon = create_lexicon(pos, neg) 
    features = [] 
    features += sample_handling('pos.txt', lexicon,[1,0]) 
    features += sample_handling('neg.txt', lexicon,[0,1]) 
    random.shuffle(features) 

    features = np.array(features) 

    testing_size = int(test_size * len(features)) 

    train_x = list(features[:,0][:-testing_size]) 
    train_y = list(features[:,1][:-testing_size]) 

    test_x = list(features[:,0][-testing_size:]) 
    test_y = list(features[:,1][-testing_size:]) 

    return train_x, train_y, test_x, test_y 

if __name__ == '__main__': 
    train_x, train_y, test_x, test_y = create_feature_sets_and_lables('pos.txt', 'neg.txt') 
    with open('sentiment_set.pickle', 'wb') as f: 
     pickle.dump([train_x, train_y, test_x, test_y], f) 

回答

0

如果您打印完整的堆栈跟踪,它会更有帮助。由于这是一个相对简单的错误,因此在这种情况下,问题很容易识别。这是这条线,

for word in current_words(): 

你不必通话列表循环,同时它。只是这样做,

for word in current_words: 
+0

谢谢!这是一个愚蠢的错误... –

0

好了,开始调试,我会用

python -m pdb whatever_your_file_is.py 

这将启动一个PDB调试控制台运行程序。一旦出现,请按'c'运行该程序。过了一段时间,假设程序崩溃,您将停在发生错误的确切位置。

从那里,你可以参考thisthis(只是谷歌蟒蛇PDB),以弄清楚到底发生了什么事情在你的代码。

祝你好运!

+0

它崩溃在'features = list(features)'部分。 –

+0

如果您只是在控制台中输入'features',会发生什么? –

+1

我解决了它。谢谢你的帮助! –

相关问题