【问题标题】:Is there any way to obtain the index of a particular token in a doc rather than looping?有没有办法在文档中获取特定标记的索引而不是循环?
【发布时间】:2022-07-08 12:14:45
【问题描述】:
import spacy
nlp = spacy.load(\'en_web_core_sm\')
doc = nlp(\"I love spacy. Spacy is so cool.\")

for token in doc:
   print(token)

这会将每个标记打印在一个新行中。但是如果我想要单独的“cool”令牌,我应该知道那个令牌的索引对!我能做些什么呢?

例如:如果文档中有 1000 个单词,我想要一个特定的单词“模拟”作为单独的标记,但我不知道该标记在该文档中的位置。与其循环那1000个单词,有没有办法直接获取“模拟”的索引?

    标签: spacy-3


    【解决方案1】:

    token.i 具有文档中某个标记的标记索引。 token.idx 具有字符索引。

    import spacy
    
    nlp = spacy.blank("en")
    doc = nlp("I like cheese")
    
    assert doc[2].text == "cheese"
    assert doc[2].i == 2
    assert doc[2].idx == 7
    

    【讨论】:

    • 我的问题是我不知道那个特定令牌的索引。但是您在答案中指定了索引。假设有一个 100 万字的文档。您必须在整个文档中找出令牌的索引。您唯一知道的是令牌的文本。所以我要问的是我们不能只将令牌文本作为参数提供给 spacy 中的某些内置方法并在该文档中获取令牌索引吗?
    • spaCy 不会按其文本抢先索引文档中的标记,不。当您说“内置方法”时,我猜 Matcher 可以做到这一点,但它仍在内部迭代令牌。
    • 迭代文档中的单词非常快,我无法想象在任何正常情况下查找都会成为瓶颈。
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2019-11-14
    • 2020-08-25
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    相关资源
    最近更新 更多