首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除停用词和string.punctuation

删除停用词和string.punctuation
EN

Stack Overflow用户
提问于 2017-08-05 06:15:20
回答 3查看 10.9K关注 0票数 1

我不明白为什么这个不起作用:

代码语言:javascript
复制
import nltk
from nltk.corpus import stopwords
import string

with open('moby.txt', 'r') as f:
    moby_raw = f.read()
    stop = set(stopwords.words('english'))
    moby_tokens = nltk.word_tokenize(moby_raw)
    text_no_stop_words_punct = [t for t in moby_tokens if t not in stop or t not in string.punctuation]

    print(text_no_stop_words_punct)

看一下输出,我有这样的输出:

代码语言:javascript
复制
[...';', 'surging', 'from', 'side', 'to', 'side', ';', 'spasmodically', 'dilating', 'and', 'contracting',...]

看起来标点符号还在。我哪里做错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-05 06:21:24

它必须是and,而不是or

代码语言:javascript
复制
if t not in stop and t not in string.punctuation

或者:

代码语言:javascript
复制
if not (t in stop or t in string.punctuation):

或者:

代码语言:javascript
复制
all_stops = stop | set(string.punctuation)
if t not in all_stops:

后一种解决方案速度最快。

票数 9
EN

Stack Overflow用户

发布于 2017-08-05 06:21:06

在此行中,尝试将'or‘更改为' and’,这样列表将只返回既不是停用词也不是标点符号单词。

代码语言:javascript
复制
text_no_stop_words = [t for t in moby_tokens if t not in stop or t not in string.punctuation]
票数 4
EN

Stack Overflow用户

发布于 2017-08-05 06:24:21

关。在您的比较中,您需要使用and而不是or。如果发现像";“这样的标点符号不在stop中,那么python就不会检查它是否在string.punctuation中。

代码语言:javascript
复制
text_no_stop_words_punct = [t for t in moby_tokens if t not in stop and t not in string.punctuation]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45516207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档