我正在使用以下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']]
但是,我提到的模式并未正确捕获停用词。请让我知道如何解决这个问题?
答案 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
中,并仅在新单词不存在时过滤单词。