2015-09-05 6 views
7

मैं किसी दस्तावेज़ में कौन से पेज (पेजों) को खोजने के लिए एक सुरुचिपूर्ण समाधान ढूंढ रहा हूं, एक निश्चित शब्द होता है कि मैंने एक पायथन शब्दकोश/सूची में संग्रहित किया है।दस्तावेज़ में पृष्ठ (ओं) पर शब्द ढूंढना

मैंने पहली बार इनपुट के रूप में। डॉक्स प्रारूप को माना और PythonDocx पर एक नज़र डाली जिसकी एक खोज फ़ंक्शन है, लेकिन जाहिर है कि वास्तव में डॉक्स/एक्सएमएल प्रारूप में कोई पृष्ठ विशेषता नहीं है। यदि मैं दस्तावेज़ को पार्स करता हूं तो मैं xml पेड़ में <w:br w:type="page"/> घटनाओं को देख सकता हूं लेकिन दुर्भाग्य से ये गैर-मजबूर पृष्ठ ब्रेक नहीं दिखाते हैं।

मैंने फ़ाइलों को पहले पीडीएफ में कनवर्ट करने पर भी विचार किया और दस्तावेज पेज-वार को पार्स करने के लिए PDFminer जैसे कुछ का उपयोग किया।

वहां एक स्ट्रिंग के लिए एक .docx दस्तावेज़ खोज और पृष्ठों लौट ऐसा

[('foo' ,[1, 4, 7 ]), ('bar', [2]), ('baz', [2, 5, 8, 9)] 
+0

मुझे लगता है कि आप यही देख रहे हैं: [लिंक] (http://stackoverflow.com/questions/12571905/finding-on-which-page-a-search-string-is-located-in -ए-पीडीएफ-दस्तावेज़-उपयोग-पायथन) – Roxy

+0

@birgit क्या आप अभी भी इस विषय पर समाधान ढूंढ रहे हैं? – mabe02

+0

@ mabe02 मुझे अभी तक कोई समाधान समाधान नहीं मिला है:/लेकिन – birgit

उत्तर

2

पर होता है करने के लिए docx रचना एक्सएमएल फ़ाइलें पार्स किसी भी सीधा समाधान है

ऐसा लगता है कि सबसे बड़ी चुनौती आपके प्रश्न में पृष्ठ द्वारा किसी दस्तावेज़ पृष्ठ को पार्स करने में सक्षम होना है। एक शब्द दस्तावेज़ के This answer हमेशा एक जैसा नहीं होता है और यह मार्जिन, पेपर शीट सेटिंग्स, एप्लिकेशन जिसे आप इसे खोलने के लिए उपयोग करते हैं आदि पर निर्भर करता है। इस उद्देश्य के लिए किसी भी स्क्रिप्ट की शुद्धता पर एक अच्छा तर्क google group पर पाया जा सकता है।

हालांकि, अगर आप एक लगभग 100% सही से संतुष्ट किया जा सकता है, तो आप के रूप में इस google group में सुझाव दिया समाधान खोजने के लिए शुरू:

मैंने पाया कि मैं .docx फ़ाइल अनज़िप और docProps/app.xml निकाल सकते हैं, फिर <Pages></Pages> तत्व प्राप्त करने के लिए XML को ElementTree के साथ पार्स करें। मैंने पाया कि अधिकांश समय यह संख्या सटीक है, लेकिन मैंने कुछ उदाहरण देखे हैं जहां उस तत्व की संख्या सही नहीं है।

उपयोग Win32com.Client

एक और दृष्टिकोण win32com.client उपयोग करने के लिए फ़ाइल खोलने के लिए, यह पृष्ठ पर अंक लगाना, अपनी खोज को और फिर प्रारूप आप यह चाहते में परिणाम हो सकता है।

आप this answer में वाक्य रचना का एक उदाहरण देख सकते हैं:

from win32com.client import Dispatch 
#open Word 
word = Dispatch('Word.Application') 
word.Visible = False 
word = word.Documents.Open(doc_path) 

#get number of sheets 
word.Repaginate() 
num_of_sheets = word.ComputeStatistics(2) 

तुम भी खोजने के बारे में this answer को एक नजर है और win32com.client का उपयोग कर एक शब्द दस्तावेज़ में बदल सकते हैं।

+0

@birgit में दिलचस्पी होगी तो क्या यह आपके प्रश्न का उत्तर देता है? क्या यह उपयोगी था? – mabe02

संबंधित मुद्दे