我有一个PDF格式的邮寄参考列表。邮件列表具有非常通用的格式,即作者姓名,后跟书名。 请考虑以下示例:
美国阅读清单
民主理论
•达尔,民主理论序言
•熊彼特,资本主义,社会主义和民主(仅限介绍和第四部分)
•自由民主的制度,生活和时代
•达尔,民主及其批评者
现在我正在尝试使用pdf miner解析pdf并创建一个列表,其中第一个索引是作者名称,第二个索引是本书的名称,如下所示:
[Dahl,民主理论序言]
我正在尝试使用拆分功能,因为有一个逗号和一个后跟作者名称的空格。但是我得不到正确的结果。 有人可以帮忙吗?
def extract():
string = convert_pdf_to_txt("/Users/../../names.pdf")
lines = list(filter(bool, string.split('\n')))
for i in lines:
check.extend(i.split(','))
x=remove_numbers(check)
remove_blank= [x for x in x if x]
combine_two = [remove_blank[x:x + 2] for x in xrange(0,len(remove_blank), 2)]
print combine_two
答案 0 :(得分:2)
让我们看看这里出了什么问题。我做了一些猜测,但希望它们是相关的。
convert_pdf_to_text()
函数返回包含PDF所有文本的单个长字符串。", "
,从而生成字符串列表。根据您的示例数据,此列表看起来像这样(每个元素在这里单独一行):
Dahl
Preface to Democratic Theory(line break)(bullet)(tab)Schumpeter
Captitalism
Socialism
and Democracy (Introduction and part IV only)(line break)(bullet)(tab)Machpherson
Life and Times of Liberal Democracy(line break)(bullet)(tab)Dahl
Democracy and its Critics
因为您在", "
上拆分而不考虑数据被格式化为行的事实,所以您最终会得到每个项目中多行的内容。
filter()
迭代此列表并过滤掉所有不正确的列表。非空字符串为true,并且所有元素都是非空字符串,因此所有元素都可以通过。因此,filter()
无法执行任何操作。 你似乎想要的更像是这样:
lines = [line.split(", ", 1) for line in string.splitlines() if ", " in line]
在这里,我们首先拆分行,过滤掉任何不包含逗号空间的行,然后根据在第一个逗号空间中拆分字符串返回列表列表。