2016-07-06 255 views
0

我正在使用nltk包中的Vader。 我已经导入我的数据集以下维德教程:AttributeError:'list'对象没有'text'属性

list = [] 
    for line in open("C:\Users\Luca\Desktop\Uni\Tesi\PythonTest\paolo.txt","r").readlines(): 
     for value in line.split(","): 
      list.append(value) 

然后我创建了函数删除标点:

 def _words_only(self): 
    text_mod = REGEX_REMOVE_PUNCTUATION.sub('', self.text) 
    words_only = text_mod.split() 
    words_only = [word for word in words_only if len(word) > 1] 
    return words_only 

但是当我尝试使用“字只有”我的功能得到这个错误

AttributeError       Traceback (most recent call last) 
    <ipython-input-14-cbc12179c890> in <module>() 
    ----> 1 _words_only(list) 

    <ipython-input-13-68a545bbbaa4> in _words_only(self) 
    1 def _words_only(self): 
    ----> 2  text_mod = REGEX_REMOVE_PUNCTUATION.sub('', self.text) 
     3  words_only = text_mod.split() 


    AttributeError: 'list' object has no attribute 'text' 

我对Python真的很陌生。这是导入过程中的问题还是其他问题?谢谢你的帮助。

+0

你能分享你的课程吗? 您正在发送列表作为您的words_only函数的参数。我想你应该发送字符串不在这里列表。 –

+0

'_words_only'是班级的一部分吗? – 2016-07-06 09:38:07

回答

1

您不显示您创建函数_words_only()的位置/方式,但参数self指示您使用类方法对其进行了图案化。你显然是把它作为一个独立的功能,如:

_words_only(list) 

我劝你不要来处理类但如果你能避免它。写你的函数是这样的:

def words_only(text): 
    text_mod = REGEX_REMOVE_PUNCTUATION.sub('', text) 
    words_only = text_mod.split() 
    words_only = [word for word in words_only if len(word) > 1] 
    return words_only 

你也应该知道你的功能是用来处理一个字符串,而不是他们的名单。另外,不要使用像list这样的内建名称作为变量名 - 你在一两天内要求一个非常混乱的错误。使用更翔实的名字,或者像lst的缩写:

lines = [] 
... 

some_words = words_only(lines[0]) 

既然你真的想用线列表工作,适用修改后的功能,每一个这样的:

filtered_lines = [ words_only(line) for line in lines ] 

如果您本来想要处理文件的全部内容,你可以这样阅读:

myfile = open(r"C:\Users\Luca\Desktop\Uni\Tesi\PythonTest\paolo.txt","r") 
text = myfile.read() 
myfile.close() 
some_words = words_only(text) 
+0

该功能真的很好!但是我的数据集是一个推文列表,如果我使用您建议的导入过程,结果我只有一个大单词列表。我想保留推文分开,然后清理每个人。使用我的导入过程,然后结合使用words_only函数的周期可能是一个解决方案? –

+0

够简单,现在我知道你在做什么了!编辑答案。 – alexis

+0

好吧,它完美的工作!谢谢! –