编程新手如何清洗pandas DataFrame中拼接的印英双语srt字幕文本
字幕拼接+文本清洗解决方案
你现有代码已经完成了双语字幕的读取和初步拼接,只需增加文本清洗逻辑即可解决异常字符问题,修改后的完整代码如下:
import pysrt import pandas as pd from bs4 import BeautifulSoup as bs # 定义通用文本清洗函数,可按需增减替换规则 def clean_text(raw_text): # 先清理srt字幕常见的HTML格式标签(如<i>斜体标记等) text = bs(raw_text, "html.parser").get_text() # 替换换行符为空格 text = text.replace("\n", " ") # 删除不需要的分号标记,如需保留分号可删掉这行,或改成替换为空格 text = text.replace(";", "") # 清理首尾多余空白 text = text.strip() return text # 读取英文字幕 subs = pysrt.open("../input/movie-subtitles/Free-Guy_2021_English-ELSUBTITLE.COM-ST_62579580.srt") data = {"time": [], "eng_lines": []} for sub in subs: # 读取字幕文本后先做清洗 lines = clean_text(sub.text) time = sub.duration data["time"].append(time.to_time()) data["eng_lines"].append(lines) df_eng = pd.DataFrame(data) # 读取印地语字幕 subs = pysrt.open("../input/movie-subtitles/Free-Guy_2021_Hindi-ELSUBTITLE.COM-ST_62579580.srt") data = {"time": [], "hin_lines": []} for sub in subs: lines = clean_text(sub.text) time = sub.duration data["time"].append(time.to_time()) data["hin_lines"].append(lines) df_hin = pd.DataFrame(data) # 拼接时去掉英文df的重复时间列,避免出现两个time列 df = pd.concat([df_hin, df_eng.drop("time", axis=1)], axis=1)
补充说明
- 如果你后续发现还有其他需要清理的特殊字符,直接在
clean_text函数里加对应的替换规则即可,比如要删除*号就加一行text = text.replace("*", "") - 如果你的两个字幕时间轴不完全对齐,直接按行拼接可能出现双语错位,可改成按时间戳匹配拼接,无需改动清洗逻辑
- 如果需要后续导出清洗后的双语srt文件,可直接遍历df的每行内容按srt格式输出即可
内容的提问来源于stack exchange,提问作者Manish Tripathi
相关产品推荐
相关产品推荐

