Альтернатива бинарному поиску на фризенсете в Python - PullRequest
0 голосов
/ 27 мая 2020


Мне нужно выполнить двоичный поиск на 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. Заранее спасибо.

1 Ответ

3 голосов
/ 27 мая 2020

Если вы хотите узнать, является ли слово стоп-словом, просто выполните:

if word in ENGLISH_STOP_WORDS:
    pass
...