Python / NLTK停用词和文件写入问题

时间:2019-01-26 21:45:12

标签: python file nlp jupyter-notebook nltk

我正在尝试编写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的新手,所以我决定问一下。

1 个答案:

答案 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


此外,我检查了三个out1out2out3是否给出了211个停用词。