2017-05-08 92 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的範圍。

相關問題