我需要在frozenset上进行二进制搜索,但由于索引在frozenset上不工作,所以我不能使用 bisect
库。我想把frozenset转换为一个列表,以方便工作,但问题是转换(list(frozenset)
)打乱了顺序,然后我就不能进行二进制搜索了。你有什么解决办法?为了更清楚,让我解释一下我到底在做什么。在一个NLP任务中,我需要从我的文本中删除停顿词,所以我从scikit-learn中导入了停顿词(在我看来,它有比NLTK更好的停顿词集合)。from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
它返回了一个frozenset,其中的停止词是按字母顺序排列的。现在我想从我的文本中删除停止符,最好使用二进制搜索检查停止符中是否有标记(很明显,因为我的停止符是按字母顺序排列的,进行二进制搜索很有效)。所以,它是如下的。
import bisect
bisect.bisect(ENGLISH_STOP_WORDS, word)
这就是我被卡住的地方!我希望用上面的代码在 stopwords 列表中找到所需的索引,然后将我的词与列表中前后的词进行比较。但是我得到了这个错误。TypeError: 'frozenset' object does not support indexing
.
顺便说一下,我没有尝试过其他库的stopwords list(spaCy,gensim等),所以我不知道它们在这种情况下是否更好用。但这里主要是学习处理frozenset上的二进制搜索.先谢谢了。
如果你想知道这个词是否是停顿词,只需做。
if word in ENGLISH_STOP_WORDS:
pass