如何在 spaCy NLP 输出中通过 space 知道加入的位置

How to know where to join by space in spaCy NLP output

我正在使用 spaCys NLP 模型来计算输入数据的 POS,这样我的马尔可夫链在语法上可以更正确一些,就像 python markovify 库中的示例 here.然而,spaCy 拆分标记的方式使得重建它们变得困难,因为某些语法元素也会被拆分,例如 "don't" 变成 ["do", "n't"]。这意味着您不能再简单地通过 space 重新加入生成的马尔可夫链,而是需要知道标记是否组成一个单词。

我假设令牌的 is_left_punctis_right_punct 属性可能与此有关,但似乎没有关系。我当前的代码只考虑了 PUNCT 个令牌,但 do n't 问题仍然存在。

是否有 属性 个标记,我可以使用它来告诉将句子连接在一起的方法何时省略 space 或通过其他方式知道这一点?

Spacy 标记有一个始终设置的 whitespace_ 属性。

您可以随时使用它,因为当它们存在时它将代表实际空间,或者当它们不存在时它是一个空字符串。

这发生在你提到的情况下,当标记化拆分一个连续的字符串时。

因此 Token("do").whitespace_ 将是空字符串。

例如

[bool(token.whitespace_) for token in nlp("don't")]

应该产生

[False, False]