Как удалить слова из списка Nltk stoplist [duplicate]

Поскольку вопрос уже ответил, то лучший способ - использовать метод удаления объекта итератора, я хотел бы перейти к особенностям места, где была выбрана ошибка "java.util.ConcurrentModificationException".

Каждый класс коллекции имеет частный класс, который реализует интерфейс Iterator и предоставляет такие методы, как next(), remove() и hasNext().

Следующий код выглядит примерно так:

public E next() {
    checkForComodification();
    try {
        E next = get(cursor);
        lastRet = cursor++;
        return next;
    } catch(IndexOutOfBoundsException e) {
        checkForComodification();
        throw new NoSuchElementException();
    }
}

Здесь метод checkForComodification реализован как

final void checkForComodification() {
    if (modCount != expectedModCount)
        throw new ConcurrentModificationException();
}

Итак, как вы можете видеть, если вы явно попытаетесь удалить элемент из коллекции. Это приводит к тому, что modCount отличается от expectedModCount, что приводит к исключению ConcurrentModificationException.

79
задан alvas 6 March 2013 в 13:53
поделиться

7 ответов

Я предполагаю, что у вас есть список слов (word_list), из которых вы хотите удалить стоп-слова. Вы можете сделать что-то вроде этого:

filtered_word_list = word_list[:] #make a copy of the word_list
for word in word_list: # iterate over word_list
  if word in stopwords.words('english'): 
    filtered_word_list.remove(word) # remove word from filtered_word_list if it is a stopword
14
ответ дан das_weezul 19 August 2018 в 05:07
поделиться
  • 1
    это будет намного медленнее, чем понимание списка Дарена Томаса ... – drevicko 26 August 2016 в 10:54

Вы также можете выполнить набор diff, например:

list(set(nltk.regexp_tokenize(sentence, pattern, gaps=True)) - set(nltk.corpus.stopwords.words('english')))
20
ответ дан David Lemphers 19 August 2018 в 05:07
поделиться
  • 1
    Примечание: это преобразует предложение в SET, который удаляет все повторяющиеся слова и, следовательно, вы не сможете использовать подсчет частоты для результата – David Dehghan 22 February 2017 в 00:59

вы можете использовать эту функцию, вы должны заметить, что вам нужно опустить все слова

from nltk.corpus import stopwords

def remove_stopwords(word_list):
        processed_word_list = []
        for word in word_list:
            word = word.lower() # in case they arenet all lower cased
            if word not in stopwords.words("english"):
                processed_word_list.append(word)
        return processed_word_list
0
ответ дан Mohammed_Ashour 19 August 2018 в 05:07
поделиться
   import sys
print ("enter the string from which you want to remove list of stop words")
userstring = input().split(" ")
list =["a","an","the","in"]
another_list = []
for x in userstring:
    if x not in list:           # comparing from the list and removing it
        another_list.append(x)  # it is also possible to use .remove
for x in another_list:
     print(x,end=' ')

   # 2) if you want to use .remove more preferred code
    import sys
    print ("enter the string from which you want to remove list of stop words")
    userstring = input().split(" ")
    list =["a","an","the","in"]
    another_list = []
    for x in userstring:
        if x in list:           
            userstring.remove(x)  
    for x in userstring:           
        print(x,end = ' ') 
    #the code will be like this
0
ответ дан Muhammad Yusuf 19 August 2018 в 05:07
поделиться

с использованием фильтра :

from nltk.corpus import stopwords
# ...  
filtered_words = list(filter(lambda word: word not in stopwords.words('english'), word_list))
1
ответ дан Saeid BK 19 August 2018 в 05:07
поделиться
from nltk.corpus import stopwords
# ...
filtered_words = [word for word in word_list if word not in stopwords.words('english')]
155
ответ дан Stefan Falk 19 August 2018 в 05:07
поделиться
  • 1
    Благодаря обоим ответам они оба работают, хотя, похоже, у меня есть недостаток в моем коде, что предотвращает правильную работу стоп-листа. Если это будет новый вопрос? не знаю, как все здесь работает! – Alex 30 March 2011 в 15:29
  • 2
    Для повышения производительности рассмотрите stops = set(stopwords.words("english")). – isakkarlsson 7 September 2013 в 23:04
  • 3
    & GT; & GT; & GT; import nltk & gt; & gt; & gt; & gt; & gt; & gt; & gt; nltk.download () Источник – Diogo 14 December 2017 в 21:33

Чтобы исключить все типы стоп-слов, включая nltk стоп-слова, вы можете сделать что-то вроде этого:

from stop_words import get_stop_words
from nltk.corpus import stopwords

stop_words = list(get_stop_words('en'))         #About 900 stopwords
nltk_words = list(stopwords.words('english')) #About 150 stopwords
stop_words.extend(nltk_words)

output = [w for w in word_list if not w in stop_words]
5
ответ дан Tannaz Khaleghi 19 August 2018 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: