Python中对冻结集进行二进制搜索的另一种方法

Python中对冻结集进行二进制搜索的另一种方法,python,binary-search,stop-words,bisect,frozenset,Python,Binary Search,Stop Words,Bisect,Frozenset,我需要在frozenset上执行二进制搜索,但由于索引在frozenset上不起作用,我无法使用对分库。我曾想过将frozenset转换为一个列表以使事情变得简单,但问题是转换(list(frozenset))会打乱顺序,然后我无法执行二进制搜索。你有什么建议吗? 更清楚地说,让我解释一下我到底在做什么:在NLP任务中,我需要从文本中删除stopwords,因此我从scikit learn导入了stopwords(我认为它比NLTK有更好的stopwords集合): 从sklearn.featu


我需要在frozenset上执行二进制搜索,但由于索引在frozenset上不起作用,我无法使用
对分
库。我曾想过将frozenset转换为一个列表以使事情变得简单,但问题是转换(
list(frozenset)
)会打乱顺序,然后我无法执行二进制搜索。你有什么建议吗?
更清楚地说,让我解释一下我到底在做什么:在NLP任务中,我需要从文本中删除stopwords,因此我从scikit learn导入了stopwords(我认为它比NLTK有更好的stopwords集合):
从sklearn.feature\u extraction.text导入英语\u STOP\u单词

它返回一个冻结集,其中停止字按字母顺序排列。现在我想从文本中删除stopwords,最好使用二进制搜索检查stopwords中是否有标记(显然,因为我有按字母顺序排列的stopwords,执行二进制搜索很有效)。因此如下:

import bisect

bisect.bisect(ENGLISH_STOP_WORDS, word)
这就是我被困的地方!我希望用上面的代码在stopwords列表中找到所需的索引,然后将我的单词与列表中单词前后的索引进行比较。但我得到了这个错误:
TypeError:“冻结集”对象不支持索引

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

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

如果用英语单词\u停止\u单词:
通过

它返回一个冻结集,其中停止字按字母顺序排列
是一个令人惊讶的句子。集合和冻结集合是无序集合您不需要对集合进行二进制搜索。集合通过中的
操作符直接支持有效的成员资格测试,这就是它们的全部要点@我不知道这个事实。谢谢你的观点。对于那些感兴趣的人,我发现我的朋友@amirhossein寄给我的邮件真的很有帮助。谢谢@Sylvaus,但是我们能确保
in
执行二进制搜索,这样它会很有效吗?
in中带有一个集合的搜索是O(1),甚至比二进制搜索O(logn)更快。但是你也想要索引,对吗?@RoadRunner-MSFT噢,我不知道你提到的要点。不,我不需要索引,只要检查成员资格就足够了。非常感谢你!当您想了解标准系统上大多数操作的时间复杂度时,可以使用此选项containers@Sylvaus我不知道这些。谢谢你的链接。