慕田峪4524236
结果字符串真的,真的看起来像一个完全正常的列表的字符串表示,所以让 Python 将它安全地转换回列表,按照将列表的字符串表示形式转换为列表:import ast
result = """['[CLS]', 'You', 'couldn', "'", 't', 'have', 'done', 'any', 'better', 'because', 'if', 'you', 'could', 'have', ',', 'you', 'would', 'have', '.', '[SEP]']"""
result_as_list = ast.literal_eval(result)现在我们有了这个['[CLS]', 'You', 'couldn', "'", 't', 'have', 'done', 'any', 'better', 'because', 'if', 'you', 'could', 'have', ',', 'you', 'would', 'have', '.', '[SEP]']让我们再看看你的步骤。首先,“删除引号”。但是没有任何(过时的)引号,因为这是一个字符串列表;您在表示中看到的额外引号只是因为这就是Python 中字符串的表示方式。接下来,“删除开始和结束标记”。由于这是一个列表,它们只是第一个和最后一个元素,无需进一步计算:result_as_list = result_as_list[1:-1]接下来,“删除逗号”。与第一步一样,没有(过时的)逗号;它们是 Python显示列表的一部分,但在实际数据中并不存在。所以我们最终得到['You', 'couldn', "'", 't', 'have', 'done', 'any', 'better', 'because', 'if', 'you', 'could', 'have', ',', 'you', 'would', 'have', '.']可以使用以下方法将其连接回原始字符串result_as_string = ' '.join(result_as_list)剩下的唯一问题是 BERT 显然将撇号、逗号和句号视为单独的“单词”:You couldn ' t have done any better because if you could have , you would have .需要一点替换:result_as_string = result_as_string.replace(' ,', ',').replace(' .','.').replace(" ' ", "'")你的句子回来了:You couldn't have done any better because if you could have, you would have.我看到的唯一问题是是否存在不属于收缩的前导引号或结束引号。如果有必要,您可以将空格-引号-空格替换为更集中的替换,特别针对“不能”、“不能”、“不是”等。