首页 > 解决方案 > 如何知道在 spaCy NLP 输出中按空格连接的位置

问题描述

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

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

是否有标记的属性可以用来告诉将句子连接在一起的方法何时省略空格或其他方式来知道这一点?

标签: pythonspacymarkov-chains

解决方案


Spacy 令牌具有whitespace_始终设置的属性。

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

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

Token("do").whitespace_空字符串也是如此。

例如

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

应该生产

[False, False]

推荐阅读