从列表中的字符串中删除单词

时间:2018-01-07 06:43:17

标签: python regex string

我正在使用以下python程序从文本中删除停用词。

import re
from sklearn.feature_extraction import text

mylist= [['an_undergraduate'], ['state_of_the_art', 'terminology']]
######Remove stops
stops = list(text.ENGLISH_STOP_WORDS)
pattern = re.compile(r'|'.join([r'(\_|\b){}\b'.format(x) for x in stops]))
for k in mylist:
    for idx, item in enumerate(k):
        if item not in stops:
            item = pattern.sub('', item).strip()
            k[idx] = item

我希望输出为

mylist= [['undergraduate'], ['state_art', 'terminology']]

但是,我提到的模式并未正确捕获停用词。请让我知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您检查sklearn.feature_extraction.text.ENGLISH_STOP_WORDS的源代码,则其类型为frozenset。因此,无需将其类型转换为list。使用此嵌套列表理解表达式而不是使用regex将提高性能效率。

>>> from sklearn.feature_extraction import text
>>> mylist= [['an_undergraduate'], ['state_of_the_art', 'terminology']]

>>> [['_'.join([w for w in i.split('_') if w not in text.ENGLISH_STOP_WORDS]) for i in e] for e in mylist]
[['undergraduate'], ['state_art', 'terminology']]

这里我首先基于下划线分割单词,检查单词是否存在于ENGLISH_STOP_WORDS中,并仅在新单词不存在时过滤单词。