项目地址:https://github.com/zhongqianli/pdf_paper_rename
需求
从arxiv下载的pdf文档是以时间戳命名的,需要重命名文件,然而直接复制标题重命名文件时,在Windows系统上会报错,因为它不支持一些特殊字符。 为了提升重命名文档的效率,本项目开发了可批量重命名pdf文档的脚本。除了arxiv下载的pdf文档,其他来源的pdf文档应该也可以使用。
Windows文件名不支持的特殊字符为英文输入状态的/😗?"<>|
不可转换的字符为*|
无法近似转换的字符为/
可近似转换的字符为:?"<>,对应的中文输入状态的、:?“《》,简单处理全部替换成"_"
代码及用法
python3 pdf_paper_rename.py --data ./data --output ./output
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar, LTAnno
def get_paper_title(filename):
title = ""
# 标题通常在第一页,故只循环一次
for page_layout in extract_pages(filename):
for element in page_layout:
if isinstance(element, LTTextContainer):
for text_line in element:
if text_line.x1 - text_line.x0 < 30:
continue
text_line_str = ""
is_title = False
for character in text_line:
if isinstance(character, LTChar):
text = character.get_text()
font_size = character.size
# 经验值
if font_size > 14.3:
is_title = True
text_line_str += text
elif isinstance(character, LTAnno):
text = character._text
text_line_str += text
if is_title:
if len(title) == 0:
title = text_line_str.strip("\n")
else:
title = "{} {}".format(title, text_line_str).strip("\n")
break
return title.strip()
if __name__ == '__main__':
filename = "data/arxiv.pdf"
title = get_paper_title(filename)
print("title:\n{}".format(title))