python - python拆分字符串而不切割单词
问题描述
我发现了一些类似的问题,但没有来自 python。
上下文:
我有许多 pdf 文件(文本),其中包含其他文本的表格。表格的位置和大小因文件而异。我已经尝试过不同的库,但 pdftotext 是迄今为止最好的。例如,tabula 不起作用。
到目前为止的解决方案:
我使用 pdftotext 将所有信息提取为一个大字符串,找到将始终分隔表格并将表格保存在变量中的子字符串
不幸的是,我不能写表的全部内容,但前两行:
D Staph. aureus Ps. aeruginosa E. coli ATCC Ser. Asp. Cand. albicans
a ATCC 6538, ATCC 9027, Ps. 8739, Ent. marcescens brasiliensis ATCC 10231,
由于 pdftotext 在每一行的末尾放置一个“\n”,我可以将表格拆分为每一行
我的目标是将此字符串分隔为子字符串,如下所示:
['Staph. aureus', 'Ps. aeruginosa', 'E. coli ATCC', 'Ser.', 'Asp.', 'Cand. albicans']
和这个:
['ATCC 6538, ', 'ATCC 9027, Ps. ', '8739, Ent. ', 'marcescens ', 'brasiliensis ', 'ATCC 10231,']
例如,第二行以每 15 个字符分隔
我意识到一列的最大长度是 15 个字符,所以我尝试像这样拆分它,n = 15:
print([line[i: (i + n)] for i in range(0, len(line), n)])
但这就是我得到的:
['Staph. aureus ', 'Ps. aeruginosa ', 'E. coli ATCC Se', 'r. ', 'Asp. ', 'Cand. albicans']
这里的问题是如何在不剪切单词的情况下剪切子字符串中的字符串?我已经意识到,如果我在位置线[i + n] 上剪切,位置线[i+n-1] 必须等于“”才能不剪切一个单词。
解决方案
这会有帮助吗?
str = "D Staph. aureus Ps. aeruginosa E. coli ATCC Ser. Asp.
Cand. albicans"
list = []
for s in str.split():
if "." in s:
list.append(s)
elif list:
list[-1] = f"{list[-1]} {s}"
print(list)
输出:
['Staph. aureus', 'Ps. aeruginosa', 'E. coli ATCC', 'Ser.', 'Asp.', 'Cand. albicans']
这会在空格处拆分字符串,然后遍历结果数组,如果单词包含“。”,则在列表中开始一个新条目。并在列表中将该索引附加到以下单词,直到下一个单词带有“。” 遇到。
我看不到可以应用于所有行的规则,但是通过这两个示例,我们可以做到:
line1 = "D Staph. aureus Ps. aeruginosa E. coli ATCC Ser. Asp. Cand. albicans"
line2 = "a ATCC 6538, ATCC 9027, Ps. 8739, Ent. marcescens brasiliensis ATCC 10231,"
for line in (line1, line2):
if line[0] == "D":
list = []
for s in line.split():
if "." in s:
list.append(s)
elif list:
list[-1] = f"{list[-1]} {s}"
print(list)
if line[0] == "a":
count = 0
list = []
for s in line2[3:]:
if count % 15 == 0 or count == 0:
list.append(s)
if len(list) > 1: list[-2] = list[-2].rstrip()
else:
list[-1] = f"{list[-1]}{s}"
count += 1
print(list)
输出:
['Staph. aureus', 'Ps. aeruginosa', 'E. coli ATCC', 'Ser.', 'Asp.', 'Cand. albicans']
['ATCC 6538,', 'ATCC 9027, Ps.', '8739, Ent.', 'marcescens', 'brasiliensis', 'ATCC 10231,']
看起来很可怕,但希望能提供一些想法。:)
推荐阅读
- python - 如何避免 torch.cat 的“RuntimeError:LoadLibraryA 中的错误”?
- c# - 如何从列表中更新数据库对象中的数据(实体框架)
- angular - 在服务中找不到共享功能
- zend-framework - 如何在学说迁移中从旧数据库中选择数据并将其插入新数据库?
- java - com.sun:tools:jar 的 dependency.systemPath' 必须指定绝对路径,但为 ${tools.jar}
- java - 使用 ListView 制作排行榜
- python - 为什么我不能将我的 python 类保存到 JSON 文件中?
- postgresql - 通过大量 ID 获取记录的最佳性能方法
- typescript - 运行 tsc 命令什么都不做,忽略 tsconfig 文件?
- html - 访问组件内的 innerText