in tpipelinegeofinder/textractgeofinder/ocrdb.py [0:0]
def execute(self,
query: str,
params: Iterable[Any],
textract_doc_uuid,
area_selection: AreaSelection = None,
page_number: int = 1,
exclude_ids: List[str] = None) -> "list[TWord]":
cursor: sqlite3.Cursor = self.conn.cursor()
query_composed = "select * from ocrdb where textract_doc_uuid=? and page_number=? "
params_composed = list()
params_composed.append(textract_doc_uuid)
if page_number and area_selection and area_selection.page_number != page_number:
raise ValueError("page_number and area_selection.page_number are not equal")
params_composed.append(page_number)
if area_selection:
area_xmin = area_selection.top_left.x
area_ymin = area_selection.top_left.y
area_xmax = area_selection.lower_right.x
area_ymax = area_selection.lower_right.y
query_composed += " and (ymin + ymax) / 2 > ? \
and (ymin + ymax) / 2 < ? \
and (xmin + xmax) / 2 > ? \
and (xmin + xmax) / 2 < ? \
and (page_number) = ?"
params_composed.extend([area_ymin, area_ymax, area_xmin, area_xmax, area_selection.page_number])
if exclude_ids:
query_composed += f" and id not in ({','.join(['?']*len(exclude_ids))}) "
params_composed.extend(exclude_ids)
params_composed.extend(params)
query_composed += query
logger.debug(f"query: {query_composed}\nparams_initial: {params_composed}")
return [TWord(ocrdb_row=x) for x in cursor.execute(query_composed, params_composed)]