【问题标题】:NLP reverse tokenizing (going from tokens to nicely formatted sentence)NLP 反向标记(从标记到格式良好的句子)
【发布时间】:2017-05-24 12:49:54
【问题描述】:

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

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

它可能需要某种基于统计/规则的程序来了解空格、大写或收缩在正确的句子中应该如何工作。

【问题讨论】:

    标签: python nlp spacy


    【解决方案1】:

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

    【讨论】:

    • 我确实可以访问 spaCy token 对象。我将创建一个将标记列表与格式化句子匹配的字典。谢谢!
    【解决方案2】:

    您可以在某种程度上使用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)
    

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

    【讨论】:

    • 谢谢,这是最好的答案。其他答案被接受的唯一原因是 OP 使用了 SpaCy,但很多人没有。真的很有帮助。
    【解决方案3】:

    我已经描述了我的方法here

    即使您没有空洞的文档内容,它也确实可以从标记化的单词中创建一个不错的句子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-03
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2010-10-22
      • 2015-06-27
      • 2017-11-01
      相关资源
      最近更新 更多