PDF文本清洗:按指定条件合并字符串列表的函数问题求助
解决PDF文本清洗中的字符串合并问题
你的函数将所有元素错误合并为一个字符串,核心问题在于判断条件过于宽泛,未区分数值型整数+小数点(如3.3)与其他带小数点的字符串(如章节号A.1),导致独立的章节号被错误合并到统计项中。
错误原因分析
- 原函数仅用
"%" in lst[i] and "." in lst[i]判断停止合并的条件,未识别小数点的类型:章节号A.1中的.会被误判,且该元素因无%被强制合并后续内容。 - 合并逻辑未区分独立项(如章节号)和需要合并的统计前置文本,导致所有不满足双条件的元素被连续合并。
解决方案
通过正则表达式精准识别数值型小数点,区分独立项与待合并项,维护临时合并组逐步合并直到满足条件:
import re def merge_strings(lst): result = [] current_group = [] def meets_condition(s): # 检查是否同时包含%和数值型整数+小数点格式 return "%" in s and re.search(r'\d+\.', s) is not None def has_integer_dot(s): # 检查是否包含数值型整数+小数点格式 return re.search(r'\d+\.', s) is not None for item in lst: if not current_group: # 无合并组时,判断当前元素是否为独立项 if meets_condition(item): result.append(item) else: current_group.append(item) # 若当前组无数值型小数点,说明是独立项,直接加入结果 if not has_integer_dot(' '.join(current_group)): result.append(' '.join(current_group)) current_group = [] else: # 有合并组时,加入元素并检查是否满足终止条件 current_group.append(item) if meets_condition(' '.join(current_group)): result.append(' '.join(current_group)) current_group = [] # 处理剩余未完成的合并组 if current_group: result.append(' '.join(current_group)) return result # 测试示例输入 input_lst = ['A.1 Environmentally', '3.3 Manufacture of low', 'carbon technologies', 'C29.1 0 0% 100%'] print(merge_strings(input_lst)) # 输出:['A.1 Environmentally', '3.3 Manufacture of low carbon technologies C29.1 0 0% 100%']
代码解释
meets_condition:判断字符串是否满足最终合并终止条件(同时包含%和数值型整数+小数点)。has_integer_dot:识别字符串是否包含数值型小数点,用来区分章节号和统计项前置文本。- 遍历过程中,若当前无合并组,先判断元素是否为独立项(无数值型小数点且不满足终止条件),若是则直接加入结果;否则启动合并组。
- 合并组持续加入后续元素,直到合并后的字符串满足终止条件,再将结果加入列表;最后处理剩余未完成的合并组,避免内容遗漏。
内容的提问来源于stack exchange,提问作者Omar Sow
相关产品推荐
相关产品推荐

