2017-05-08 142 views
1

我试图通过使用Python的BeautifulSoup或HTMLParser从SEC的EDGAR系统上的10-K报告(例如公司的代理报告)中提取“唯一的”文本信息。然而,我正在使用的解析器似乎不能很好地适用于'txt'格式的文件,包括很大一部分无意义的符号和标签以及一些根本不需要的xbrl信息。但是,当我将解析器直接应用于'htm'格式文件时,它们或多或少地免于无意义标签的问题,解析器似乎工作得相当好。如何从html文件中删除所有不必要的标签和标志?

"""for Python 3, from urllib.request import urlopen""" 
from urllib2 import urlopen 
from bs4 import BeautifulSoup 

"""for extracting text data only from txt format""" 
txt = urlopen("https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/0001660156-16-000019.txt") 
bs_txt = BeautifulSoup(txt.read()) 
bs_txt_text = bs_txt.get_text() 
len(bs_txt_text) # 400051 

"""for extracting text data only from htm format""" 
html = urlopen("https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/f201510kzec2_10k.htm") 
bs_html = BeautifulSoup(html.read()) 
bs_html_text = bs_html.get_text() 
len(bs_html_text) # 98042 

但问题是我在靠上的位置“txt'格式的文件,而不是‘HTM’的人,所以我的问题是,有没有什么办法对付删除所有无意义的迹象并从这些文件中提取标签并仅提取文本信息作为直接从'htm'文件提取的文本信息?我对使用Python进行解析相对来说比较陌生,所以如果您对此有任何想法,这将非常有帮助。先谢谢你!

+0

这些文件('.txt'和'.htm')似乎都是某种基于SGML的东西,里面嵌入了HTML文档。 '.txt'似乎嵌入了很多HTML文档,而'.htm'只有一个。你可能想尝试一个SGML解析器而不是HTML解析器。 – user2357112

+0

或...显然它应该是基于XML的,而不是基于SGML的?在开始的地方有一个部分说“.sgml”,但[显然它是XML](https://en.wikipedia.org/wiki/XBRL)。 – user2357112

+0

尝试使用XML解析器解析它。 – user2357112

回答

0

在pyparsing wiki示例页面有一个HTML tag stripper。它不会尝试构建HTML文档,它只会查找HTML和脚本标记并将其去除。

1

处理XBRL数据的最佳方式是使用XBRL处理器,例如开源Arelle(注意:我与他们没有关系)或其他专有引擎。

然后,您可以查看具有更高抽象级别的数据。就XBRL数据模型而言,您在问题中描述的过程涉及

  1. 查找分类中文本块(textBlockItemType)的概念;
  2. 检索实例中针对这些概念报告的事实的值;
  3. 另外,获得有关它的一些元信息:谁(报告实体),时(XBRL期),什么文字是关于(概念元数据和文档)等

XBRL处理器将节省你需要努力解决整个DTS以及处理低级语法的复杂性。

第二个最恰当的方式是使用XML解析器,也许有一个XML Schema引擎以及XQuery的或XSLT,但是这将需要更多的工作,你将需要:

  • 看看XML Schema(XBRL分类标准模式)文件,递归地浏览它们并查找文本块概念,处理名称空间,链接等(XBRL处理器将您屏蔽)
  • 或者只查看实例,理想情况下是XML文件(例如,https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/zeci-20151231.xml)带有一些黑客(例如以XML元素结尾为TextBlock),但是这是在你自己的里sks而不推荐,因为这会绕过分类。

最后,你在原来的问题建议,你也可以看一下文档格式的文件(HTML等),而不是在SEC文件中的数据文件,但是在这种情况下,它失败的目的使用XBRL,即通过标签和上下文使计算机可以理解数据,并且可能会丢失与文本相关的重要上下文信息 - 有点像使用文本/十六进制编辑器打开电子表格文件。

当然,有些用例可以证明使用最后一种方法比如运行自然语言处理算法。我所说的是,这超出了XBRL的范围。