2012-11-22 36 views
6

Tôi muốn sử dụng python2.7 để xóa bất kỳ thứ gì không phải là văn bản của tài liệu từ các bản ghi EDGAR (có sẵn trực tuyến dưới dạng các tệp .txt). Một ví dụ về những gì các tập tin giống như là ở đây:Phân tích các bản ghi EDGAR

Example

EDGAR cung cấp Loại tài liệu của nó định nghĩa bắt đầu từ trang 48 của tập tin này:

DTD

Phần đầu của chương trình của tôi được tệp .txt từ cơ sở dữ liệu trực tuyến EDGAR vào tệp cục bộ mà tôi đã đặt tên là "parseme.txt". Những gì tôi muốn biết là làm thế nào để sử dụng DTD để phân tích cú pháp tập tin .txt. Tôi sẽ sử dụng một mô-đun phân tích đóng hộp như BeautifulSoup cho công việc, nhưng định dạng của EDGAR xuất hiện độc đáo, và tôi hy vọng sẽ tránh được một regex lớn để hoàn thành công việc.

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

Câu hỏi của tôi liên quan đến câu hỏi tại Parse SGML with Open Arbitrary Tags in Python 3 and Use lxml to parse text file with bad header in Python nhưng tôi tin riêng biệt như câu hỏi của tôi liên quan đến python2.7 và tôi không quan tâm đến tiêu đề - Tôi chỉ quan tâm đến nội dung của tập tin.

+0

Tôi không nghĩ phiên bản Python quan trọng ở đây. Bạn có thử bất kỳ ý tưởng nào được cung cấp trong câu trả lời cho các câu hỏi được liên kết không? Bạn bị mắc kẹt ở đâu? – mzjn

Trả lời

4

Nhìn vào số OpenSP toolkit, trong đó có các chương trình xử lý tệp SGML. Tùy chọn đơn giản nhất của bạn có lẽ là sử dụng chương trình osx để lấy phiên bản XML của tệp đầu vào, sau đó bạn có thể sử dụng các công cụ xử lý XML.

Có thể có một số thiết lập để thực hiện trước, vì gói OpenSP không đi kèm với EDGAR DTD hoặc khai báo SGML (phần đầu tiên trong tài liệu tham khảo ở trang 48, bắt đầu bằng <!SGML "ISO 8879-1986"). Bạn sẽ phải lấy những tệp này dưới dạng tệp văn bản và thêm chúng vào danh mục nơi trình phân tích cú pháp SP có thể tìm thấy chúng.

CẬP NHẬT: This document có vẻ là một phiên bản cập nhật hơn. Một tìm kiếm google bình thường không bật lên bất kỳ phiên bản máy ngay lập tức processable, mặc dù. Vì vậy, bạn có thể phải sao chép-dán từ PDF.

Tuy nhiên, nếu bạn làm như vậy, sẽ có một số định dạng không liên quan bạn sẽ phải xóa: có vẻ như chỉ báo ngắt trang, được gắn nhãn "C-1", "C-2", v.v. Chúng không phải là một phần của SGML và cần phải được xóa.

Bạn có thể thêm khai báo SGML và EDGAR DTD vào danh mục (trong trường hợp này tệp DTD chỉ nên có phần bên trong [sau <!DOCTYPE submission và kết hợp] ở cuối) hoặc bạn có thể tạo "prolog" "tệp bao gồm cả hai phần với nhau (ví dụ: bao gồm <!DOCTYPE submission []>) và chạy bất kỳ chương trình nào trong bộ công cụ trên prolog và tệp SGML của bạn - tức là đặt cả hai tên trên dòng lệnh, với tệp prolog đầu tiên, sao cho trình phân tích cú pháp sẽ đọc cả hai tệp theo đúng thứ tự. Để hiểu điều gì đang xảy ra, bạn cần biết rằng một trình phân tích cú pháp SGML cần ba phần thông tin để phân tích cú pháp: một khai báo SGML để đặt một số tham số môi trường và xử lý, sau đó là một DTD để mô tả các ràng buộc cấu trúc trên một tài liệu. .

+0

Tôi đã đăng [câu trả lời tương tự] (http://stackoverflow.com/a/12534420/407651) đến một trong các câu hỏi được liên kết. Nhưng tôi chưa nhận được bất kỳ phản hồi nào. – mzjn

+0

Các tin nhắn đóng gói PEM này không giống như các bản ghi EDGAR. Thay vào đó chúng dường như được lấy từ kho lưu trữ thư từ. DTD liên quan phải ở nơi khác. – arayq2

1

Liên kết bên dưới là thư viện phân tích các bản ghi EDGAR thành một DB SQLite. Nó chứa chức năng để lấy các bản mẫu Form10k và Form8Qk từ trang web EDGAR FPT trong nhiều năm mà bạn chỉ định và tải chúng vào một định dạng chuẩn hóa trong các bảng DB SQLite. Xem xét việc tuân thủ kém tiêu chuẩn cho các hồ sơ, viết kịch bản phân tích cú pháp của riêng bạn sẽ là một cam kết quan trọng. Thư viện và mã tương tự như dưới đây sẽ tải hồ sơ cho quý mong muốn và từ đó bạn chỉ có thể truy vấn bảng cho dữ liệu bạn đang tìm kiếm.

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

Câu trả lời hầu hết là một liên kết không được khuyến khích trên SO vì nhiều lý do. Bạn có thể diễn giải các khía cạnh quan trọng của liên kết để giúp người dùng khác không? – chrislondon

+2

Liên kết dường như yêu cầu mật khẩu ngay bây giờ – prewett

+1

Liên kết dường như trả lại 404 không tìm thấy bây giờ :-) – erm3nda

4

Dự án pysec trông đầy hứa hẹn. Đó là một ứng dụng Django cơ bản tải xuống chỉ mục Edgar và sau đó cho phép bạn tải xuống các hồ sơ cụ thể và trích xuất các thông số tài chính từ XBRL.

Các vấn đề liên quan