Удалить список стоп-слов из списка в Python (обработка естественного языка) - PullRequest
0 голосов
/ 17 января 2019

Я пытался удалить стоп-слова, используя код Python 3, но мой код, похоже, не работает, я хочу знать, как удалить стоп-слова из приведенного ниже списка. Пример структуры следующий:

    from nltk.corpus import stopwords

    word_split1=[['amazon','brand','- 
    ','solimo','premium','almonds',',','250g','by','solimo'],
    ['hersheys','cocoa', 'powder', ',', '225g', 'by', 'hersheys'], 
    ['jbl','t450bt','extra','bass','wireless','on- 
    ear','headphones','with','mic','white','by','jbl','and']]

Я пытаюсь удалить стоп-слова и попробовал приведенный ниже мой код, и я был бы признателен, если кто-нибудь может помочь мне исправить проблему .. вот код ниже

    stop_words = set(stopwords.words('english'))

    filtered_words=[]
    for i in word_split1:
        if i not in stop_words:
            filtered_words.append(i)

Я получаю ошибку:

    Traceback (most recent call last):
    File "<ipython-input-451-747407cf6734>", line 3, in <module>
    if i not in stop_words:
    TypeError: unhashable type: 'list'

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Список представляет собой двумерный массив, и вы пытаетесь хэшировать список, сначала преобразуйте его в одномерный массив, затем ваш код будет работать нормально,

word_split1 = [j for x in word_split1 for j in x] 

stop_words = set(stopwords.words('english'))

filtered_words=[]
for i in word_split1:
    if i not in stop_words:
        filtered_words.append(i)
0 голосов
/ 17 января 2019

У вас есть список списков.

Попытка:

word_split1=[['amazon','brand','- ','solimo','premium','almonds',',','250g','by','solimo'],['hersheys','cocoa', 'powder', ',', '225g', 'by', 'hersheys'],['jbl','t450bt','extra','bass','wireless','on-ear','headphones','with','mic','white','by','jbl','and']]
stop_words = set(stopwords.words('english'))
filtered_words=[]
for i in word_split1:
    for j in i:
        if j not in stop_words:
            filtered_words.append(j)

или сгладьте ваш список.

Ex:

from itertools import chain    

word_split1=[['amazon','brand','- ','solimo','premium','almonds',',','250g','by','solimo'],['hersheys','cocoa', 'powder', ',', '225g', 'by', 'hersheys'],['jbl','t450bt','extra','bass','wireless','on-ear','headphones','with','mic','white','by','jbl','and']]
stop_words = set(stopwords.words('english'))
filtered_words=[]
for i in chain.from_iterable(word_split1):
    if i not in stop_words:
        filtered_words.append(i)

или

filtered_words = [i for i in chain.from_iterable(word_split1) if i not in stop_words]
...