亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 ' '.join(x) 不起作用時,在處理字符串列表后刪除逗號

當 ' '.join(x) 不起作用時,在處理字符串列表后刪除逗號

皈依舞 2022-10-25 16:15:25
因此,我在 BERT 中輸入了用于標記預測的句子數據幀,并與預測一起作為輸出接收到,句子分成單詞?,F在我想將拆分/標記化的句子和預測的數據框恢復為原始句子。(當然我有原始句子,但我需要執行此過程,以使預測與句子標記一致)original sentenceYou couldn't have done any better because if you could have, you would have.Post processing['[CLS]', 'You', 'couldn', "'", 't', 'have', 'done', 'any', 'better', 'because', 'if', 'you', 'could', 'have', ',', 'you', 'would', 'have', '.', '[SEP]']我確定了三個必要的過程。1. 刪除引號 2. 刪除 CLS ,SEP 及其多余的引號和逗號, 3. 刪除分隔單詞的逗號并將它們合并。def fix_df(row):    sentences = row['t_words']     return remove_edges(sentences)def remove_edges(sentences):    x = sentences[9:-9]    return remove_qmarks(x)def remove_qmarks(x):    y = x.replace("'", "")    return join(y)def join(y):    z = ' '.join(y)    return za_df['sents'] = a_df.apply(fix_df, axis=1) 前兩個功能在很大程度上可以正常工作,但最后一個沒有。相反,我得到了一個看起來像這樣的結果。Y o u , c o u l d n , " " , t , h a v e, d o n e ,...逗號并沒有消失,而是文字被扭曲了。我肯定錯過了一些東西。那會是什么?
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

結果字符串真的,真的看起來像一個完全正常的列表的字符串表示,所以讓 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.

我看到的唯一問題是是否存在不屬于收縮的前導引號或結束引號。如果有必要,您可以將空格-引號-空格替換為更集中的替換,特別針對“不能”、“不能”、“不是”等。


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號