1 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
結(jié)果字符串真的,真的看起來像一個(gè)完全正常的列表的字符串表示,所以讓 Python 將它安全地轉(zhuǎn)換回列表,按照將列表的字符串表示形式轉(zhuǎn)換為列表:
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)
現(xiàn)在我們有了這個(gè)
['[CLS]', 'You', 'couldn', "'", 't', 'have', 'done', 'any', 'better', 'because', 'if', 'you', 'could', 'have', ',', 'you', 'would', 'have', '.', '[SEP]']
讓我們?cè)倏纯茨愕牟襟E。首先,“刪除引號(hào)”。但是沒有任何(過時(shí)的)引號(hào),因?yàn)檫@是一個(gè)字符串列表;您在表示中看到的額外引號(hào)只是因?yàn)檫@就是Python 中字符串的表示方式。
接下來,“刪除開始和結(jié)束標(biāo)記”。由于這是一個(gè)列表,它們只是第一個(gè)和最后一個(gè)元素,無需進(jìn)一步計(jì)算:
result_as_list = result_as_list[1:-1]
接下來,“刪除逗號(hào)”。與第一步一樣,沒有(過時(shí)的)逗號(hào);它們是 Python顯示列表的一部分,但在實(shí)際數(shù)據(jù)中并不存在。
所以我們最終得到
['You', 'couldn', "'", 't', 'have', 'done', 'any', 'better', 'because', 'if', 'you', 'could', 'have', ',', 'you', 'would', 'have', '.']
可以使用以下方法將其連接回原始字符串
result_as_string = ' '.join(result_as_list)
剩下的唯一問題是 BERT 顯然將撇號(hào)、逗號(hào)和句號(hào)視為單獨(dú)的“單詞”:
You couldn ' t have done any better because if you could have , you would have .
需要一點(diǎn)替換:
result_as_string = result_as_string.replace(' ,', ',').replace(' .','.').replace(" ' ", "'")
你的句子回來了:
You couldn't have done any better because if you could have, you would have.
我看到的唯一問題是是否存在不屬于收縮的前導(dǎo)引號(hào)或結(jié)束引號(hào)。如果有必要,您可以將空格-引號(hào)-空格替換為更集中的替換,特別針對(duì)“不能”、“不能”、“不是”等。
添加回答
舉報(bào)