如何预处理文本以删除停用词?

How to preprocess a text to remove stopwords?

我想删除停用词列表,即

中的那些
from gensim.parsing.preprocessing import STOPWORDS
print(STOPWORDS)

在 gensim 中,使用 remove_stopwords function 应该非常简单。

我读取文本并删除停用词的代码如下:

def read_text(text_path):
  text = []
  with open(text_path) as file:
    lines = file.readlines()
    for index, line in enumerate(lines):
      text.append(simple_preprocess(remove_stopwords(line)))
  return text

text = read_text('/content/text.txt')
text =  [x for x in text if x]
text[:3]

这是我得到的输出,其中包含诸如“我们”或“但是”之类的词,这些词应该从 original text 中删除,例如“the”已从第一句中正确删除。我很困惑...我在这里错过了什么?

[['clinical', 'guidelines', 'management', 'ibd'],
 ['polygenetic',
  'risk',
  'scores',
  'add',
  'predictive',
  'power',
  'clinical',
  'models',
  'response',
  'anti',
  'tnfα',
  'therapy',
  'inflammatory',
  'bowel',
  'disease'],
 ['anti',
  'tumour',
  'necrosis',
  'factor',
  'alpha',
  'tnfα',
  'therapy',
  'widely',
  'management',
  'crohn',
  'disease',
  'cd',
  'ulcerative',
  'colitis',
  'uc',
  'however',
  'patients',
  'respond',
  'induction',
  'therapy',
  'patients',
  'lose',
  'response',
  'time',
  'to',
  'aid',
  'patient',
  'stratification',
  'polygenetic',
  'risk',
  'scores',
  'identified',
  'predictors',
  'response',
  'anti',
  'tnfα',
  'therapy',
  'we',
  'aimed',
  'replicate',
  'association',
  'polygenetic',
  'risk',
  'scores',
  'response',
  'anti',
  'tnfα',
  'therapy',
  'independent',
  'cohort',
  'patients',
  'establish',
  'clinical',
  'validity']]

文本(完整文件可用here

IBD 管理临床指南。

多基因风险评分不会增加炎症性肠病抗 TNFα 治疗反应的临床模型的预测能力。 抗肿瘤坏死因子 α (TNFα) 疗法广泛用于克罗恩病 (CD) 和溃疡性结肠炎 (UC) 的治疗。然而,多达三分之一的患者对诱导治疗没有反应,另外三分之一的患者随着时间的推移失去反应。为了帮助患者分层,多基因风险评分已被确定为对抗 TNFα 治疗反应的预测因子。我们的目的是在一个独立的患者队列中复制多基因风险评分与抗 TNFα 治疗反应之间的关联,以确定其临床有效性。

您的 remove_stopwords() 函数区分大小写,并且不会忽略标点符号。例如,'However' 不在 STOPWORDS 中,但 'however' 在中。您应该先调用 simple_preprocess() 函数。这应该有效:

from gensim.parsing.preprocessing import STOPWORDS
from gensim.parsing.preprocessing import remove_stopword_tokens

def read_text(text_path):
  text = []
  with open(text_path) as file:
    lines = file.readlines()
    for index, line in enumerate(lines):
      tokens = simple_preprocess(line)
      text.append(remove_stopword_tokens(tokens,stopwords=STOPWORDS))
  return text