NLP 反向标记化(从标记到格式良好的句子)

NLP reverse tokenizing (going from tokens to nicely formatted sentence)

Python 的 Spacy 包有一个统计分词器,可以智能地将一个句子分成分词。我的问题是,是否有一个包可以让我倒退,即从标记列表到格式良好的句子?本质上,我想要一个可以让我执行以下操作的函数:

>>> toks = ['hello', ',', 'i', 'ca', "n't", 'feel', 'my', 'feet', '!']
>>> some_function(toks)
"Hello, I can't feel my feet!"

它可能需要某种 statistical/rules-based 程序来了解间距、大写或缩略在正确的句子中应该如何工作。

在 spaCy 中,您始终可以使用 ''.join(token.text_with_ws for token in doc) 重建原始字符串。如果您只有一个字符串列表,那么就没有真正好的确定性解决方案。您可以训练反向模型或使用一些近似规则。我不知道此 detokenize() 函数的良好通用实现。

您可以在某种程度上使用 nltk 来像这样进行去标记化。您需要做一些 post 处理或修改正则表达式,但这里有一个示例想法:

import re
from nltk.tokenize.treebank import TreebankWordDetokenizer as Detok
detokenizer = Detok()
text = detokenizer.detokenize(tokens)
text = re.sub('\s*,\s*', ', ', text)
text = re.sub('\s*\.\s*', '. ', text)
text = re.sub('\s*\?\s*', '? ', text)

有更多带标点符号的边缘情况,但这很简单,比 ' '.join

稍微好一点

我已经描述了我的方法

即使您没有冗长的文档内容,它也会用标记化的单词创建一个漂亮的句子。