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