从参考列表

时间:2018-03-30 09:40:27

标签: python regex python-3.x

我已经从几个科学的pdf文件中解析了文本。所有这些文件最后都包含一个引用列表,其中列出了作者及其出版物,以及它们发布的时间和地点。此外,文中还有交叉引用。

例如:

  

(' 1',' I. Altintas,C。Berkley,E。Jaeger,M。Jones,B。Lud-scher和S. Mock.Kepler:一个可扩展的系统设计科学工作流程的执行。在SS-DBM中,第21-23页,2004年。')

与另一个文本不同:

  

(' 1',' G. Antoniol,G。Canfora,G。Casazza,A。DeLucia和E. Merlo,“恢复代码与文档之间的可追溯性链接”,IEEETrans。 Software Eng。,vol.28,no.10,pp.970-983,2002年10月。')

我能够识别正则表达式,除了完整匹配之外我还有2个捕获组:

r'\(\'(\d+)\'\,\s\'(.*?\')\)'

第一组我可以用来获取参考号,以匹配文字中的交叉引用

第二剩下的所有其他内容,我想识别作者标题,无论解析格式如何,都可以从中发布。

稍后,我想使用这些值来编写带有author + title.txt名称的单独.txt文件,并将文本中的交叉引用附加到每个文件中。

这就是我现在所拥有的:

for txt in os.listdir(txtDir):
    textFile = open(txtDir + txt, "r", encoding='utf-8')
    text = textFile.read()
    sents = nltk.sent_tokenize(text)
    references = re.compile(r'\(\'(\d+)\'\,\s\'(.*?\')\)', re.MULTILINE)
    line_list = []
    number_list = []
    publication_list = []
    ref_list = []

    for line in references.finditer(text):
            number, publication = line.groups()
            number_list.append(number)
            publication_list.append(publication)
            ref_list.append(line)

            for number in number_list:
                    number = number.replace(number, "["+number+"]")
                    for count, line in enumerate(sents):
                            line_list.append(line) 
                            if number in line and "]" not in line_list[count-1]:
                                    f = open(publication+".txt", "ab+")
                                    f.write(line.encode("utf-8"))
                                    f.close()

当我尝试使用mode =" a +"创建一个文件时,它给出了UnicodeEncodeError,对于建议我将其更改为字节。

它没有给我一个UnicodeEncodeError,它现在给了我另一个:

  

f = open(作者+" .txt"," ab +")

OSError: [Errno 22] Invalid argument:" A. Yun Chung Liu,“过采样和欠采样对分类不平衡文本数据集的影响”,硕士论文,http://www。局域网。 ECE。 utexas。 edu / aliu / papers / aliu_ masters_thesis。 pdf,2004。J. Cleland-Huang,R。Settimi,X。Zou和P. Solc,“非功能性要求的检测和分类,应用于早期方面”,Proc。要求工程CONF。 (RE '06),第36-45页,2006年。' .txt"

目前该出版物除了参考文献中的数字之外还有其他内容,我想将其切换为作者+ title.txt ,我希望这也能解决上面的错误

我很欣赏每一项改进建议!

1 个答案:

答案 0 :(得分:0)

管理以创建所需的捕获组:

r'\(\'(\d+)\'\,\s\'(.*?\“|.*?\:)(.*?\”|.*?\.)(.*?\')\)'

然后我可以写出文件,它看起来正确,因为这几个出现。