使用 python 未删除停用词

Stop words are not being removed using python

我正在尝试从我拥有的标记列表中删除停用词。但是,似乎没有删除这些词。会有什么问题?谢谢

尝试过:

Trans = []
    with open('data.txt', 'r') as myfile:
        file = myfile.read()
            #start readin from the start of the charecter
        myfile.seek(0)
        for row in myfile:
            split = row.split()
            Trans.append(split)
        myfile.close()


    stop_words = list(get_stop_words('en'))         
    nltk_words = list(stopwords.words('english')) 
    stop_words.extend(nltk_words)

    output = [w for w in Trans if not w in stop_words]


    Input: 

    [['Apparent',
      'magnitude',
      'is',
      'a',
      'measure',
      'of',
      'the',
      'brightness',
      'of',
      'a',
      'star',
      'or',
      'other']]

    output:

    It returns the same words as input.

我认为 Trans.append(split) 应该是 Trans.extend(split) 因为拆分 returns 一个列表。

由于输入包含列表的列表,您需要遍历一次外部列表和内部列表元素,然后您可以使用

获得正确的输出
output = [j for w in Trans for j in w if j not in stop_words]

为了提高可读性,创建一个函数。例如:

def drop_stopwords(row):
    stop_words = set(stopwords.words('en'))
    return [word for word in row if word not in stop_words and word not in list(string.punctuation)]

with open()不需要close() 并创建一个字符串列表(句子)并应用该函数。例如:

Trans = Trans.map(str).apply(drop_stopwords)

这将应用于每个句子... 你可以为lemmitize等添加其他功能。这里有一个非常清楚的例子(代码): https://github.com/SamLevinSE/job_recommender_with_NLP/blob/master/job_recommender_data_mining_JOBS.ipynb