python分割長文本
思路:設置切塊允許的最大文本長度,先按照允許的最大文本長度切出一個chunk,然后檢查chunk內部是否存在逗號、句號、感嘆號、問號、空格等自然的語義分割符,若存在,在把該chunk繼續切分,否則,該切塊就是最終的切塊。
def cut_text(full_text, max_chunk_size=510): if len(full_text) <= max_chunk_size: return [full_text] start_idx = 0 chunks = [] segment_tokens = set(list(",。!?: 、")) while start_idx < len(full_text): end_idx = start_idx + max_chunk_size while start_idx < end_idx < len(full_text) - 1 and full_text[end_idx - 1] not in segment_tokens: end_idx -= 1 if end_idx == start_idx: chunks.append(full_text[start_idx:start_idx + max_chunk_size]) start_idx += max_chunk_size else: chunks.append(full_text[start_idx:end_idx]) start_idx = end_idx return chunks
測試:
if __name__=='__main__': text='長官額個個沃爾公爵哦i金額共i歸結為國界無關噢俄外交官,改為俄國【 額威威給額外而我國給' print(len(text)) texts=cut_text(text,max_chunk_size=10) for text in texts: print(f'len={len(text)},text={text}')
輸出:
44 len=10,text=長官額個個沃爾公爵哦 len=10,text=i金額共i歸結為國界 len=8,text=無關噢俄外交官, len=6,text=改為俄國【 len=10,text=額威威給額外而我國給

浙公網安備 33010602011771號