2012-11-22 3 views
6

python2.7을 사용하여 EDGAR 파일 (.txt 파일로 온라인에서 사용할 수 있음)에서 문서의 텍스트가 아닌 것을 제거하고 싶습니다. 파일이 어떻게 생겼는지의 예는 여기에 있습니다 :EDGAR 파일 구문 분석

DTD

내 프로그램의 첫 번째 부분은 가져옵니다

Example

EDGAR이 파일의 48 페이지에서 시작 자사의 문서 형식 정의를 제공합니다 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에 관련된 I 별개 믿고 내가 헤더에 관심이 아니에요있다 - 나는의 텍스트 단지 걱정 파일.

+0

여기 파이썬 버전이별로 중요하지 않다고 생각합니다. 링크 된 질문에 대한 답변에서 제공된 아이디어를 시도 했습니까? 정확히 어디서 붙어 있니? – mzjn

답변

4

SGML 파일을 처리하는 프로그램이있는 OpenSP toolkit을보십시오. 가장 간단한 방법은 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 파일은 [<!DOCTYPE submission 뒤의 [<!DOCTYPE submission] 뒤에있는 부분 만 포함해야합니다). 또는 "프롤로그 "파일 (예 : <!DOCTYPE submission []> 포함)을 구성하고 프롤로그 및 SGML 파일의 툴킷에서 프로그램을 실행하십시오. 즉, 프롤로그 파일과 함께 명령 줄에 두 이름을 모두 넣으십시오. 파서는 올바른 순서로 두 파일을 읽습니다. 무슨 일이 일어나고 있는지 이해하려면 SGML 파서가 구문 분석에 필요한 세 가지 정보, 즉 환경 및 처리 매개 변수를 설정하는 SGML 선언, 문서의 구조적 제약 조건을 설명하는 DTD, 마지막으로 문서 자체가 필요하다는 것을 알아야합니다. .

+0

나는 연결된 질문 중 하나에 [비슷한 대답] (http://stackoverflow.com/a/12534420/407651)을 올렸다. 그러나 나는 어떤 피드백도받지 못했다. – mzjn

+0

이러한 PEM으로 캡슐화 된 메시지는 EDGAR 파일로 보이지 않습니다. 오히려 그것들은 서신 자료실에서 가져온 것처럼 보입니다. 관련 DTD는 다른 곳에 있어야합니다. – arayq2

1

아래 링크는 EDGAR 파일을 SQLite DB로 구문 분석하는 라이브러리입니다. 여기에는 Formitek 및 Form8Qk 파일을 EDGAR FPT 사이트에서 가져 와서 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/

+0

대부분의 링크 인 대답은 여러 가지 이유로 SO 측에서 권장하지 않습니다. 다른 사용자를 돕기 위해 링크의 중요한 측면을 바꿔 말할 수 있습니까? – chrislondon

+2

링크가 비밀번호를 요구하는 것 같습니다 – prewett

+1

링크가 404를 찾지 못하는 것 같습니다 :-) – erm3nda

4

pysec 프로젝트는 유망한 보인다. Edgar 인덱스를 다운로드하고 XBRL에서 특정 파일을 다운로드하고 재무 매개 변수를 추출 할 수있는 기본적인 Django 앱입니다.