1

我想删除停用词。这是我的代码

import nltk
from nltk.corpus import stopwords
import string

u="The apple is the pomaceous fruit of the apple tree, species Malus domestica in the rose family (Rosaceae). It is one of the most widely cultivated tree fruits, and the most widely known of the many members of genus Malus that are used by humans."

v="An orange is a fruit of the orangle tree. it is the most cultivated tree fruits"

u=u.lower()
v=v.lower()

u_list=nltk.word_tokenize(u)
v_list=nltk.word_tokenize(v)

for word in u_list:
    if word in stopwords.words('english'):
        u_list.remove(word)
for word in v_list:
    if word in stopwords.words('english'):
        v_list.remove(word)

print u_list
print "\n\n\n\n"
print v_list

但只删除了一些停用词。请在这件事上给予我帮助

4

3 回答 3

1

您正在做的问题是 list.remove(x) 仅删除第一次出现的x,而不是每个 x。要删除每个实例,您可以使用filter,但我会选择这样的:

u_list = [word for word in u_list if word not in stopwords.words('english')] 
于 2012-10-03T07:18:01.420 回答
0

我将通过将拆分单词列表和停用词列表转换为 a 来删除单词set并计算difference

u_list = list(set(u_list).difference(set(stopwords.words('english'))))

这应该正确地删除停用词的出现。

于 2012-10-03T06:33:50.140 回答
0

我使用 remove(x) 函数在一段类似的代码上苦苦挣扎。我注意到只有大约 50% 的停用词被删除了。我知道这不是来自案例(我降低了我的话),也不是来自单词周围添加的标点或其他字符(strip())。我的理论(我是初学者)是,当您删除标记时,列表会缩小,索引和列表项会滑动,但循环会从同一个索引继续。因此,它不会在每个单词上循环。解决方案是使用不是停用词并且您想要保留的单词来增加一个新列表。

于 2013-08-07T12:05:30.283 回答