[英]Problem with Python/NLTK Stop Words and File Write
我正在嘗試編寫NLTK停用詞列表。
所以,我寫了這個腳本:
import nltk
from nltk.corpus import stopwords
from string import punctuation
file_name = 'OUTPUT.CSV'
file = open(file_name, 'w+')
_stopwords = set(stopwords.words('english')+list(punctuation))
i = 0
file.write(f'\n\nSTOP WORDS:+++\n\n')
for w in _stopwords:
i=i+1
out1 = f'{i:3}. {w}\n'
out2 = f'{w}\n'
out3 = f'{i:3}. {w}'
file.write(out2)
print(out3)
file.close()
原始程序使用file.write(w)
,但是由於遇到問題,因此我開始嘗試。
因此,我嘗試使用file.write(out1)
。 可以,但是停用詞的順序似乎是隨機的。
有趣的是,如果我使用file.write(out2)
,我只會寫隨機數量的停用詞,這些停用詞看起來是隨機出現的,總是少於211。我在Visual Studio 2017和Jupyter Notebook中都遇到相同的問題。
例如,上一輪寫了175個單詞,結尾為:
its
wouldn
shan
使用file.write(out1)
我得到所有211個單詞,並且該列的結尾是這樣的:
209. more
210. have
211. ,
有沒有人遇到類似的問題。 對可能發生的事情有任何想法嗎?
我是Python / NLTK的新手,所以我決定問一下。
您獲得停用詞隨機順序的原因是由於使用了set
。
_stopwords = set(stopwords.words('english')+list(punctuation))
集合是沒有重復元素的無序集合。 在這里閱讀更多。
與將元素存儲為有序列表的數組不同,數組中元素的順序是不確定的(此外,通常不按集合中的出現順序存儲集合元素;這可以更快地檢查元素是否屬於集合)而不僅僅是遍歷集合中的所有元素)。
您可以使用以下簡單示例進行檢查:
test = set('abcd')
for i in test:
print(i)
它輸出不同的順序(例如,我在兩個不同的系統上嘗試過,這就是我得到的):在Ist系統上
a
d
b
c
在第二個系統上
d
c
a
b
有序集還有其他選擇。 在這里檢查。
此外,我檢查了三個out1
, out2
和out3
給出了211個停用詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.