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
稍微好一点
我已经描述了我的方法 。
即使您没有冗长的文档内容,它也会用标记化的单词创建一个漂亮的句子。
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
我已经描述了我的方法
即使您没有冗长的文档内容,它也会用标记化的单词创建一个漂亮的句子。