我正在尝试编写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和2010中,我都遇到相同的问题Jupyter笔记本。
例如,上一轮写了以175结尾的单词:
its
wouldn
shan
使用file.write(out1)
我得到了全部211个单词,并且该列的结尾如下:
209. more
210. have
211. ,
有人遇到类似问题。对可能发生的事情有任何了解吗?
我是Python / NLTK的新手,所以我决定问一下。
答案 0 :(得分:0)
获得停用词随机顺序的原因是由于使用了set
。
_stopwords = set(stopwords.words('english')+list(punctuation))
集合是一个无序集合,没有重复的元素。了解更多here。
与将元素存储为有序列表的数组不同,数组中元素的顺序是不确定的(此外,通常不按集合中的出现顺序存储集合元素;这允许检查元素是否属于一个集合要比遍历集合的所有元素更快。
您可以使用以下简单示例进行检查:
test = set('abcd')
for i in test:
print(i)
它输出不同的顺序(例如,我在两个不同的系统上尝试过,这就是我得到的): 在Ist系统上
a
d
b
c
在第二个系统上
d
c
a
b
对于有序集还有其他选择。选中here。
此外,我检查了三个out1
,out2
和out3
是否给出了211个停用词。