寻求如何从多个文本文件中提取项目以构建字典的建议。
这个文本文件:https://pastebin.com/Npcp3HCM
被手工转换成了所需的数据结构:https://drive.google.com/file/d/0B2AJ7rliSQubV0J2Z0d0eXF3bW8/view
有成千上万个这样的文本文件,它们可能具有不同的章节标题,如这些示例所示:
我开始阅读这些文件。
from glob import glob
txtPth = '../tr-txt/*.txt'
txtFiles = glob(txtPth)
with open(txtFiles[0],'r') as tf:
allLines = [line.rstrip() for line in tf]
sectionHeading = ['Corporate Participants',
'Conference Call Participiants',
'Presentation',
'Questions and Answers']
for lineNum, line in enumerate(allLines):
if line in sectionHeading:
print(lineNum,allLines[lineNum])
我的想法是查找存在标题的行号,然后尝试提取这些行号之间的内容,然后剥离分隔符(如破折号)。但这并没有起作用,我卡在了试图创建这种类型字典上,以便稍后可以对挖掘出来的项目运行各种自然语言处理算法。
{file-name1:{
{date-time:[string]},
{corporate-name:[string]},
{corporate-participants:[name1,name2,name3]},
{call-participants:[name4,name5]},
{section-headings:{
{heading1:[
{name1:[speechOrderNum, text-content]},
{name2:[speechOrderNum, text-content]},
{name3:[speechOrderNum, text-content]}],
{heading2:[
{name1:[speechOrderNum, text-content]},
{name2:[speechOrderNum, text-content]},
{name3:[speechOrderNum, text-content]},
{name2:[speechOrderNum, text-content]},
{name1:[speechOrderNum, text-content]},
{name4:[speechOrderNum, text-content]}],
{heading3:[text-content]},
{heading4:[text-content]}
}
}
}
挑战在于不同的文件可能有不同的标题和标题数量。但是总会有一个名为“演示”的部分,并且很可能有“问答”部分。这些部分标题始终由一串等于号分隔。不同发言人的内容始终由破折号字符串分隔。Q&A部分的"演讲顺序"用方括号中的数字表示。参与者在文档开头始终用他们的名字之前的星号表示,并且他们的职称始终在下一行。欢迎提出如何解析文本文件的任何建议。理想的帮助是提供关于如何为每个文件生成此类字典(或其他适当的数据结构)的指导,然后将其写入数据库。
谢谢
--编辑--
其中一个文件如下:https://pastebin.com/MSvmHb2e
其中,“问答”部分被错误地标记为“演示”,没有其他“问答”部分。
最后一个示例文本:https://pastebin.com/jr9WfpV8
dict
对象中,因为您提到可能有大量的文本文件需要解析,所以在运行时,由于dict
对象的大小增加,Python进程将花费更多的时间来更新dict
对象,并且如果要处理一些非常大的文件,则可能会出现内存不足的情况。我建议使用一些DBMS
来存储这种数据。 - ZdaR