如何在spaCy NLP输出中知道要加入哪个空格

7
我正在使用spaCy的NLP模型来确定输入数据的POS,以使我的马尔科夫链在语法上更加正确,与python markovify库中的示例一样,该库可在此处找到然而,spaCy分割标记的方式使得在重构它们时变得困难,因为某些语法元素也被拆分了,例如"don't"变成了["do", "n't"]。这意味着你不能再像以前那样简单地通过空格重新连接生成的马尔科夫链,而是需要知道这些标记是否组成一个单词。
我认为标记的is_left_punctis_right_punct属性可能与此有关,但似乎并不相关。我的当前代码只处理PUNCT标记,但do n't问题仍然存在。
有没有一种标记属性可以用来告诉连接句子的方法何时省略空格,或者其他方法可以知道这一点?
1个回答

7

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

您可以始终使用它,因为它将表示实际存在的空格,或者在不存在时为空字符串。

在您所提到的情况下,当令牌化拆分连续字符串时会发生这种情况。

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

例如:

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

应该生成

[False, False]

1
非常感谢。对于使用此代码的人来说,有一个提示。了解空格是在单词之前还是之后更有用,因此在我处理完句子后,我将所有的“whitespace_”属性向左移动以生成马尔可夫链。再次感谢。 - Auh
@Auh - 我在实现你的方法时遇到了困难。你介意发一个简单的例子吗(假设使用 spaCy/markovify)? - lightyrs
1
我会尽力帮忙,你能具体解释一下你想要什么吗? - Nathan McCoy
我正在进行以下训练:str(bool(word.whitespace_))))还有以下生成:if whitespace == "True": sentence += f"{word} "这样做有意义吗?需要将whitespace属性转换为字符串以训练马尔可夫模型吗?@NathanMcCoy - lightyrs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接