2016-07-06 297 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

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