2017-05-08 1 views
1

저는 Python의 BeautifulSoup 또는 HTMLParser를 사용하여 SEC의 EDGAR 시스템에서 10K 보고서 (예 : 회사의 프록시 보고서)에서 텍스트 정보 만 추출하려고합니다. 그러나 내가 사용하고있는 파서는 무의미한 표지판과 태그의 상당 부분을 포함하여 'xxtl'형식의 파일에 제대로 작동하지 않는 것처럼 보이며 일부 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 

그러나 문제는 내 질문은 그래서, HTM '사람'여부에, txt' 형식 파일 '에 의존 할 수있는 위치에 오전, 모든 의미 흔적을 제거하는 처리 할 수있는 방법이있다 파일에서 태그를 추출하고 'htm'파일에서 직접 추출한 텍스트 정보 만 추출하면됩니까? 필자는 Python을 사용하여 파싱하는 것이 상대적으로 새롭기 때문에 이에 대한 아이디어가 있다면 큰 도움이 될 것입니다. 미리 감사드립니다.

+0

이 파일들 ('.txt'과'.htm')은 내부에 HTML 문서가 내장 된 일종의 SGML 기반의 것으로 보입니다. '.txt'에는 많은 HTML 문서가 내장되어있는 것처럼 보입니다. 반면 .htm에는 단 하나의 문서 만 있습니다. HTML 파서 대신 SGML 파서를 사용해 볼 수도 있습니다. – user2357112

+0

또는 ... 분명히 그것은 SGML 기반이 아닌 XML 기반이어야합니다. 시작 부분에는 ".sgml"이 있지만 XML은 분명히 있습니다 (https://en.wikipedia.org/wiki/XBRL). – user2357112

+0

XML 파서로 파싱 해보십시오. – user2357112

답변

0

pyparsing 위키 예제 페이지에는 HTML tag stripper이 있습니다. HTML 문서를 만들려고하지 않고 HTML 및 스크립트 태그를 찾아서 제거합니다.

1

XBRL 데이터를 처리하는 가장 좋은 방법은 오픈 소스 Arelle (참고 : 나는 그들과 제휴 관계가 없음) 또는 기타 독점 엔진과 같은 XBRL 프로세서를 사용하는 것입니다.

그런 다음 높은 수준의 추상화로 데이터를 볼 수 있습니다. XBRL 데이터 모델의 관점에서, 당신이 질문에 설명하는 과정은 분류에서 텍스트 블록 (textBlockItemType)입니다 개념을 찾고

  1. 을 포함한다;
  2. 인스턴스에서 이러한 개념에 대해보고 된 사실 값을 검색합니다.
  3. 또한, 대한 몇 가지 메타 정보를 얻는 : (보고 기관) 등

XBRL 프로세서가 저장됩니다 텍스트에 대해 무엇인지, (XBRL 기간), (개념 메타 데이터 및 문서) 당신은 전체 DTS를 해결할뿐만 아니라 저수준 구문의 복잡성을 다루려고 노력합니다.

두 번째 가장 적절한 방법은 아마 XML 스키마 엔진뿐만 아니라 XQuery를 또는 XSLT와 함께 XML 파서를 사용하는 것입니다,하지만 당신은 하나에 필요하므로이 더 많은 작업이 필요합니다 :에서

  • 보기 XML 스키마 (XBRL 분류 스키마) 파일을 재귀 적으로 탐색하고 텍스트 블록 개념을 찾고 네임 스페이스, 링크 등을 처리합니다 (XBRL 프로세서는 사용자를 차단 함)
  • 이상적으로 보면 XML 파일 (예 : https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/zeci-20151231.xml)은 몇 가지 해킹이 있습니다 (예 : TextBlock으로 끝나는 XML 요소 가져 오기).하지만 이것은 에 있습니다. sk이 분류법을 우회하므로 권장하지 않습니다.

마지막으로 원래 질문에서 제안하는 것처럼 SEC 파일링의 데이터 파일이 아닌 문서 형식 파일 (HTML 등)을 볼 수도 있지만이 경우 목적을 뛰어 넘습니다. XBRL은 태그와 컨텍스트 덕분에 컴퓨터가 데이터를 이해할 수있게 해주 며, 텍스트와 관련된 중요한 컨텍스트 정보를 놓칠 수 있습니다. 텍스트/16 진 편집기로 스프레드 시트 파일을 여는 것과 같습니다.

물론 자연어 처리 알고리즘을 실행하는 것과 같은 마지막 접근법을 사용하는 것이 타당한 유스 케이스가 있습니다. 내가 말하고자하는 것은 이것이 XBRL의 범위를 벗어나는 것이다.

관련 문제