-1


我需要对frozenset 执行二进制搜索,但由于索引在frozenset 上不起作用,我无法使用该bisect库。我想将 freezeset 转换为列表以使事情变得简单,但问题是转换 ( list(frozenset)) 打乱了顺序,然后我无法执行二进制搜索。你建议什么解决方案?
为了更清楚,让我解释一下我到底在做什么:在 NLP 任务中,我需要从文本中删除停用词,所以我从 scikit-learn 导入了停用词(它比 NLTK 拥有更好的停用词集合在我看来):
from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
它返回一个frozenset,其中停用词按字母顺序排列。现在我想从我的文本中删除停用词,最好使用二进制搜索检查标记是否在停用词中(显然因为我有按字母顺序排列的停用词并且执行二进制搜索很有效)。所以如下:

import bisect

bisect.bisect(ENGLISH_STOP_WORDS, word)

这就是我卡住的地方!我期望使用上面的代码在停用词列表中找到所需的索引,然后将我的词与列表中它之前和之后的词进行比较。但我得到这个错误: TypeError: 'frozenset' object does not support indexing

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

4

1 回答 1

3

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

if word in ENGLISH_STOP_WORDS:
    pass
于 2020-05-27T13:54:32.933 回答