2015-05-15 47 views
2

我向你致敬!我在這裏是新手,我試圖優化這部分代碼時遇到了一些問題。Python:如何優化兩個大集合之間的比較?

我從兩個文件讀取:

Corpus.txt ----->包含我的文字(1.000.000字)

Stop_words.txt ----->包含了我stop_list(4000字)

我必須將每個單詞從我的語料庫與stop_list中的每個單詞進行比較,因爲我想要一個沒有停用詞的文本,所以我已經: 1.000.000 * 4000比較做代碼如下:

fich= open("Corpus.txt", "r") 
text = fich.readlines() 

fich1= open("stop_words.txt", "r") 
stop = fich1.read() 

tokens_stop = nltk.wordpunct_tokenize(stop) 
tokens_stop=sorted(set(tokens_stop)) 

for line in text : 
    tokens_rm = nltk.wordpunct_tokenize(line) 
    z = [val for val in tokens_rm if val not in tokens_stop] 
    for i in z: 
     print i 

我的問題是:有什麼需要改變的嗎?任何結構來優化它?

+2

你爲什麼要做'排序(set(tokens_stop))'?對它進行排序將返回一個具有O(n)線性搜索的列表,與集合的O(1)成員資格測試相比較。當然,因爲它已經排序了,所以可以使用平分模塊進行搜索O(log n),但是爲什麼不把它作爲一個集合來使用,所以不需要進行多達4000次比較? – Shashank

回答

1

您可以創建一組stop_words,然後爲文本中的每個單詞查看它是否在集合中。

其實它看起來像你已經使用一套。雖然我不知道你爲什麼要整理它。

+0

tokens_rm是一組1.000.000字! –

+0

但設置刪除重複已經 – Tatermelon

+0

這是好得多(Y)我不知道,設置刪除重複!感謝 –