2015-09-05 19 views
7

Bir belgede hangi sayfaların bir python sözlüğünde/listede saklandığım belirli bir sözcükte bulunduğunu bulmak için zarif bir çözüm arıyorum.Belgedeki sayfa (larda) bulunan kelime bulma

İlk olarak .docx biçimini bir giriş olarak kabul ettim ve bir arama işlevi olan PythonDocx'a baktım, ancak docx/xml biçiminde gerçekten bir sayfa niteliği bulunmuyor. Belgeyi ayrıştırırsam xml ağacında <w:br w:type="page"/> örneğini arayabilirdim ancak maalesef bunlar zorunlu olmayan sayfa sonları göstermiyor.

Dosyaları önce PDF'ye dönüştürmeyi ve belge sayfalarını ayrıştırmak için PDFminer gibi bir şey kullandığımı bile düşündüm.

docx oluşturan xml dosyalarını ayrıştırma bir dize için bir .docx belgesini aramak ve onu

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

Bence aradığın şey bu: [link] (http://stackoverflow.com/questions/12571905/finding-on-which-page-a-search-string-is-located-in -a-pdf-document-using-python) – Roxy

+0

@birgit Hala bu konuyla ilgili bir çözüm mü arıyorsunuz? – mabe02

+0

@ mabe02 Henüz bir çalışma çözümü bulamadım:/ama ilgilenecek – birgit

cevap

2

gibi gerçekleşir sayfaları dönmek için herhangi bir basit çözüm var mı

En büyük meydan okuma gibi görünüyor Sorunuzda, bir doküman sayfasını sayfaya göre nasıl ayrıştırabileceğiniz anlatılmaktadır. Bir kelime belgesinin This answer her zaman aynı değildir ve kenar boşluklarına, kağıt sayfası ayarlarına, açmak için kullandığınız uygulamaya vb. Bağlıdır. Bu amaçla herhangi bir komut dosyasının doğruluğu konusunda iyi bir mantık google group adresinde bulunabilir. Bir neredeyse% 100 doğru memnun eğer

Ancak, bu google group önerildiği üzere bir çözüm bulmaya başlar: Ben .docx dosya halletmek ve docProps/app.xml ayıklayabileceğinden bulundu

, daha sonra XML'yi <Pages></Pages> öğesini almak için ElementTree ile ayrıştırın. Çoğu zaman bu sayının doğru olduğunu buldum, ancak bu öğedeki sayının doğru olmadığı birkaç örnek gördüm.

Kullanım Win32com.Client

başka bir yaklaşım, onu sayfalandırmak, dosyayı açmak için win32com.client kullanmak aramanızı yapmak ve sonra istediğiniz formatta sonuçları döndürmek için olabilir.

Sen this answer sentaks bir örnek bulabilirsiniz:

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) 

Ayrıca find ilgili this answer için bir göz atın ve win32com.client kullanarak bir Word dokümanında yerini alabilir.

+0

@birgit sorularınızı cevaplıyor mu? kullanışlı mıydı? – mabe02