我已经从几个科学的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 ,我希望这也能解决上面的错误
我很欣赏每一项改进建议!
答案 0 :(得分:0)
管理以创建所需的捕获组:
r'\(\'(\d+)\'\,\s\'(.*?\“|.*?\:)(.*?\”|.*?\.)(.*?\')\)'
然后我可以写出文件,它看起来正确,因为这几个出现。