繁体   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