簡體   English   中英

Python / NLTK停用詞和文件寫入問題

[英]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

有序集還有其他選擇。 在這里檢查。


此外,我檢查了三個out1out2out3給出了211個停用詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM