annotate HocrTextServer.py @ 635:8d460ddb45b7 default tip

update digilib dirInfo-xml path.
author casties
date Fri, 06 May 2016 18:59:35 +0200
parents 7aefbddddaf9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
617
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
1 from OFS.SimpleItem import SimpleItem
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
2 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
3
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
4 import xml.etree.ElementTree as ET
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
5
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
6 import re
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
7 import logging
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
8 import urllib
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
9 import urlparse
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
10 import base64
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
11
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
12 from HocrTxtUtils import getInt, getText, getHttpData
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
13
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
14 def serialize(node):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
15 """returns a string containing an XML snippet of node"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
16 s = ET.tostring(node, 'UTF-8')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
17 # snip off XML declaration
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
18 if s.startswith('<?xml'):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
19 i = s.find('?>')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
20 return s[i+3:]
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
21
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
22 return s
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
23
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
24
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
25 class HocrTextServer(SimpleItem):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
26 """TextServer implementation for MPDL-XML eXist server"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
27 meta_type="Hocr TextServer"
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
28
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
29 manage_options=(
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
30 {'label':'Config','action':'manage_changeHocrTextServerForm'},
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
31 )+SimpleItem.manage_options
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
32
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
33 manage_changeHocrTextServerForm = PageTemplateFile("zpt/manage_changeHocrTextServer", globals())
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
34
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
35 def __init__(self,id,title="",serverUrl="http://localhost:8080/hocr", timeout=40, repositoryType='production'):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
36 """constructor"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
37 self.id=id
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
38 self.title=title
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
39 self.timeout = timeout
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
40 self.repositoryType = repositoryType
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
41
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
42 self.serverUrl = serverUrl
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
43
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
44 def getHttpData(self, url, data=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
45 """returns result from url+data HTTP request"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
46 return getHttpData(url,data,timeout=self.timeout)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
47
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
48 def getServerData(self, pn, data=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
49 """returns result from text server for method+data"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
50 url = self.serverUrl
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
51 return getHttpData(url,pn,data=data,timeout=self.timeout)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
52
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
53
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
54 def getRepositoryType(self):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
55 """returns the repository type, e.g. 'production'"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
56 return getattr(self, 'repositoryType', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
57
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
58 def getTextDownloadUrl(self, type='xml', docinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
59 """returns a URL to download the current text"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
60 docpath = docinfo.get('textURLPath', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
61 if not docpath:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
62 return None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
63
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
64 docpath = docpath.replace('.xml','.'+type)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
65 url = '%sgetDoc?doc=%s'%(self.serverUrl.replace('interface/',''), docpath)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
66 return url
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
67
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
68
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
69 def getPlacesOnPage(self, docinfo=None, pn=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
70 """Returns list of GIS places of page pn"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
71 docpath = docinfo.get('textURLPath',None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
72 if not docpath:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
73 return None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
74
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
75 places=[]
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
76 text=self.getServerData("xpath.xql", "document=%s&xpath=//place&pn=%s"%(docpath,pn))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
77 dom = ET.fromstring(text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
78 result = dom.findall(".//resultPage/place")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
79 for l in result:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
80 id = l.get("id")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
81 name = l.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
82 place = {'id': id, 'name': name}
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
83 places.append(place)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
84
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
85 return places
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
86
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
87
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
88 def getTextInfo(self, mode='', docinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
89 """reads document info, including page concordance, from text server"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
90 logging.debug("getTextInfo mode=%s"%mode)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
91 if mode not in ['toc', 'figures', '']:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
92 mode = ''
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
93 # check cached info
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
94 if mode:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
95 # cached toc-request?
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
96 if 'full_%s'%mode in docinfo:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
97 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
98
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
99 else:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
100 # no toc-request
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
101 if 'numTextPages' in docinfo:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
102 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
103
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
104 docpath = docinfo.get('textURLPath', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
105 if docpath is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
106 logging.error("getTextInfo: no textURLPath!")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
107 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
108
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
109 try:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
110 # we need to set a result set size
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
111 pagesize = 10000
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
112 pn = 1
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
113 # fetch docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
114 pagexml = self.getServerData("doc-info.xql","document=%s&info=%s&pageSize=%s&pn=%s"%(docpath,mode,pagesize,pn))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
115 dom = ET.fromstring(pagexml)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
116 # all info in tag <document>
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
117 doc = dom.find("document")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
118 except Exception, e:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
119 logging.error("getTextInfo: Error reading doc info: %s"%e)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
120 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
121
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
122 if doc is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
123 logging.error("getTextInfo: unable to find document-tag!")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
124 else:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
125 # go through all child elements
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
126 for tag in doc:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
127 name = tag.tag
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
128 # numTextPages
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
129 if name == 'countPages':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
130 np = getInt(tag.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
131 if np > 0:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
132 docinfo['numTextPages'] = np
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
133
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
134 # numFigureEntries
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
135 elif name == 'countFigureEntries':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
136 docinfo['numFigureEntries'] = getInt(tag.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
137
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
138 # numTocEntries
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
139 elif name == 'countTocEntries':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
140 # WTF: s1 = int(s)/30+1
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
141 docinfo['numTocEntries'] = getInt(tag.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
142
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
143 # numPlaces
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
144 elif name == 'countPlaces':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
145 docinfo['numPlaces'] = getInt(tag.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
146
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
147 # pageNumbers
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
148 elif name == 'pageNumbers':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
149 # contains tags with page numbers
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
150 # <pn><n>4</n><no>4</no><non/></pn>
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
151 # n=scan number, no=original page no, non=normalized original page no
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
152 # pageNumbers is a dict indexed by scan number
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
153 pages = {}
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
154 for pn in tag:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
155 page = {}
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
156 n = 0
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
157 for p in pn:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
158 if p.tag == 'n':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
159 n = getInt(p.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
160 page['pn'] = n
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
161 elif p.tag == 'no':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
162 page['no'] = p.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
163 elif p.tag == 'non':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
164 page['non'] = p.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
165
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
166 if n > 0:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
167 pages[n] = page
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
168
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
169 docinfo['pageNumbers'] = pages
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
170 #logging.debug("got pageNumbers=%s"%repr(pages))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
171
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
172 # toc
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
173 elif name == 'toc':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
174 # contains tags with table of contents/figures
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
175 # <toc-entry><page>13</page><level>3</level><content>Chapter I</content><level-string>1.</level-string><real-level>1</real-level></toc-entry>
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
176 tocs = []
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
177 for te in tag:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
178 toc = {}
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
179 for t in te:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
180 if t.tag == 'page':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
181 toc['pn'] = getInt(t.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
182 elif t.tag == 'level':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
183 toc['level'] = t.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
184 elif t.tag == 'content':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
185 toc['content'] = t.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
186 elif t.tag == 'level-string':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
187 toc['level-string'] = t.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
188 elif t.tag == 'real-level':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
189 toc['real-level'] = t.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
190
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
191 tocs.append(toc)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
192
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
193 # save as full_toc/full_figures
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
194 docinfo['full_%s'%mode] = tocs
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
195
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
196 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
197
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
198
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
199 def processPageInfo(self, dom, docinfo, pageinfo):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
200 """processes page info divs from dom and stores in docinfo and pageinfo"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
201 # assume first second level div is pageMeta
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
202 alldivs = dom.find("div")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
203
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
204 if alldivs is None or alldivs.get('class', '') != 'pageMeta':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
205 logging.error("processPageInfo: pageMeta div not found!")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
206 return
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
207
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
208 for div in alldivs:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
209 dc = div.get('class')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
210
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
211 # pageNumberOrig
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
212 if dc == 'pageNumberOrig':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
213 pageinfo['pageNumberOrig'] = div.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
214
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
215 # pageNumberOrigNorm
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
216 elif dc == 'pageNumberOrigNorm':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
217 pageinfo['pageNumberOrigNorm'] = div.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
218
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
219 # pageHeaderTitle
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
220 elif dc == 'pageHeaderTitle':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
221 pageinfo['pageHeaderTitle'] = div.text
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
222
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
223 #logging.debug("processPageInfo: pageinfo=%s"%repr(pageinfo))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
224 return
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
225
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
226
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
227 def getTextPage(self, mode="text", pn=1, docinfo=None, pageinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
228 """returns single page from fulltext"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
229
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
230
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
231 logging.debug("getTextPage Hocr mode=%s, pn=%s"%(mode,pn))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
232 # check for cached text -- but ideally this shouldn't be called twice
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
233 if pageinfo.has_key('textPage'):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
234 logging.debug("getTextPage: using cached text")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
235 return pageinfo['textPage']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
236
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
237 docpath = docinfo.get('textURLPath', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
238
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
239 docpath=docpath.replace("pages","hocr")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
240
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
241 logging.debug("getTextPage docpath= %s"%docpath)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
242 if not docpath:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
243 return None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
244
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
245 # stuff for constructing full urls
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
246 selfurl = docinfo['viewerUrl']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
247 textParams = {'document': docpath,
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
248 'pn': pn}
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
249 if 'characterNormalization' in pageinfo:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
250 textParams['characterNormalization'] = pageinfo['characterNormalization']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
251
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
252 if not mode:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
253 # default is dict
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
254 mode = 'text'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
255
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
256 logging.debug("getTextPage mode=%s, pn=%s"%(mode,pn))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
257 modes = mode.split(',')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
258 # check for multiple layers
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
259 if len(modes) > 1:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
260 logging.debug("getTextPage: more than one mode=%s"%mode)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
261
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
262 # search mode
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
263 if 'search' in modes:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
264 # add highlighting
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
265 highlightQuery = pageinfo.get('highlightQuery', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
266 if highlightQuery:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
267 textParams['highlightQuery'] = highlightQuery
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
268 textParams['highlightElement'] = pageinfo.get('highlightElement', '')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
269 textParams['highlightElementPos'] = pageinfo.get('highlightElementPos', '')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
270
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
271 # ignore mode in the following
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
272 modes.remove('search')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
273
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
274 # pundit mode
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
275 punditMode = False
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
276 if 'pundit' in modes:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
277 punditMode = True
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
278 # ignore mode in the following
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
279 modes.remove('pundit')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
280
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
281 # other modes don't combine
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
282 if 'dict' in modes:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
283 # dict is called textPollux in the backend
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
284 textmode = 'textPollux'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
285 elif 'xml' in modes:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
286 # xml mode
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
287 textmode = 'xml'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
288 textParams['characterNormalization'] = 'orig'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
289 elif 'gis' in modes:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
290 textmode = 'gis'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
291 else:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
292 # text is default mode
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
293 textmode = 'text'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
294
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
295 textParams['mode'] = textmode
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
296
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
297 logging.debug("getTextPage (textparams: %s"%textParams)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
298
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
299 try:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
300 # fetch the page
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
301 pagexml = self.getServerData(pn,urllib.urlencode(textParams))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
302 return pagexml
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
303 except Exception, e:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
304 logging.error("getTextPage: Error reading page: %s"%e)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
305 return None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
306
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
307
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
308
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
309 return None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
310
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
311 def addPunditAttributes(self, pagediv, pageinfo, docinfo):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
312 """add about attributes for pundit annotation tool"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
313 textid = docinfo.get('DRI', "fn=%s"%docinfo.get('documentPath', '???'))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
314 pn = pageinfo.get('pn', '1')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
315 # TODO: use pn as well?
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
316 # check all div-tags
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
317 divs = pagediv.findall(".//div")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
318 for d in divs:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
319 id = d.get('id')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
320 if id:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
321 d.set('about', "http://echo.mpiwg-berlin.mpg.de/%s/pn=%s/#%s"%(textid,pn,id))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
322 cls = d.get('class','')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
323 cls += ' pundit-content'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
324 d.set('class', cls.strip())
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
325
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
326 return pagediv
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
327
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
328 def getSearchResults(self, mode, query=None, pageinfo=None, docinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
329 """loads list of search results and stores XML in docinfo"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
330
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
331 logging.debug("getSearchResults mode=%s query=%s"%(mode, query))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
332 if mode == "none":
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
333 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
334
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
335 cachedQuery = docinfo.get('cachedQuery', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
336 if cachedQuery is not None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
337 # cached search result
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
338 if cachedQuery == '%s_%s'%(mode,query):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
339 # same query
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
340 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
341
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
342 else:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
343 # different query
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
344 del docinfo['resultSize']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
345 del docinfo['resultXML']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
346
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
347 # cache query
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
348 docinfo['cachedQuery'] = '%s_%s'%(mode,query)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
349
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
350 # fetch full results
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
351 docpath = docinfo['textURLPath']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
352 params = {'document': docpath,
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
353 'mode': 'text',
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
354 'queryType': mode,
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
355 'query': query,
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
356 'queryResultPageSize': 1000,
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
357 'queryResultPN': 1,
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
358 'characterNormalization': pageinfo.get('characterNormalization', 'reg')}
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
359 pagexml = self.getServerData("doc-query.xql",urllib.urlencode(params))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
360 #pagexml = self.getServerData("doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&s=%s&viewMode=%s&characterNormalization=%s&highlightElementPos=%s&highlightElement=%s&highlightQuery=%s"%(docpath, 'text', queryType, urllib.quote(query), pagesize, pn, s, viewMode,characterNormalization, highlightElementPos, highlightElement, urllib.quote(highlightQuery)))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
361 dom = ET.fromstring(pagexml)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
362 # page content is in <div class="queryResultPage">
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
363 pagediv = None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
364 # ElementTree 1.2 in Python 2.6 can't do div[@class='queryResultPage']
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
365 alldivs = dom.findall("div")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
366 for div in alldivs:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
367 dc = div.get('class')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
368 # page content div
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
369 if dc == 'queryResultPage':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
370 pagediv = div
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
371
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
372 elif dc == 'queryResultHits':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
373 docinfo['resultSize'] = getInt(div.text)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
374
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
375 if pagediv is not None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
376 # store XML in docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
377 docinfo['resultXML'] = ET.tostring(pagediv, 'UTF-8')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
378
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
379 return docinfo
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
380
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
381
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
382 def getResultsPage(self, mode="text", query=None, pn=None, start=None, size=None, pageinfo=None, docinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
383 """returns single page from the table of contents"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
384 logging.debug("getResultsPage mode=%s, pn=%s"%(mode,pn))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
385 # get (cached) result
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
386 self.getSearchResults(mode=mode, query=query, pageinfo=pageinfo, docinfo=docinfo)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
387
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
388 resultxml = docinfo.get('resultXML', None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
389 if not resultxml:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
390 logging.error("getResultPage: unable to find resultXML")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
391 return "Error: no result!"
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
392
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
393 if size is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
394 size = pageinfo.get('resultPageSize', 10)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
395
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
396 if start is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
397 start = (pn - 1) * size
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
398
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
399 fullresult = ET.fromstring(resultxml)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
400
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
401 if fullresult is not None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
402 # paginate
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
403 first = start-1
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
404 len = size
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
405 del fullresult[:first]
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
406 del fullresult[len:]
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
407 tocdivs = fullresult
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
408
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
409 # check all a-tags
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
410 links = tocdivs.findall(".//a")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
411 for l in links:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
412 href = l.get('href')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
413 if href:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
414 # assume all links go to pages
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
415 linkUrl = urlparse.urlparse(href)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
416 linkParams = urlparse.parse_qs(linkUrl.query)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
417 # take some parameters
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
418 params = {'pn': linkParams['pn'],
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
419 'highlightQuery': linkParams.get('highlightQuery',''),
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
420 'highlightElement': linkParams.get('highlightElement',''),
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
421 'highlightElementPos': linkParams.get('highlightElementPos','')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
422 }
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
423 url = self.getLink(params=params)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
424 l.set('href', url)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
425
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
426 return serialize(tocdivs)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
427
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
428 return "ERROR: no results!"
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
429
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
430
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
431 def getToc(self, mode='text', docinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
432 """returns list of table of contents from docinfo"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
433 logging.debug("getToc mode=%s"%mode)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
434 if mode == 'text':
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
435 queryType = 'toc'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
436 else:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
437 queryType = mode
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
438
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
439 if not 'full_%s'%queryType in docinfo:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
440 # get new toc
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
441 docinfo = self.getTextInfo(queryType, docinfo)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
442
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
443 return docinfo.get('full_%s'%queryType, [])
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
444
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
445 def getTocPage(self, mode='text', pn=None, start=None, size=None, pageinfo=None, docinfo=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
446 """returns single page from the table of contents"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
447 logging.debug("getTocPage mode=%s, pn=%s start=%s size=%s"%(mode,repr(pn),repr(start),repr(size)))
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
448 fulltoc = self.getToc(mode=mode, docinfo=docinfo)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
449 if len(fulltoc) < 1:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
450 logging.error("getTocPage: unable to find toc!")
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
451 return "Error: no table of contents!"
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
452
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
453 if size is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
454 size = pageinfo.get('tocPageSize', 30)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
455
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
456 if start is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
457 start = (pn - 1) * size
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
458
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
459 # paginate
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
460 first = (start - 1)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
461 last = first + size
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
462 tocs = fulltoc[first:last]
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
463 tp = '<div>'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
464 for toc in tocs:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
465 pageurl = self.getLink('pn', toc['pn'])
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
466 tp += '<div class="tocline">'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
467 tp += '<div class="toc name">[%s %s]</div>'%(toc['level-string'], toc['content'])
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
468 tp += '<div class="toc float right page"><a href="%s">Page: %s</a></div>'%(pageurl, toc['pn'])
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
469 tp += '</div>\n'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
470
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
471 tp += '</div>\n'
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
472
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
473 return tp
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
474
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
475
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
476 def manage_changeHocrTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,repositoryType=None,RESPONSE=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
477 """change settings"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
478 self.title=title
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
479 self.timeout = timeout
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
480 self.serverUrl = serverUrl
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
481 if repositoryType:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
482 self.repositoryType = repositoryType
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
483 if RESPONSE is not None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
484 RESPONSE.redirect('manage_main')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
485
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
486 # management methods
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
487 def manage_addHocrTextServerForm(self):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
488 """Form for adding"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
489 pt = PageTemplateFile("zpt/manage_addHocrTextServer", globals()).__of__(self)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
490 return pt()
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
491
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
492 def manage_addHocrTextServer(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
493 #def manage_addHocrTextServer(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de:30030/mpdl/interface/",timeout=40,RESPONSE=None):
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
494 """add zogiimage"""
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
495 newObj = HocrTextServer(id,title,serverUrl,timeout)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
496 self.Destination()._setObject(id, newObj)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
497 if RESPONSE is not None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
498 RESPONSE.redirect('manage_main')
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
499
7aefbddddaf9 alpaha of hocr server support
dwinter
parents:
diff changeset
500