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)
它可能需要某种基于统计/规则的程序来了解间距,大写或收缩应如何在正确的句子中起作用.
在spaCy中,您始终可以使用重建原始字符串''.join(token.text_with_ws for token in doc).如果你拥有的只是一个字符串列表,那么确实没有一个好的确定性解决方案.您可以训练反向模型或使用一些近似规则.我不知道这个detokenize()函数的一个很好的通用实现.
您可以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
| 归档时间: |
|
| 查看次数: |
2438 次 |
| 最近记录: |