Строка результата действительно, действительно выглядит как строковое представление в противном случае совершенно нормального списка, поэтому давайте 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]']
давайте go снова по вашим шагам. Сначала «удалите кавычки». Но нет никаких (устаревших) кавычек, потому что это список строк; дополнительные кавычки, которые вы видите в представлении, только потому, что именно так строка представлена в 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 .
, которые требуют немного o'relacing:
result_as_string = result_as_string.replace(' ,', ',').replace(' .','.').replace(" ' ", "'")
и вы вернете свое предложение:
You couldn't have done any better because if you could have, you would have.
Единственная проблема, которую я вижу, это наличие лидирующих или закрывающих кавычек, которые не являются частью сокращения , Если это необходимо, вы можете заменить замену space-quote-space на более сфокусированную, нацеленную на «не могу», «не могу», «нет» и т. Д. c.