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

Nig*_* Ng 7 python nlp spacy

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

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

它可能需要某种基于统计/规则的程序来了解间距,大写或收缩应如何在正确的句子中起作用.

syl*_*sm_ 9

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


JDo*_*ong 6

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

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)
Run Code Online (Sandbox Code Playgroud)

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