解析EDGAR文件

时间:2012-11-22 00:34:33

标签: python parsing python-2.7 sgml

我想使用python2.7从EDGAR文件中删除任何不是文档文本的内容(可在线获取.txt文件)。这里有一个文件的例子:

Example

EDGAR从此文件的第48页开​​始提供其文档类型定义:

DTD

我的程序的第一部分将EDGAR在线数据库中的.txt文件转换为我称为“parseme.txt”的本地文件。我想知道的是如何使用DTD来解析.txt文件。我会使用像BeautifulSoup这样的罐装解析模块来完成工作,但EDGAR的格式看起来很独特,我希望避免使用大型正则表达式来完成工作。

import os
filename = 'parseme.txt'
with open(filename) as f:
    lines = f.readlines()

我的问题与Parse SGML with Open Arbitrary Tags in Python 3Use lxml to parse text file with bad header in Python的问题有关,但我相信我的问题与python2.7有关并且我不关心标题 - 我只关心文件的文本。

4 个答案:

答案 0 :(得分:4)

查看OpenSP toolkit,其中包含处理SGML文件的程序。您最简单的选择可能是使用osx程序获取输入文件的XML版本,之后您可以使用XML处理工具。

首先可能会有一些设置,因为OpenSP软件包没有附带EDGAR DTD或其SGML声明(第48页的参考资料的第一部分,从<!SGML "ISO 8879-1986"开始) 。您必须将它们作为文本文件获取,并将它们添加到SP解析器可以找到它们的目录中。

更新This document似乎是一个更新的版本。然而,随意的谷歌搜索并没有立即出现任何机器可处理的版本。因此您可能需要从PDF中复制粘贴。

但是,如果你这样做,你将不得不删除一些无关的格式:似乎有分页符指示符,标记为“C-1”,“C-2”,依此类推。它们不是SGML的一部分,需要删除。

您可以将SGML声明和EDGAR DTD添加到目录中(在这种情况下,DTD文件应该只包含[after <!DOCTYPE submission中的部分和最后的匹配]或者您可以创建一个“prolog”文件,由两个部分组成(即包括<!DOCTYPE submission []>)并在prolog和SGML文件中运行工具箱中的任何程序 - 即将两个名称放在命令上第一行使用prolog文件,以便解析器以正确的顺序读取这两个文件。要了解发生了什么,您需要知道SGML解析器需要三个信息用于解析:SGML声明用于设置一些环境和处理参数,然后是DTD来描述文档的结构约束,最后是文档本身

答案 1 :(得分:4)

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

答案 2 :(得分:1)

下面的链接是一个将EDGAR文件解析为SQLite数据库的库。它包含从EDGAR FPT站点提取Form10k和Form8Qk文件多年的功能,并将它们加载到SQLite DB表中的规范化格式中。考虑到文件很难遵守标准,编写自己的解析脚本将是一项重大任务。类似于下面的库和代码将加载所需季度的文件,然后您可以在该表中查询您正在寻找的数据。

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/

答案 3 :(得分:-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

最后你可以通过解析归档获得项目

归档 <- try(parse_text_filing(content_text))