2016-10-03 11 views
1

我正在編寫一個代碼來清理url並提取底層文本。如何使用python nltk刪除展示無模式的亂碼?

train_str = train_df.to_string() 
letters_only = re.sub("[^a-zA-Z]", " ", train_str) 
words = letters_only.lower().split() 
stops = set(stopwords.words("english")) 
stops.update(['url','https','http','com']) 
meaningful_words = [w for w in words if not w in stops] 
long_words = [w for w in meaningful_words if len(w) > 3] 

使用上面的代碼中,我能夠移除標點符號,停用詞等後只提取的話,但我無法刪除那些在自然界莫名其妙的話。這些是清理網址後我得到的許多單詞中的一部分。

['uact', 'ahukewim', 'asvpoahuhxbqkhdtibveqfggtmam', 'fchrisalbon','afqjcnhil', 'ukai', 'khnaantjejdfrhpeza'] 

在它們的出現或使用正則表達式或其他函數的字母中沒有特定的模式。任何人都可以提出這些詞可以刪除的任何方式嗎? 謝謝!

+0

是如何構造的話。在你的例子中的字符串列表? – MattR

+0

@MattR這些是['instant','espv','string','pandas','dataframe'],['dataframe','imported','html','afqjcnhil','ukai ','khnaantjejdfrhpeza']。對不起,我不明白這些詞的結構是什麼意思? – Josephine

+0

你正在嘗試清理的詞語。它看起來像是一串字符串?你試圖通過它們循環並從這個列表中刪除「垃圾單詞」,是的? PS:我知道我可以解決這個問題..我必須下載整個NLTK包。同時請下載整個nltk軟件包,如果你還沒有'import nltk''nltk.download()' – MattR

回答

0

創建一個空的列表。遍歷當前列表中的所有單詞。使用來自corpera的words.words()來檢查它是否是真實的世界。將所有「非垃圾詞」追加到新列表中。無論你喜歡什麼,都可以使用新的列表。

from nltk.corpus import words 

test = ['uact', 'ahukewim', 'asvpoahuhxbqkhdtibveqfggtmam', 'fchrisalbon',\ 
'afqjcnhil', 'ukai', 'khnaantjejdfrhpeza', 'this', 'is' , 'a' , 'word'] 
final = [] 

for x in test: 
    if x in words.words(): 
     final.append(x) 
print(final) 

輸出:

['this', 'is', 'a', 'word'] 
+0

謝謝MattR !!! – Josephine

+0

@Josephine。沒問題。 NLTK是一個廣泛的軟件包。請參閱文檔[http://www.nltk.org/book/ch02.html]。我在第4.1節搜索到 – MattR

+2

這個問題是,即使相對簡單的文本可以包含合法的非字典單詞。人們一直都在投新話。僅僅因爲你以前沒有見過,* fantabulosity *並不一定意味着它是胡言亂語(當然也取決於你對「胡言亂語」的定義)。 – tripleee