解析EDGAR文件提交

9
我想使用Python2.7从EDGAR提交的文件中删除非文本内容(这些文件以.txt格式在线提供)。以下是文件示例: Example EDGAR在此文件的第48页开始提供其文档类型定义: DTD 我的程序的第一部分将.txt文件从EDGAR在线数据库获取到名为“parseme.txt”的本地文件中。我想知道如何使用DTD解析.txt文件。我可以使用像BeautifulSoup这样的现成解析模块,但EDGAR的格式似乎很独特,我希望避免使用大型正则表达式来完成任务。
import os
filename = 'parseme.txt'
with open(filename) as f:
    lines = f.readlines()

我的问题与在Python 3中使用Open Arbitrary Tags解析SGML使用lxml解析带有错误头的文本文件有关,但我认为我的问题与它们不同,因为我的问题涉及python2.7,并且我不关心头文件 - 我只关心文件的文本内容。


我认为Python的版本在这里并不重要。你尝试过链接问题答案中提供的任何想法吗?你具体卡在哪里了? - mzjn
4个回答

3
看看 OpenSP 工具包,其中有处理 SGML 文件的程序。你最简单的选择可能是使用 osx 程序获取输入文件的 XML 版本,之后再使用 XML 处理工具。
可能需要先进行一些设置,因为 OpenSP 包不带有 EDGAR DTD 或其 SGML 声明(参见第48页的参考资料的前半部分,以 <!SGML "ISO 8879-1986" 开头)。您将需要将它们作为文本文件获取并添加到 SP 解析器可以找到它们的目录中。 更新这个文件 似乎是一个更新版本。然而,随意的谷歌搜索没有立即可用的机器可处理的版本。所以你可能需要从 PDF 中复制粘贴。
但是,如果您这样做,就会有一些不必要的格式化内容需要删除:似乎有页面断点指示符,标记为“C-1”,“C-2”等等。它们不是 SGML 的一部分,需要删除。
您可以将 SGML 声明和 EDGAR DTD 添加到目录中(在这种情况下,DTD 文件应该只有在 <!DOCTYPE submission 之后的部分和匹配的 ] 结尾),或者您可以创建一个 "prolog" 文件,其中包含两个部分(即包括 <!DOCTYPE submission []>),并在工具包中运行任何程序来处理 prolog 和 SGML 文件 - 即将两个文件名放在命令行上,并将 prolog 文件放在前面,以便解析器会按照正确的顺序读取这两个文件。要理解正在发生的事情,您需要知道 SGML 解析器需要三个信息才能进行解析:SGML 声明用于设置一些环境和处理参数,然后是 DTD 用于描述文档的结构约束,最后是文档本身。

我在其中一个相关问题的链接中发布了类似的答案,但是我没有收到任何反馈。 - mzjn
这些PEM封装的消息看起来不像EDGAR提交。相反,它们似乎是从通信档案中提取的。相关的DTD必须在其他地方。 - arayq2

3

pysec 项目看起来很有前途。这是一个基本的 Django 应用程序,它可以下载 Edgar 索引,然后允许您下载特定的提交,并从 XBRL 中提取财务参数。


0
下面的链接是一个将EDGAR文件解析为SQLite数据库的库。它包含从您指定的年份的EDGAR FPT网站上获取Form10k和Form8Qk文件并将它们加载到SQLite数据库表中的功能。考虑到文件遵循不良的标准,编写自己的解析脚本将是一项重大任务。该库以及类似下面的代码将加载所需季度的文件,从那里您可以简单地查询表格以获取您要查找的数据。
edgar.database.create()
# Load quarterly master index files into local sqlite db
quarters = []
#Q3 2009
quarters.add(2009,3)
#Q3 2008
quarters.add(2008,3)
edgar.database.load(quarters)

http://rf-contrib.googlecode.com/svn/trunk/ha/src/main/python/edgar/


1
在SO上,大多数情况下不鼓励回答只包含链接的内容,原因有很多。您能否转述链接中的重要方面,以帮助其他用户? - chrislondon
2
链接现在似乎需要密码。 - prewett
5
链接现在似乎返回404未找到错误 :-) - m3nda

-1

请查看来自edgarWebR(https://mwaldstein.github.io/edgarWebR/)的两个函数:

parse_submission()

parse_filing()

parse_submission()可用于您从edgar获取的SGML文档。

parsed_submission <- try(parse_submission(my_file_name))

然后从解析的提交中获取文本:

tmp <- parsed_submission[parsed_submission$TYPE=='10-K',]

content_text <- tmp$TEXT

最后,通过解析文件可以获得项目。

filing <- try(parse_text_filing(content_text))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接