Мне нужно выполнить двоичный поиск на Frozenset, но поскольку индексирование не работает на Frozenset, я не могу использовать библиотеку bisect
. Я думал преобразовать Frozenset в список, чтобы упростить задачу, но проблема в том, что преобразование (list(frozenset)
) нарушает порядок, и тогда я не могу выполнять двоичный поиск. Какое решение вы предлагаете?
Для большей ясности позвольте мне объяснить, что именно я делаю: в задаче NLP мне нужно удалить стоп-слова из моего текста, поэтому я импортировал стоп-слова из scikit-learn ( на мой взгляд, у него лучший набор стоп-слов, чем у NLTK):
from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
И он возвращает фрозенсет, в котором стоп-слова расположены в алфавитном порядке. И теперь, когда я хочу удалить стоп-слова из своего текста, лучше проверить, находится ли токен в стоп-словах, используя двоичный поиск (очевидно, потому что у меня стоп-слова в алфавитном порядке, и выполнять двоичный поиск эффективно). Так вот:
import bisect
bisect.bisect(ENGLISH_STOP_WORDS, word)
И вот здесь я застрял! Я ожидал найти нужный индекс в списке игнорируемых слов с помощью приведенного выше кода, а затем сравнить свое слово с тем, что до и после него в списке. Но я получаю эту ошибку: TypeError: 'frozenset' object does not support indexing
.
FYI, я не пробовал список стоп-слов из других библиотек (spaCy, gensim, et c.), Поэтому я не знаю, работают ли они лучше в этом кейс. Но главное здесь - научиться обрабатывать двоичный поиск на Frozenset. Заранее спасибо.