Python 中 frozenset 的二进制搜索的替代方法

An alternative for binary search on a frozenset in Python


我需要对 frozenset 执行二进制搜索,但由于索引在 frozenset 上不起作用,我无法使用 bisect 库。想过把frozenset转成list好办,问题是转(list(frozenset))打乱了顺序,无法进行二分查找。您有什么建议?
为了更清楚,让我解释一下我到底在做什么:在 NLP 任务中,我需要从我的文本中删除停用词,所以我从 scikit-learn 导入了停用词(它有比 NLTK 更好的停用词集合在我看来):
from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
它 returns 一个冻结集,其中停用词按字母顺序排列。既然我想从我的文本中删除停用词,最好使用二进制搜索检查标记是否在停用词中(显然因为我有按字母顺序排列的停用词并且执行二进制搜索很有效)。所以是这样的:

import bisect

bisect.bisect(ENGLISH_STOP_WORDS, word)

这就是我被困的地方!我期待用上面的代码在停用词列表中找到所需的索引,然后将我的词与列表中它前后的词进行比较。但我收到此错误: TypeError: 'frozenset' object does not support indexing.

仅供参考,我没有尝试过其他库停用词列表(spaCy、gensim 等),所以我不知道它们在这种情况下是否工作得更好。但这里的重点是学习处理 frozenset 上的二分查找。 提前致谢。

如果您想知道该词是否是停用词,只需执行以下操作:

if word in ENGLISH_STOP_WORDS:
    pass