python - 如何知道在 spaCy NLP 输出中按空格连接的位置
问题描述
我正在使用 spaCys NLP 模型来计算输入数据的 POS,以便我的 Markov 链在语法上更正确,就像在此处找到的 python markovify 库中的示例一样。然而,spaCy 拆分令牌的方式使得重构它们时变得困难,因为某些语法元素也被拆分,例如"don't"
变成["do", "n't"]
. 这意味着您不能再简单地通过空格重新加入生成的马尔可夫链,而是需要知道标记是否构成一个单词。
我假设令牌的is_left_punct
和is_right_punct
属性可能与此有关,但似乎并不相关。我当前的代码仅考虑PUNCT
令牌,但do n't
问题仍然存在。
是否有标记的属性可以用来告诉将句子连接在一起的方法何时省略空格或其他方式来知道这一点?
解决方案
Spacy 令牌具有whitespace_
始终设置的属性。
您始终可以使用它,因为当它们存在时它将代表实际空间,或者当它不存在时是一个空字符串。
这发生在您提到的情况下,当标记化拆分连续字符串时。
Token("do").whitespace_
空字符串也是如此。
例如
[bool(token.whitespace_) for token in nlp("don't")]
应该生产
[False, False]
推荐阅读
- shell - Shell 脚本 - 删除之前和之后的所有内容
- validation - Spring rest 控制器不验证我的 DTO
- arrays - 计算具有重复和限制的排列
- docker - 为什么我无法在 docker 中访问 pubsub 模拟器
- python - 根据当前数组的值和形状创建新数组
- pandas - pandas.DataFrame.drop(..., inplace=True) 是否使用额外的内存?
- django - Django - 在静态标签中添加字典中的文本
- regex - 如何将 nginx 位置重定向到不同的规则?
- angular - 模板尝试显示未从服务器接收到的数据
- amazon-web-services - 使用 AWS Lambda 和 AWS S3 进行大数据传输