论文自动写作之自动添加参考文献

论文自动写作之自动添加参考文献

  • 一、成果展示
  • 二、简介
  • 三、实现过程
    • (一)mammoth包将docx转为html
    • (二)使用xpath提取
    • (三)python-docx将脚注写入参考文献
    • (四)完整的代码

一、成果展示

二、简介

这是我试图将论文写作进行自动化处理的一个记录,这是开始的第一篇,根据已经写好的脚注进行参考文献的添加,使得自己不用一个一个的复制脚注到参考文献中去。在设想中不仅进行论文格式处理,如参考文献的自动添加、标题与正文字号的批量处理、脚注自动添加等形式上的问题,可能更进一步涉及实质内容例如提供词向量对可能导致文章重复率计算的的词语替换乃至使用GPT-2,GPT-3自动化写作

三、实现过程

通过脚注生成参考文献

(一)mammoth包将docx转为html

python-docx包中没有发现可以读取脚注的方法,而在csdn中也没有找到,关于脚注的提取大多都是将docx文件转为html后进行提取的,因而我也是采取这种路径
mammoth可以将docx转为html即
论文自动写作之自动添加参考文献_第1张图片

转化过程为:

import mammoth
    def docx_html(input):
    """这是由于脚注无法读取"""
    """转为html"""
    with open(input, "rb") as docx_file:
        result = mammoth.convert_to_html(docx_file)
        html = result.value  # The generated HTML
        temp = self.input.split(".")[0]+".html"
        with open(temp, "a")as f:
            f.write(html)
    return temp

return temp 返回的是转化后的html的路径

(二)使用xpath提取

这里比较简单,导入lxml,然后进行xpath提取即可

temp = docx_html(input)
parser = etree.HTMLParser(encoding="gbk")
text = etree.parse(temp, parser=parser)
content = text.xpath("/html/body/ol[10]//text()")
#print(content)
references = []
for i in content:
	if i == "↑" or "说明:" in i:
    	pass
    else:
        try:
        	text = i.split(";")
            for i in text:
            	references.append(i.replace("参见",""))
        except:
            references.append(i.replace("参见", ""))

这里的提取信息的标签会因为文章的长度而不同,需要自行调整;而需要剔除的内容也会由于每个人的写作习惯不同而需要调整

(三)python-docx将脚注写入参考文献

#写入docx
    document = docx.Document(self.input)
    docText2 = [paragraph.text for paragraph in document.paragraphs]
    p = document.paragraphs[len(docText2)-1]
    #document.add_page_break()  # 另起一页
    p.add_run("\n")
    p.add_run("参考文献\n")
    for i,text in enumerate(references):
        i = i+1
        p.add_run("[%d]"%i+text+"\n")
    document.save(self.input)

这里有个不太完善的地方就是“参考文献”无法使用add_heading的方法插入,只能以段落文本的方式插入,这导致参考文献需要自行调整字号以及加粗

(四)完整的代码

class Reference_Find():
def __init__(self,input):
    self.input = input



def docx_html(self):
    """这是由于脚注无法读取"""
    """转为html"""
    with open(self.input, "rb") as docx_file:
        result = mammoth.convert_to_html(docx_file)
        html = result.value  # The generated HTML
        #messages = result.messages  # Any messages, such as warnings during conversion
        temp = self.input.split(".")[0]+".html"
        with open(temp, "a")as f:
            f.write(html)
    return temp


def references_write_to_docx(self):
    """首先提取脚注,然后写入"""
    temp = self.docx_html()
    print(temp)
    parser = etree.HTMLParser(encoding="gbk")
    text = etree.parse(temp, parser=parser)
    content = text.xpath("/html/body/ol[10]//text()")
    #print(content)
    references = []
    for i in content:
        if i == "↑" or "说明:" in i:
            pass
        else:
            try:
                text = i.split(";")
                for i in text:
                    references.append(i.replace("参见",""))
            except:
                references.append(i.replace("参见", ""))
    #写入docx
    document = docx.Document(self.input)
    docText2 = [paragraph.text for paragraph in document.paragraphs]
    p = document.paragraphs[len(docText2)-1]
    #document.add_page_break()  # 另起一页
    p.add_run("\n")
    p.add_run("参考文献\n")
    for i,text in enumerate(references):
        i = i+1
        p.add_run("[%d]"%i+text+"\n")
    document.save(self.input)

项目地址 参考文献自动添加.

你可能感兴趣的:(自动化,wps,docx)