2012-11-22 26 views
6

मैं किसी भी चीज़ को हटाने के लिए python2.7 का उपयोग करना चाहता हूं जो EDGAR फाइलिंग से दस्तावेज़ों का पाठ नहीं है (जो .txt फ़ाइलों के रूप में ऑनलाइन उपलब्ध हैं)। क्या फाइलों की तरह लग रही का एक उदाहरण यहाँ है:पार्सिंग EDGAR फाइलिंग

DTD

मेरा कार्यक्रम के पहले भाग हो जाता है:

Example

एडगर इस फ़ाइल का पेज 48 से शुरू होने वाले अपने दस्तावेज़ प्रकार परिभाषाएं प्रदान करता है EDGAR ऑनलाइन डेटाबेस से .txt फ़ाइल को स्थानीय फ़ाइल में "parseme.txt" नाम दिया गया है। मैं क्या जानना चाहता हूं कि .txt फ़ाइल को पार्स करने के लिए डीटीडी का उपयोग कैसे करें। मैं नौकरी के लिए सुंदर सूप जैसे डिब्बाबंद पार्सिंग मॉड्यूल का उपयोग करूंगा, लेकिन ईडीजीएआर का प्रारूप अद्वितीय दिखाई देता है, और मुझे नौकरी पाने के लिए एक बड़ी रेगेक्स से बचने की उम्मीद है।

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

मेरा प्रश्न Parse SGML with Open Arbitrary Tags in Python 3 और Use lxml to parse text file with bad header in Python पर प्रश्न से संबंधित है, लेकिन मैं अलग मानना ​​है के रूप में मेरे सवाल python2.7 से संबंधित है और मैं शीर्ष लेख के साथ संबंध नहीं कर रहा हूँ कर रहा है - मैं तो बस के पाठ के साथ चिंतित हूँ फ़ाइल।

+0

मुझे नहीं लगता कि पाइथन का संस्करण यहां बहुत मायने रखता है। क्या आपने लिंक किए गए सवालों के जवाब में दिए गए किसी भी विचार को आजमाया था? आप वास्तव में कहाँ अटक गए हैं? – mzjn

उत्तर

4

OpenSP toolkit पर देखें, जिसमें प्रोग्राम एसजीएमएल फाइलों को संसाधित करने के लिए हैं। आपका सबसे आसान विकल्प शायद इनपुट फ़ाइल का एक्सएमएल संस्करण प्राप्त करने के लिए osx प्रोग्राम का उपयोग करना है, जिसके बाद आप एक्सएमएल प्रोसेसिंग टूल्स का उपयोग कर सकते हैं।

पहले कुछ करने के लिए कुछ सेटअप हो सकते हैं, क्योंकि OpenSP पैकेज EDGAR DTD या इसकी एसजीएमएल घोषणा (पृष्ठ 48 पर आपके संदर्भ में सामग्री का पहला भाग <!SGML "ISO 8879-1986" से शुरू नहीं होता है) के साथ नहीं आता है। आपको इन्हें टेक्स्ट फाइलों के रूप में प्राप्त करना होगा और उन्हें कैटलॉग में जोड़ना होगा जहां एसपी पार्सर उन्हें ढूंढ सकता है।

अद्यतन: This document एक अधिक अद्यतित संस्करण प्रतीत होता है। एक आकस्मिक Google खोज किसी भी मशीन को तुरंत संसाधित करने योग्य संस्करणों को चालू नहीं करती है। तो आपको पीडीएफ से कॉपी-पेस्ट करना पड़ सकता है।

हालांकि, यदि आप ऐसा करते हैं, तो कुछ अपर्याप्त स्वरूपण होंगे जिन्हें आपको निकालना होगा: पृष्ठ ब्रेक संकेतक होने लगते हैं, "सी -1", "सी -2", और इसी तरह लेबल किया जाता है। वे एसजीएमएल का हिस्सा नहीं हैं और उन्हें हटाने की जरूरत है।

आप या तो एसजीएमएल घोषणा और ईडीजीएआर डीटीडी को कैटलॉग में जोड़ सकते हैं (जिस स्थिति में डीटीडी फ़ाइल में केवल [के बाद और अंत में मिलान] के अंदर हिस्सा होना चाहिए) या आप "prolog" बना सकते हैं "फ़ाइल दोनों भागों के साथ मिलकर है (यानी <!DOCTYPE submission [ और ]> सहित) और प्रोलॉग और आपकी एसजीएमएल फ़ाइल पर टूलकिट में किसी भी प्रोग्राम को चलाएं - यानी दोनों नामों को कमांड लाइन पर पहले प्रोलॉग फ़ाइल के साथ रखें, ताकि पार्सर दोनों फ़ाइलों को सही क्रम में पढ़ेगा। यह समझने के लिए कि आपको क्या हो रहा है, आपको यह जानने की जरूरत है कि एक एसजीएमएल पार्सर को पार्स के लिए तीन टुकड़ों की जानकारी की आवश्यकता होती है: कुछ पर्यावरण और प्रसंस्करण मानकों को सेट करने के लिए एक एसजीएमएल घोषणा, फिर एक दस्तावेज़ पर संरचनात्मक बाधाओं का वर्णन करने के लिए एक डीटीडी, और अंततः दस्तावेज़ स्वयं ।

+0

मैंने एक समान उत्तर पोस्ट किया [http://stackoverflow.com/a/12534420/407651) लिंक किए गए प्रश्नों में से एक के लिए। लेकिन मुझे कोई प्रतिक्रिया नहीं मिली है। – mzjn

+0

ये पीईएम-एन्सेप्लेटेड संदेश EDGAR फाइलिंग की तरह दिखते नहीं हैं। बल्कि उन्हें पत्राचार संग्रह से लिया जाना प्रतीत होता है। प्रासंगिक डीटीडी कहीं और होना चाहिए। – arayq2

1

नीचे दिया गया लिंक एक पुस्तकालय है जो एक एसक्यूएलएट डीबी में ईडीजीएआर फाइलिंग को पार करता है। इसमें EDGAR FPT साइट से Form10k और Form8Qk फ़ाइलों को खींचने के लिए कार्यक्षमता शामिल है जो आप निर्दिष्ट करते हैं और उन्हें SQLite डीबी तालिकाओं में सामान्यीकृत प्रारूप में लोड करते हैं। फाइलिंग के लिए मानक का खराब पालन करने पर विचार करते हुए, अपनी खुद की पार्सिंग स्क्रिप्ट लिखना एक महत्वपूर्ण उपक्रम होगा। नीचे दी गई लाइब्रेरी और कोड वांछित तिमाही के लिए फाइलिंग लोड करेंगे और वहां से आप बस उस डेटा के लिए टेबल से पूछ सकते हैं जो आप चाहते हैं।

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 परियोजना होनहार लग रहा है। यह एक मूल Django ऐप है जो एडगर इंडेक्स डाउनलोड करता है और फिर आपको विशिष्ट फाइलिंग डाउनलोड करने और एक्सबीआरएल से वित्तीय पैरामीटर निकालने की अनुमति देता है।