first commit
This commit is contained in:
commit
4f016b718b
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
venv/
|
||||
static/pdf/
|
BIN
__pycache__/app.cpython-37.pyc
Normal file
BIN
__pycache__/app.cpython-37.pyc
Normal file
Binary file not shown.
BIN
__pycache__/hocrtransformpdf.cpython-37.pyc
Normal file
BIN
__pycache__/hocrtransformpdf.cpython-37.pyc
Normal file
Binary file not shown.
79
app.py
Normal file
79
app.py
Normal file
@ -0,0 +1,79 @@
|
||||
import os
|
||||
import random
|
||||
import shutil
|
||||
import string
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from flask import Flask, flash, redirect, render_template, request, url_for
|
||||
from hocrtransformpdf import *
|
||||
from werkzeug.utils import secure_filename
|
||||
from flask_basicauth import BasicAuth
|
||||
import pdftotree
|
||||
|
||||
UPLOAD_FOLDER = 'static/uploads'
|
||||
ALLOWED_EXTENSIONS = {'pdf'}
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
app.config['BASIC_AUTH_USERNAME'] = 'wordmord'
|
||||
app.config['BASIC_AUTH_PASSWORD'] = 'tentacles'
|
||||
|
||||
basic_auth = BasicAuth(app)
|
||||
|
||||
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
||||
|
||||
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
@basic_auth.required
|
||||
def run_script():
|
||||
# the code below was made in case I was using a button upload but now I use the field input so this has to be uploaded and then transformed
|
||||
if request.method == 'POST':
|
||||
# check if the post request has the file part
|
||||
if 'file' not in request.files:
|
||||
flash('No file part')
|
||||
return redirect(request.url)
|
||||
file = request.files['file']
|
||||
# if user does not select file, browser also
|
||||
# submit an empty part without filename
|
||||
if file.filename == '':
|
||||
flash('No selected file')
|
||||
return redirect(request.url)
|
||||
if file and allowed_file(file.filename):
|
||||
filename = secure_filename(file.filename)
|
||||
uploadfilepath=os.path.join(app.config['UPLOAD_FOLDER'], filename)
|
||||
file.save(uploadfilepath)
|
||||
# return redirect(url_for('uploaded_file',
|
||||
# filename=filename))
|
||||
|
||||
hocr_result = pdftotree.parse(uploadfilepath)
|
||||
app.logger.info("test")
|
||||
hocr = HocrTransform(hocr_filename=hocr_result, dpi=300)
|
||||
hocr.to_pdf(
|
||||
out_filename='static/pdf/output-2.pdf',
|
||||
image_filename='static/images/blank.png',
|
||||
show_bounding_boxes=False,
|
||||
interword_spaces=False,
|
||||
)
|
||||
|
||||
hocrfile='static/hocr/gynaikoktonia.hocr'
|
||||
#hocr = HocrTransform(hocr_filename=hocrfile, dpi=300)
|
||||
#hocr = HocrTransform(hocr_filename=hocr_result, dpi=300)
|
||||
#hocr.to_pdf(
|
||||
# out_filename='static/pdf/output.pdf',
|
||||
# image_filename='static/images/blank.png',
|
||||
# show_bounding_boxes=False,
|
||||
# interword_spaces=False,
|
||||
#)
|
||||
# result = subprocess.check_output("python3 hocrtransformpdf.py -i images/blank.png hocr/gynaikoktonia.hocr pdf/gynaikoktonia.pdf", shell=True)
|
||||
return render_template('results.html', **locals())
|
||||
|
||||
|
||||
|
||||
def allowed_file(filename):
|
||||
return '.' in filename and \
|
||||
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
||||
|
518
hocrtransform-visible-pdf.py
Executable file
518
hocrtransform-visible-pdf.py
Executable file
@ -0,0 +1,518 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (c) 2010, Jonathan Brinley
|
||||
# Original version from: https://github.com/jbrinley/HocrConverter
|
||||
#
|
||||
# Copyright (c) 2013-14, Julien Pfefferkorn
|
||||
# Modifications
|
||||
#
|
||||
# Copyright (c) 2015-16, James R. Barlow
|
||||
# Set text to transparent
|
||||
|
||||
# Copyright (c) 2022, WordMord & Alex Roidl
|
||||
# Set text back to visible and change bounding boxes
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the
|
||||
# "Software"), to deal in the Software without restriction, including
|
||||
# without limitation the rights to use, copy, modify, merge, publish,
|
||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||
# permit persons to whom the Software is furnished to do so, subject to
|
||||
# the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
from itertools import chain
|
||||
from math import atan, cos, sin
|
||||
from pathlib import Path
|
||||
from typing import Any, NamedTuple, Optional, Tuple, Union
|
||||
from xml.etree import ElementTree
|
||||
|
||||
from reportlab.lib.colors import black, cyan, magenta, red
|
||||
from reportlab.lib.units import inch
|
||||
from reportlab.pdfgen.canvas import Canvas
|
||||
from reportlab.pdfbase import pdfmetrics
|
||||
from reportlab.pdfbase.ttfonts import TTFont
|
||||
from reportlab.pdfbase.pdfmetrics import registerFontFamily
|
||||
|
||||
|
||||
|
||||
# According to Wikipedia these languages are supported in the ISO-8859-1 character
|
||||
# set, meaning reportlab can generate them and they are compatible with hocr,
|
||||
# assuming Tesseract has the necessary languages installed. Note that there may
|
||||
# not be language packs for them.
|
||||
HOCR_OK_LANGS = frozenset(
|
||||
[
|
||||
# Languages fully covered by Latin-1:
|
||||
'afr', # Afrikaans
|
||||
'alb', # Albanian
|
||||
'ast', # Leonese
|
||||
'baq', # Basque
|
||||
'bre', # Breton
|
||||
'cos', # Corsican
|
||||
'eng', # English
|
||||
'eus', # Basque
|
||||
'fao', # Faoese
|
||||
'gla', # Scottish Gaelic
|
||||
'glg', # Galician
|
||||
'glv', # Manx
|
||||
'ice', # Icelandic
|
||||
'ind', # Indonesian
|
||||
'isl', # Icelandic
|
||||
'ita', # Italian
|
||||
'ltz', # Luxembourgish
|
||||
'mal', # Malay Rumi
|
||||
'mga', # Irish
|
||||
'nor', # Norwegian
|
||||
'oci', # Occitan
|
||||
'por', # Portugeuse
|
||||
'roh', # Romansh
|
||||
'sco', # Scots
|
||||
'sma', # Sami
|
||||
'spa', # Spanish
|
||||
'sqi', # Albanian
|
||||
'swa', # Swahili
|
||||
'swe', # Swedish
|
||||
'tgl', # Tagalog
|
||||
'wln', # Walloon
|
||||
# Languages supported by Latin-1 except for a few rare characters that OCR
|
||||
# is probably not trained to recognize anyway:
|
||||
'cat', # Catalan
|
||||
'cym', # Welsh
|
||||
'dan', # Danish
|
||||
'deu', # German
|
||||
'dut', # Dutch
|
||||
'est', # Estonian
|
||||
'fin', # Finnish
|
||||
'fra', # French
|
||||
'hun', # Hungarian
|
||||
'kur', # Kurdish
|
||||
'nld', # Dutch
|
||||
'wel', # Welsh
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Element = ElementTree.Element
|
||||
|
||||
|
||||
class Rect(NamedTuple): # pylint: disable=inherit-non-class
|
||||
"""A rectangle for managing PDF coordinates."""
|
||||
|
||||
x1: Any
|
||||
y1: Any
|
||||
x2: Any
|
||||
y2: Any
|
||||
|
||||
|
||||
class HocrTransformError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class HocrTransform:
|
||||
|
||||
"""
|
||||
A class for converting documents from the hOCR format.
|
||||
For details of the hOCR format, see:
|
||||
http://kba.cloud/hocr-spec/
|
||||
"""
|
||||
|
||||
box_pattern = re.compile(r'bbox((\s+\d+){4})')
|
||||
baseline_pattern = re.compile(
|
||||
r'''
|
||||
baseline \s+
|
||||
([\-\+]?\d*\.?\d*) \s+ # +/- decimal float
|
||||
([\-\+]?\d+) # +/- int''',
|
||||
re.VERBOSE,
|
||||
)
|
||||
ligatures = str.maketrans(
|
||||
{'ff': 'ff', 'ffi': 'ffi', 'ffl': 'ffl', 'fi': 'fi', 'fl': 'fl'}
|
||||
)
|
||||
|
||||
def __init__(self, *, hocr_filename: Union[str, Path], dpi: float):
|
||||
self.dpi = dpi
|
||||
self.hocr = ElementTree.parse(os.fspath(hocr_filename))
|
||||
|
||||
# if the hOCR file has a namespace, ElementTree requires its use to
|
||||
# find elements
|
||||
matches = re.match(r'({.*})html', self.hocr.getroot().tag)
|
||||
self.xmlns = ''
|
||||
if matches:
|
||||
self.xmlns = matches.group(1)
|
||||
|
||||
# get dimension in pt (not pixel!!!!) of the OCRed image
|
||||
self.width, self.height = None, None
|
||||
for div in self.hocr.findall(self._child_xpath('div', 'ocr_page')):
|
||||
coords = self.element_coordinates(div)
|
||||
pt_coords = self.pt_from_pixel(coords)
|
||||
self.width = pt_coords.x2 - pt_coords.x1
|
||||
self.height = pt_coords.y2 - pt_coords.y1
|
||||
# there shouldn't be more than one, and if there is, we don't want
|
||||
# it
|
||||
break
|
||||
if self.width is None or self.height is None:
|
||||
raise HocrTransformError("hocr file is missing page dimensions")
|
||||
|
||||
def __str__(self): # pragma: no cover
|
||||
"""
|
||||
Return the textual content of the HTML body
|
||||
"""
|
||||
if self.hocr is None:
|
||||
return ''
|
||||
body = self.hocr.find(self._child_xpath('body'))
|
||||
if body:
|
||||
return self._get_element_text(body)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def _get_element_text(self, element: Element):
|
||||
"""
|
||||
Return the textual content of the element and its children
|
||||
"""
|
||||
text = ''
|
||||
if element.text is not None:
|
||||
text += element.text
|
||||
for child in element:
|
||||
text += self._get_element_text(child)
|
||||
if element.tail is not None:
|
||||
text += element.tail
|
||||
return text
|
||||
|
||||
@classmethod
|
||||
def element_coordinates(cls, element: Element) -> Rect:
|
||||
"""
|
||||
Returns a tuple containing the coordinates of the bounding box around
|
||||
an element
|
||||
"""
|
||||
out = Rect._make(0 for _ in range(4))
|
||||
if 'title' in element.attrib:
|
||||
matches = cls.box_pattern.search(element.attrib['title'])
|
||||
if matches:
|
||||
coords = matches.group(1).split()
|
||||
out = Rect._make(int(coords[n]) for n in range(4))
|
||||
return out
|
||||
|
||||
@classmethod
|
||||
def baseline(cls, element: Element) -> Tuple[float, float]:
|
||||
"""
|
||||
Returns a tuple containing the baseline slope and intercept.
|
||||
"""
|
||||
if 'title' in element.attrib:
|
||||
matches = cls.baseline_pattern.search(element.attrib['title'])
|
||||
if matches:
|
||||
return float(matches.group(1)), int(matches.group(2))
|
||||
return (0.0, 0.0)
|
||||
|
||||
def pt_from_pixel(self, pxl) -> Rect:
|
||||
"""
|
||||
Returns the quantity in PDF units (pt) given quantity in pixels
|
||||
"""
|
||||
return Rect._make((c / self.dpi * inch) for c in pxl)
|
||||
|
||||
def _child_xpath(self, html_tag: str, html_class: Optional[str] = None) -> str:
|
||||
xpath = f".//{self.xmlns}{html_tag}"
|
||||
if html_class:
|
||||
xpath += f"[@class='{html_class}']"
|
||||
return xpath
|
||||
|
||||
@classmethod
|
||||
def replace_unsupported_chars(cls, s: str) -> str:
|
||||
"""
|
||||
Given an input string, returns the corresponding string that:
|
||||
* is available in the Helvetica facetype
|
||||
* does not contain any ligature (to allow easy search in the PDF file)
|
||||
"""
|
||||
return s.translate(cls.ligatures)
|
||||
|
||||
def topdown_position(self, element):
|
||||
pxl_line_coords = self.element_coordinates(element)
|
||||
line_box = self.pt_from_pixel(pxl_line_coords)
|
||||
# Coordinates here are still in the hocr coordinate system, so 0 on the y axis
|
||||
# is the top of the page and increasing values of y will move towards the
|
||||
# bottom of the page.
|
||||
return line_box.y2
|
||||
|
||||
def to_pdf(
|
||||
self,
|
||||
*,
|
||||
out_filename: Path,
|
||||
image_filename: Optional[Path] = None,
|
||||
show_bounding_boxes: bool = False,
|
||||
fontname: str = "Helvetica",
|
||||
invisible_text: bool = False,
|
||||
interword_spaces: bool = False,
|
||||
) -> None:
|
||||
"""
|
||||
Creates a PDF file with an image superimposed on top of the text.
|
||||
Text is positioned according to the bounding box of the lines in
|
||||
the hOCR file.
|
||||
The image need not be identical to the image used to create the hOCR
|
||||
file.
|
||||
It can have a lower resolution, different color mode, etc.
|
||||
|
||||
Arguments:
|
||||
out_filename: Path of PDF to write.
|
||||
image_filename: Image to use for this file. If omitted, the OCR text
|
||||
is shown.
|
||||
show_bounding_boxes: Show bounding boxes around various text regions,
|
||||
for debugging.
|
||||
fontname: Name of font to use.
|
||||
invisible_text: If True, text is rendered invisible so that is
|
||||
selectable but never drawn. If False, text is visible and may
|
||||
be seen if the image is skipped or deleted in Acrobat.
|
||||
interword_spaces: If True, insert spaces between words rather than
|
||||
drawing each word without spaces. Generally this improves text
|
||||
extraction.
|
||||
"""
|
||||
# create the PDF file
|
||||
# page size in points (1/72 in.)
|
||||
|
||||
pdfmetrics.registerFont(TTFont('Greek', 'static/fonts/greek.ttf'))
|
||||
pdfmetrics.registerFont(TTFont('GreekB', 'static/fonts/greek-bold.ttf'))
|
||||
registerFontFamily('Greek', normal='Greek', bold='GreekB')
|
||||
|
||||
pdf = Canvas(
|
||||
os.fspath(out_filename),
|
||||
pagesize=(self.width, self.height),
|
||||
pageCompression=1,
|
||||
)
|
||||
|
||||
if image_filename is not None:
|
||||
pdf.drawImage(
|
||||
os.fspath(image_filename), 0, 0, width=self.width, height=self.height
|
||||
)
|
||||
|
||||
# draw bounding box for each paragraph
|
||||
# light blue for bounding box of paragraph
|
||||
pdf.setStrokeColor(black)
|
||||
# light blue for bounding box of paragraph
|
||||
pdf.setFillColor(black)
|
||||
pdf.setLineWidth(1) # no line for bounding box
|
||||
for elem in self.hocr.iterfind(self._child_xpath('p', 'ocr_par')):
|
||||
elemtxt = self._get_element_text(elem).rstrip()
|
||||
if len(elemtxt) == 0:
|
||||
continue
|
||||
|
||||
pxl_coords = self.element_coordinates(elem)
|
||||
pt = self.pt_from_pixel(pxl_coords)
|
||||
|
||||
# draw the bbox border
|
||||
if show_bounding_boxes: # pragma: no cover
|
||||
pdf.rect(
|
||||
pt.x1, self.height - pt.y2, pt.x2 - pt.x1, pt.y2 - pt.y1, fill=1
|
||||
)
|
||||
|
||||
found_lines = False
|
||||
for line in sorted(
|
||||
chain(
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_header')),
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_line')),
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_textfloat')),
|
||||
),
|
||||
key=self.topdown_position,
|
||||
):
|
||||
found_lines = True
|
||||
self._do_line(
|
||||
pdf,
|
||||
line,
|
||||
"ocrx_word",
|
||||
fontname,
|
||||
invisible_text,
|
||||
interword_spaces,
|
||||
show_bounding_boxes,
|
||||
)
|
||||
|
||||
if not found_lines:
|
||||
# Tesseract did not report any lines (just words)
|
||||
root = self.hocr.find(self._child_xpath('div', 'ocr_page'))
|
||||
self._do_line(
|
||||
pdf,
|
||||
root,
|
||||
"ocrx_word",
|
||||
fontname,
|
||||
invisible_text,
|
||||
interword_spaces,
|
||||
show_bounding_boxes,
|
||||
)
|
||||
# put the image on the page, scaled to fill the page
|
||||
|
||||
|
||||
# finish up the page and save it
|
||||
pdf.showPage()
|
||||
pdf.save()
|
||||
|
||||
@classmethod
|
||||
def polyval(cls, poly, x): # pragma: no cover
|
||||
return x * poly[0] + poly[1]
|
||||
|
||||
def _do_line(
|
||||
self,
|
||||
pdf: Canvas,
|
||||
line: Optional[Element],
|
||||
elemclass: str,
|
||||
fontname: str,
|
||||
invisible_text: bool,
|
||||
interword_spaces: bool,
|
||||
show_bounding_boxes: bool,
|
||||
):
|
||||
if not line:
|
||||
return
|
||||
pxl_line_coords = self.element_coordinates(line)
|
||||
line_box = self.pt_from_pixel(pxl_line_coords)
|
||||
line_height = line_box.y2 - line_box.y1
|
||||
|
||||
slope, pxl_intercept = self.baseline(line)
|
||||
if abs(slope) < 0.005:
|
||||
slope = 0.0
|
||||
angle = atan(slope)
|
||||
cos_a, sin_a = cos(angle), sin(angle)
|
||||
|
||||
text = pdf.beginText()
|
||||
intercept = pxl_intercept / self.dpi * inch
|
||||
|
||||
# Don't allow the font to break out of the bounding box. Division by
|
||||
# cos_a accounts for extra clearance between the glyph's vertical axis
|
||||
# on a sloped baseline and the edge of the bounding box.
|
||||
fontsize = (line_height - abs(intercept)) / cos_a * 1.2
|
||||
#fontsize = 10.5
|
||||
text.setFont('Greek', fontsize)
|
||||
#if invisible_text:
|
||||
# text.setTextRenderMode(3) # Invisible (indicates OCR text)
|
||||
|
||||
# Intercept is normally negative, so this places it above the bottom
|
||||
# of the line box
|
||||
baseline_y2 = self.height - (line_box.y2 + intercept)
|
||||
|
||||
if False: # pragma: no cover
|
||||
# draw the baseline in magenta, dashed
|
||||
pdf.setDash()
|
||||
pdf.setStrokeColor(magenta)
|
||||
pdf.setLineWidth(0.5)
|
||||
# negate slope because it is defined as a rise/run in pixel
|
||||
# coordinates and page coordinates have the y axis flipped
|
||||
pdf.line(
|
||||
line_box.x1,
|
||||
baseline_y2,
|
||||
line_box.x2,
|
||||
self.polyval((-slope, baseline_y2), line_box.x2 - line_box.x1),
|
||||
)
|
||||
# light green for bounding box of word/line
|
||||
pdf.setDash(6, 3)
|
||||
pdf.setStrokeColor(red)
|
||||
|
||||
#text.setTextTransform(cos_a, -sin_a, sin_a, cos_a, line_box.x1, baseline_y2)
|
||||
text.setTextOrigin(line_box.x1, baseline_y2)
|
||||
##pdf.translate(line_box.x1, baseline_y2)
|
||||
pdf.setFillColor(black) # text in black
|
||||
|
||||
elements = line.findall(self._child_xpath('span', elemclass))
|
||||
for elem in elements:
|
||||
elemtxt = self._get_element_text(elem).strip()
|
||||
elemtxt = self.replace_unsupported_chars(elemtxt)
|
||||
if elemtxt == '':
|
||||
continue
|
||||
|
||||
pxl_coords = self.element_coordinates(elem)
|
||||
box = self.pt_from_pixel(pxl_coords)
|
||||
if False:
|
||||
# if `--interword-spaces` is true, append a space
|
||||
# to the end of each text element to allow simpler PDF viewers
|
||||
# such as PDF.js to better recognize words in search and copy
|
||||
# and paste. Do not remove space from last word in line, even
|
||||
# though it would look better, because it will interfere with
|
||||
# naive text extraction. \n does not work either.
|
||||
elemtxt += ' '
|
||||
box = Rect._make(
|
||||
(
|
||||
box.x1,
|
||||
line_box.y1,
|
||||
box.x2 + pdf.stringWidth(' ', fontname, line_height),
|
||||
line_box.y2,
|
||||
)
|
||||
)
|
||||
box_width = box.x2 - box.x1
|
||||
font_width = pdf.stringWidth(elemtxt, fontname, fontsize)
|
||||
|
||||
# draw the bbox border
|
||||
if False: # pragma: no cover
|
||||
pdf.rect(
|
||||
box.x1, self.height - line_box.y2, box_width, line_height, fill=0
|
||||
)
|
||||
|
||||
# Adjust relative position of cursor
|
||||
# This is equivalent to:
|
||||
# text.setTextOrigin(pt.x1, self.height - line_box.y2)
|
||||
# but the former generates a full text reposition matrix (Tm) in the
|
||||
# content stream while this issues a "offset" (Td) command.
|
||||
# .moveCursor() is relative to start of the text line, where the
|
||||
# "text line" means whatever reportlab defines it as. Do not use
|
||||
# use .getCursor(), since moveCursor() rather unintuitively plans
|
||||
# its moves relative to .getStartOfLine().
|
||||
# For skewed lines, in the text transform we set up a rotated
|
||||
# coordinate system, so we don't have to account for the
|
||||
# incremental offset. Surprisingly most PDF viewers can handle this.
|
||||
cursor = text.getStartOfLine()
|
||||
dx = box.x1 - cursor[0]
|
||||
dy = baseline_y2 - cursor[1]
|
||||
text.moveCursor(dx, dy)
|
||||
|
||||
# If reportlab tells us this word is 0 units wide, our best seems
|
||||
# to be to suppress this text
|
||||
if font_width > 0:
|
||||
#text.setHorizScale(100 * box_width / font_width)
|
||||
text.textOut(elemtxt)
|
||||
pdf.drawText(text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Convert hocr file to PDF')
|
||||
parser.add_argument(
|
||||
'-b',
|
||||
'--boundingboxes',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help='Show bounding boxes borders',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-r',
|
||||
'--resolution',
|
||||
type=int,
|
||||
default=300,
|
||||
help='Resolution of the image that was OCRed',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-i',
|
||||
'--image',
|
||||
default=None,
|
||||
help='Path to the image to be placed above the text',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--interword-spaces',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Add spaces between words',
|
||||
)
|
||||
parser.add_argument('hocrfile', help='Path to the hocr file to be parsed')
|
||||
parser.add_argument('outputfile', help='Path to the PDF file to be generated')
|
||||
args = parser.parse_args()
|
||||
|
||||
hocr = HocrTransform(hocr_filename=args.hocrfile, dpi=args.resolution)
|
||||
hocr.to_pdf(
|
||||
out_filename=args.outputfile,
|
||||
image_filename=args.image,
|
||||
show_bounding_boxes=args.boundingboxes,
|
||||
interword_spaces=args.interword_spaces,
|
||||
)
|
||||
|
511
hocrtransform.py
Executable file
511
hocrtransform.py
Executable file
@ -0,0 +1,511 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (c) 2010, Jonathan Brinley
|
||||
# Original version from: https://github.com/jbrinley/HocrConverter
|
||||
#
|
||||
# Copyright (c) 2013-14, Julien Pfefferkorn
|
||||
# Modifications
|
||||
#
|
||||
# Copyright (c) 2015-16, James R. Barlow
|
||||
# Set text to transparent
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the
|
||||
# "Software"), to deal in the Software without restriction, including
|
||||
# without limitation the rights to use, copy, modify, merge, publish,
|
||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||
# permit persons to whom the Software is furnished to do so, subject to
|
||||
# the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
from itertools import chain
|
||||
from math import atan, cos, sin
|
||||
from pathlib import Path
|
||||
from typing import Any, NamedTuple, Optional, Tuple, Union
|
||||
from xml.etree import ElementTree
|
||||
|
||||
from reportlab.lib.colors import black, cyan, magenta, red
|
||||
from reportlab.lib.units import inch
|
||||
from reportlab.pdfgen.canvas import Canvas
|
||||
from reportlab.pdfbase import pdfmetrics
|
||||
from reportlab.pdfbase.ttfonts import TTFont
|
||||
from reportlab.pdfbase.pdfmetrics import registerFontFamily
|
||||
|
||||
|
||||
|
||||
# According to Wikipedia these languages are supported in the ISO-8859-1 character
|
||||
# set, meaning reportlab can generate them and they are compatible with hocr,
|
||||
# assuming Tesseract has the necessary languages installed. Note that there may
|
||||
# not be language packs for them.
|
||||
HOCR_OK_LANGS = frozenset(
|
||||
[
|
||||
# Languages fully covered by Latin-1:
|
||||
'afr', # Afrikaans
|
||||
'alb', # Albanian
|
||||
'ast', # Leonese
|
||||
'baq', # Basque
|
||||
'bre', # Breton
|
||||
'cos', # Corsican
|
||||
'eng', # English
|
||||
'eus', # Basque
|
||||
'fao', # Faoese
|
||||
'gla', # Scottish Gaelic
|
||||
'glg', # Galician
|
||||
'glv', # Manx
|
||||
'ice', # Icelandic
|
||||
'ind', # Indonesian
|
||||
'isl', # Icelandic
|
||||
'ita', # Italian
|
||||
'ltz', # Luxembourgish
|
||||
'mal', # Malay Rumi
|
||||
'mga', # Irish
|
||||
'nor', # Norwegian
|
||||
'oci', # Occitan
|
||||
'por', # Portugeuse
|
||||
'roh', # Romansh
|
||||
'sco', # Scots
|
||||
'sma', # Sami
|
||||
'spa', # Spanish
|
||||
'sqi', # Albanian
|
||||
'swa', # Swahili
|
||||
'swe', # Swedish
|
||||
'tgl', # Tagalog
|
||||
'wln', # Walloon
|
||||
# Languages supported by Latin-1 except for a few rare characters that OCR
|
||||
# is probably not trained to recognize anyway:
|
||||
'cat', # Catalan
|
||||
'cym', # Welsh
|
||||
'dan', # Danish
|
||||
'deu', # German
|
||||
'dut', # Dutch
|
||||
'est', # Estonian
|
||||
'fin', # Finnish
|
||||
'fra', # French
|
||||
'hun', # Hungarian
|
||||
'kur', # Kurdish
|
||||
'nld', # Dutch
|
||||
'wel', # Welsh
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Element = ElementTree.Element
|
||||
|
||||
|
||||
class Rect(NamedTuple): # pylint: disable=inherit-non-class
|
||||
"""A rectangle for managing PDF coordinates."""
|
||||
|
||||
x1: Any
|
||||
y1: Any
|
||||
x2: Any
|
||||
y2: Any
|
||||
|
||||
|
||||
class HocrTransformError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class HocrTransform:
|
||||
|
||||
"""
|
||||
A class for converting documents from the hOCR format.
|
||||
For details of the hOCR format, see:
|
||||
http://kba.cloud/hocr-spec/
|
||||
"""
|
||||
|
||||
box_pattern = re.compile(r'bbox((\s+\d+){4})')
|
||||
baseline_pattern = re.compile(
|
||||
r'''
|
||||
baseline \s+
|
||||
([\-\+]?\d*\.?\d*) \s+ # +/- decimal float
|
||||
([\-\+]?\d+) # +/- int''',
|
||||
re.VERBOSE,
|
||||
)
|
||||
ligatures = str.maketrans(
|
||||
{'ff': 'ff', 'ffi': 'ffi', 'ffl': 'ffl', 'fi': 'fi', 'fl': 'fl'}
|
||||
)
|
||||
|
||||
def __init__(self, *, hocr_filename: Union[str, Path], dpi: float):
|
||||
self.dpi = dpi
|
||||
self.hocr = ElementTree.parse(os.fspath(hocr_filename))
|
||||
|
||||
# if the hOCR file has a namespace, ElementTree requires its use to
|
||||
# find elements
|
||||
matches = re.match(r'({.*})html', self.hocr.getroot().tag)
|
||||
self.xmlns = ''
|
||||
if matches:
|
||||
self.xmlns = matches.group(1)
|
||||
|
||||
# get dimension in pt (not pixel!!!!) of the OCRed image
|
||||
self.width, self.height = None, None
|
||||
for div in self.hocr.findall(self._child_xpath('div', 'ocr_page')):
|
||||
coords = self.element_coordinates(div)
|
||||
pt_coords = self.pt_from_pixel(coords)
|
||||
self.width = pt_coords.x2 - pt_coords.x1
|
||||
self.height = pt_coords.y2 - pt_coords.y1
|
||||
# there shouldn't be more than one, and if there is, we don't want
|
||||
# it
|
||||
break
|
||||
if self.width is None or self.height is None:
|
||||
raise HocrTransformError("hocr file is missing page dimensions")
|
||||
|
||||
def __str__(self): # pragma: no cover
|
||||
"""
|
||||
Return the textual content of the HTML body
|
||||
"""
|
||||
if self.hocr is None:
|
||||
return ''
|
||||
body = self.hocr.find(self._child_xpath('body'))
|
||||
if body:
|
||||
return self._get_element_text(body)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def _get_element_text(self, element: Element):
|
||||
"""
|
||||
Return the textual content of the element and its children
|
||||
"""
|
||||
text = ''
|
||||
if element.text is not None:
|
||||
text += element.text
|
||||
for child in element:
|
||||
text += self._get_element_text(child)
|
||||
if element.tail is not None:
|
||||
text += element.tail
|
||||
return text
|
||||
|
||||
@classmethod
|
||||
def element_coordinates(cls, element: Element) -> Rect:
|
||||
"""
|
||||
Returns a tuple containing the coordinates of the bounding box around
|
||||
an element
|
||||
"""
|
||||
out = Rect._make(0 for _ in range(4))
|
||||
if 'title' in element.attrib:
|
||||
matches = cls.box_pattern.search(element.attrib['title'])
|
||||
if matches:
|
||||
coords = matches.group(1).split()
|
||||
out = Rect._make(int(coords[n]) for n in range(4))
|
||||
return out
|
||||
|
||||
@classmethod
|
||||
def baseline(cls, element: Element) -> Tuple[float, float]:
|
||||
"""
|
||||
Returns a tuple containing the baseline slope and intercept.
|
||||
"""
|
||||
if 'title' in element.attrib:
|
||||
matches = cls.baseline_pattern.search(element.attrib['title'])
|
||||
if matches:
|
||||
return float(matches.group(1)), int(matches.group(2))
|
||||
return (0.0, 0.0)
|
||||
|
||||
def pt_from_pixel(self, pxl) -> Rect:
|
||||
"""
|
||||
Returns the quantity in PDF units (pt) given quantity in pixels
|
||||
"""
|
||||
return Rect._make((c / self.dpi * inch) for c in pxl)
|
||||
|
||||
def _child_xpath(self, html_tag: str, html_class: Optional[str] = None) -> str:
|
||||
xpath = f".//{self.xmlns}{html_tag}"
|
||||
if html_class:
|
||||
xpath += f"[@class='{html_class}']"
|
||||
return xpath
|
||||
|
||||
@classmethod
|
||||
def replace_unsupported_chars(cls, s: str) -> str:
|
||||
"""
|
||||
Given an input string, returns the corresponding string that:
|
||||
* is available in the Helvetica facetype
|
||||
* does not contain any ligature (to allow easy search in the PDF file)
|
||||
"""
|
||||
return s.translate(cls.ligatures)
|
||||
|
||||
def topdown_position(self, element):
|
||||
pxl_line_coords = self.element_coordinates(element)
|
||||
line_box = self.pt_from_pixel(pxl_line_coords)
|
||||
# Coordinates here are still in the hocr coordinate system, so 0 on the y axis
|
||||
# is the top of the page and increasing values of y will move towards the
|
||||
# bottom of the page.
|
||||
return line_box.y2
|
||||
|
||||
def to_pdf(
|
||||
self,
|
||||
*,
|
||||
out_filename: Path,
|
||||
image_filename: Optional[Path] = None,
|
||||
show_bounding_boxes: bool = False,
|
||||
fontname: str = "Helvetica",
|
||||
invisible_text: bool = False,
|
||||
interword_spaces: bool = False,
|
||||
) -> None:
|
||||
"""
|
||||
Creates a PDF file with an image superimposed on top of the text.
|
||||
Text is positioned according to the bounding box of the lines in
|
||||
the hOCR file.
|
||||
The image need not be identical to the image used to create the hOCR
|
||||
file.
|
||||
It can have a lower resolution, different color mode, etc.
|
||||
|
||||
Arguments:
|
||||
out_filename: Path of PDF to write.
|
||||
image_filename: Image to use for this file. If omitted, the OCR text
|
||||
is shown.
|
||||
show_bounding_boxes: Show bounding boxes around various text regions,
|
||||
for debugging.
|
||||
fontname: Name of font to use.
|
||||
invisible_text: If True, text is rendered invisible so that is
|
||||
selectable but never drawn. If False, text is visible and may
|
||||
be seen if the image is skipped or deleted in Acrobat.
|
||||
interword_spaces: If True, insert spaces between words rather than
|
||||
drawing each word without spaces. Generally this improves text
|
||||
extraction.
|
||||
"""
|
||||
# create the PDF file
|
||||
# page size in points (1/72 in.)
|
||||
pdfmetrics.registerFont(TTFont('Greek', 'static/fonts/greek.ttf'))
|
||||
pdfmetrics.registerFont(TTFont('GreekB', 'static/fonts/greek-bold.ttf'))
|
||||
registerFontFamily('Greek', normal='Greek', bold='GreekB')
|
||||
|
||||
pdf = Canvas(
|
||||
os.fspath(out_filename),
|
||||
pagesize=(self.width, self.height),
|
||||
pageCompression=1,
|
||||
)
|
||||
|
||||
# draw bounding box for each paragraph
|
||||
# light blue for bounding box of paragraph
|
||||
pdf.setStrokeColor(cyan)
|
||||
# light blue for bounding box of paragraph
|
||||
pdf.setFillColor(cyan)
|
||||
pdf.setLineWidth(0) # no line for bounding box
|
||||
for elem in self.hocr.iterfind(self._child_xpath('p', 'ocr_par')):
|
||||
elemtxt = self._get_element_text(elem).rstrip()
|
||||
if len(elemtxt) == 0:
|
||||
continue
|
||||
|
||||
pxl_coords = self.element_coordinates(elem)
|
||||
pt = self.pt_from_pixel(pxl_coords)
|
||||
|
||||
# draw the bbox border
|
||||
if show_bounding_boxes: # pragma: no cover
|
||||
pdf.rect(
|
||||
pt.x1, self.height - pt.y2, pt.x2 - pt.x1, pt.y2 - pt.y1, fill=1
|
||||
)
|
||||
|
||||
found_lines = False
|
||||
for line in sorted(
|
||||
chain(
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_header')),
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_line')),
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_textfloat')),
|
||||
),
|
||||
key=self.topdown_position,
|
||||
):
|
||||
found_lines = True
|
||||
self._do_line(
|
||||
pdf,
|
||||
line,
|
||||
"ocrx_word",
|
||||
fontname,
|
||||
invisible_text,
|
||||
interword_spaces,
|
||||
show_bounding_boxes,
|
||||
)
|
||||
|
||||
if not found_lines:
|
||||
# Tesseract did not report any lines (just words)
|
||||
root = self.hocr.find(self._child_xpath('div', 'ocr_page'))
|
||||
self._do_line(
|
||||
pdf,
|
||||
root,
|
||||
"ocrx_word",
|
||||
fontname,
|
||||
invisible_text,
|
||||
interword_spaces,
|
||||
show_bounding_boxes,
|
||||
)
|
||||
# put the image on the page, scaled to fill the page
|
||||
if image_filename is not None:
|
||||
pdf.drawImage(
|
||||
os.fspath(image_filename), 0, 0, width=self.width, height=self.height
|
||||
)
|
||||
|
||||
# finish up the page and save it
|
||||
pdf.showPage()
|
||||
pdf.save()
|
||||
|
||||
@classmethod
|
||||
def polyval(cls, poly, x): # pragma: no cover
|
||||
return x * poly[0] + poly[1]
|
||||
|
||||
def _do_line(
|
||||
self,
|
||||
pdf: Canvas,
|
||||
line: Optional[Element],
|
||||
elemclass: str,
|
||||
fontname: str,
|
||||
invisible_text: bool,
|
||||
interword_spaces: bool,
|
||||
show_bounding_boxes: bool,
|
||||
):
|
||||
if not line:
|
||||
return
|
||||
pxl_line_coords = self.element_coordinates(line)
|
||||
line_box = self.pt_from_pixel(pxl_line_coords)
|
||||
line_height = line_box.y2 - line_box.y1
|
||||
|
||||
slope, pxl_intercept = self.baseline(line)
|
||||
if abs(slope) < 0.005:
|
||||
slope = 0.0
|
||||
angle = atan(slope)
|
||||
cos_a, sin_a = cos(angle), sin(angle)
|
||||
|
||||
text = pdf.beginText()
|
||||
intercept = pxl_intercept / self.dpi * inch
|
||||
|
||||
# Don't allow the font to break out of the bounding box. Division by
|
||||
# cos_a accounts for extra clearance between the glyph's vertical axis
|
||||
# on a sloped baseline and the edge of the bounding box.
|
||||
fontsize = (line_height - abs(intercept)) / cos_a * 1.2
|
||||
#fontsize = 10.5
|
||||
text.setFont('Greek', fontsize)
|
||||
if invisible_text:
|
||||
text.setTextRenderMode(3) # Invisible (indicates OCR text)
|
||||
|
||||
# Intercept is normally negative, so this places it above the bottom
|
||||
# of the line box
|
||||
baseline_y2 = self.height - (line_box.y2 + intercept)
|
||||
|
||||
if False: # pragma: no cover
|
||||
# draw the baseline in magenta, dashed
|
||||
pdf.setDash()
|
||||
pdf.setStrokeColor(magenta)
|
||||
pdf.setLineWidth(0.5)
|
||||
# negate slope because it is defined as a rise/run in pixel
|
||||
# coordinates and page coordinates have the y axis flipped
|
||||
pdf.line(
|
||||
line_box.x1,
|
||||
baseline_y2,
|
||||
line_box.x2,
|
||||
self.polyval((-slope, baseline_y2), line_box.x2 - line_box.x1),
|
||||
)
|
||||
# light green for bounding box of word/line
|
||||
pdf.setDash(6, 3)
|
||||
pdf.setStrokeColor(red)
|
||||
|
||||
#text.setTextTransform(cos_a, -sin_a, sin_a, cos_a, line_box.x1, baseline_y2)
|
||||
text.setTextOrigin(line_box.x1, baseline_y2)
|
||||
pdf.setFillColor(black) # text in black
|
||||
|
||||
elements = line.findall(self._child_xpath('span', elemclass))
|
||||
for elem in elements:
|
||||
elemtxt = self._get_element_text(elem).strip()
|
||||
elemtxt = self.replace_unsupported_chars(elemtxt)
|
||||
if elemtxt == '':
|
||||
continue
|
||||
|
||||
pxl_coords = self.element_coordinates(elem)
|
||||
box = self.pt_from_pixel(pxl_coords)
|
||||
if interword_spaces:
|
||||
# if `--interword-spaces` is true, append a space
|
||||
# to the end of each text element to allow simpler PDF viewers
|
||||
# such as PDF.js to better recognize words in search and copy
|
||||
# and paste. Do not remove space from last word in line, even
|
||||
# though it would look better, because it will interfere with
|
||||
# naive text extraction. \n does not work either.
|
||||
elemtxt += ' '
|
||||
box = Rect._make(
|
||||
(
|
||||
box.x1,
|
||||
line_box.y1,
|
||||
box.x2 + pdf.stringWidth(' ', fontname, line_height),
|
||||
line_box.y2,
|
||||
)
|
||||
)
|
||||
box_width = box.x2 - box.x1
|
||||
font_width = pdf.stringWidth(elemtxt, fontname, fontsize)
|
||||
|
||||
# draw the bbox border
|
||||
if False: # pragma: no cover
|
||||
pdf.rect(
|
||||
box.x1, self.height - line_box.y2, box_width, line_height, fill=0
|
||||
)
|
||||
|
||||
# Adjust relative position of cursor
|
||||
# This is equivalent to:
|
||||
# text.setTextOrigin(pt.x1, self.height - line_box.y2)
|
||||
# but the former generates a full text reposition matrix (Tm) in the
|
||||
# content stream while this issues a "offset" (Td) command.
|
||||
# .moveCursor() is relative to start of the text line, where the
|
||||
# "text line" means whatever reportlab defines it as. Do not use
|
||||
# use .getCursor(), since moveCursor() rather unintuitively plans
|
||||
# its moves relative to .getStartOfLine().
|
||||
# For skewed lines, in the text transform we set up a rotated
|
||||
# coordinate system, so we don't have to account for the
|
||||
# incremental offset. Surprisingly most PDF viewers can handle this.
|
||||
cursor = text.getStartOfLine()
|
||||
dx = box.x1 - cursor[0]
|
||||
dy = baseline_y2 - cursor[1]
|
||||
text.moveCursor(dx, dy)
|
||||
|
||||
# If reportlab tells us this word is 0 units wide, our best seems
|
||||
# to be to suppress this text
|
||||
if font_width > 0:
|
||||
#text.setHorizScale(100 * box_width / font_width)
|
||||
text.textOut(elemtxt)
|
||||
pdf.drawText(text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Convert hocr file to PDF')
|
||||
parser.add_argument(
|
||||
'-b',
|
||||
'--boundingboxes',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help='Show bounding boxes borders',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-r',
|
||||
'--resolution',
|
||||
type=int,
|
||||
default=300,
|
||||
help='Resolution of the image that was OCRed',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-i',
|
||||
'--image',
|
||||
default=None,
|
||||
help='Path to the image to be placed above the text',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--interword-spaces',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Add spaces between words',
|
||||
)
|
||||
parser.add_argument('hocrfile', help='Path to the hocr file to be parsed')
|
||||
parser.add_argument('outputfile', help='Path to the PDF file to be generated')
|
||||
args = parser.parse_args()
|
||||
|
||||
hocr = HocrTransform(hocr_filename=args.hocrfile, dpi=args.resolution)
|
||||
hocr.to_pdf(
|
||||
out_filename=args.outputfile,
|
||||
image_filename=args.image,
|
||||
show_bounding_boxes=args.boundingboxes,
|
||||
interword_spaces=args.interword_spaces,
|
||||
)
|
||||
|
518
hocrtransformpdf.py
Executable file
518
hocrtransformpdf.py
Executable file
@ -0,0 +1,518 @@
|
||||
#!venv/bin python3
|
||||
#
|
||||
# Copyright (c) 2010, Jonathan Brinley
|
||||
# Original version from: https://github.com/jbrinley/HocrConverter
|
||||
#
|
||||
# Copyright (c) 2013-14, Julien Pfefferkorn
|
||||
# Modifications
|
||||
#
|
||||
# Copyright (c) 2015-16, James R. Barlow
|
||||
# Set text to transparent
|
||||
|
||||
# Copyright (c) 2022, WordMord & Alex Roidl
|
||||
# Set text back to visible and change bounding boxes
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the
|
||||
# "Software"), to deal in the Software without restriction, including
|
||||
# without limitation the rights to use, copy, modify, merge, publish,
|
||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||
# permit persons to whom the Software is furnished to do so, subject to
|
||||
# the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
from itertools import chain
|
||||
from math import atan, cos, sin
|
||||
from pathlib import Path
|
||||
from typing import Any, NamedTuple, Optional, Tuple, Union
|
||||
from xml.etree import ElementTree
|
||||
|
||||
from reportlab.lib.colors import black, cyan, magenta, red
|
||||
from reportlab.lib.units import inch
|
||||
from reportlab.pdfgen.canvas import Canvas
|
||||
from reportlab.pdfbase import pdfmetrics
|
||||
from reportlab.pdfbase.ttfonts import TTFont
|
||||
from reportlab.pdfbase.pdfmetrics import registerFontFamily
|
||||
|
||||
|
||||
|
||||
# According to Wikipedia these languages are supported in the ISO-8859-1 character
|
||||
# set, meaning reportlab can generate them and they are compatible with hocr,
|
||||
# assuming Tesseract has the necessary languages installed. Note that there may
|
||||
# not be language packs for them.
|
||||
HOCR_OK_LANGS = frozenset(
|
||||
[
|
||||
# Languages fully covered by Latin-1:
|
||||
'afr', # Afrikaans
|
||||
'alb', # Albanian
|
||||
'ast', # Leonese
|
||||
'baq', # Basque
|
||||
'bre', # Breton
|
||||
'cos', # Corsican
|
||||
'eng', # English
|
||||
'eus', # Basque
|
||||
'fao', # Faoese
|
||||
'gla', # Scottish Gaelic
|
||||
'glg', # Galician
|
||||
'glv', # Manx
|
||||
'ice', # Icelandic
|
||||
'ind', # Indonesian
|
||||
'isl', # Icelandic
|
||||
'ita', # Italian
|
||||
'ltz', # Luxembourgish
|
||||
'mal', # Malay Rumi
|
||||
'mga', # Irish
|
||||
'nor', # Norwegian
|
||||
'oci', # Occitan
|
||||
'por', # Portugeuse
|
||||
'roh', # Romansh
|
||||
'sco', # Scots
|
||||
'sma', # Sami
|
||||
'spa', # Spanish
|
||||
'sqi', # Albanian
|
||||
'swa', # Swahili
|
||||
'swe', # Swedish
|
||||
'tgl', # Tagalog
|
||||
'wln', # Walloon
|
||||
# Languages supported by Latin-1 except for a few rare characters that OCR
|
||||
# is probably not trained to recognize anyway:
|
||||
'cat', # Catalan
|
||||
'cym', # Welsh
|
||||
'dan', # Danish
|
||||
'deu', # German
|
||||
'dut', # Dutch
|
||||
'est', # Estonian
|
||||
'fin', # Finnish
|
||||
'fra', # French
|
||||
'hun', # Hungarian
|
||||
'kur', # Kurdish
|
||||
'nld', # Dutch
|
||||
'wel', # Welsh
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Element = ElementTree.Element
|
||||
|
||||
|
||||
class Rect(NamedTuple): # pylint: disable=inherit-non-class
|
||||
"""A rectangle for managing PDF coordinates."""
|
||||
|
||||
x1: Any
|
||||
y1: Any
|
||||
x2: Any
|
||||
y2: Any
|
||||
|
||||
|
||||
class HocrTransformError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class HocrTransform:
|
||||
|
||||
"""
|
||||
A class for converting documents from the hOCR format.
|
||||
For details of the hOCR format, see:
|
||||
http://kba.cloud/hocr-spec/
|
||||
"""
|
||||
|
||||
box_pattern = re.compile(r'bbox((\s+\d+){4})')
|
||||
baseline_pattern = re.compile(
|
||||
r'''
|
||||
baseline \s+
|
||||
([\-\+]?\d*\.?\d*) \s+ # +/- decimal float
|
||||
([\-\+]?\d+) # +/- int''',
|
||||
re.VERBOSE,
|
||||
)
|
||||
ligatures = str.maketrans(
|
||||
{'ff': 'ff', 'ffi': 'ffi', 'ffl': 'ffl', 'fi': 'fi', 'fl': 'fl'}
|
||||
)
|
||||
|
||||
def __init__(self, *, hocr_filename: Union[str, Path], dpi: float):
|
||||
self.dpi = dpi
|
||||
self.hocr = ElementTree.parse(os.fspath(hocr_filename))
|
||||
|
||||
# if the hOCR file has a namespace, ElementTree requires its use to
|
||||
# find elements
|
||||
matches = re.match(r'({.*})html', self.hocr.getroot().tag)
|
||||
self.xmlns = ''
|
||||
if matches:
|
||||
self.xmlns = matches.group(1)
|
||||
|
||||
# get dimension in pt (not pixel!!!!) of the OCRed image
|
||||
self.width, self.height = None, None
|
||||
for div in self.hocr.findall(self._child_xpath('div', 'ocr_page')):
|
||||
coords = self.element_coordinates(div)
|
||||
pt_coords = self.pt_from_pixel(coords)
|
||||
self.width = pt_coords.x2 - pt_coords.x1
|
||||
self.height = pt_coords.y2 - pt_coords.y1
|
||||
# there shouldn't be more than one, and if there is, we don't want
|
||||
# it
|
||||
break
|
||||
if self.width is None or self.height is None:
|
||||
raise HocrTransformError("hocr file is missing page dimensions")
|
||||
|
||||
def __str__(self): # pragma: no cover
|
||||
"""
|
||||
Return the textual content of the HTML body
|
||||
"""
|
||||
if self.hocr is None:
|
||||
return ''
|
||||
body = self.hocr.find(self._child_xpath('body'))
|
||||
if body:
|
||||
return self._get_element_text(body)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def _get_element_text(self, element: Element):
|
||||
"""
|
||||
Return the textual content of the element and its children
|
||||
"""
|
||||
text = ''
|
||||
if element.text is not None:
|
||||
text += element.text
|
||||
for child in element:
|
||||
text += self._get_element_text(child)
|
||||
if element.tail is not None:
|
||||
text += element.tail
|
||||
return text
|
||||
|
||||
@classmethod
|
||||
def element_coordinates(cls, element: Element) -> Rect:
|
||||
"""
|
||||
Returns a tuple containing the coordinates of the bounding box around
|
||||
an element
|
||||
"""
|
||||
out = Rect._make(0 for _ in range(4))
|
||||
if 'title' in element.attrib:
|
||||
matches = cls.box_pattern.search(element.attrib['title'])
|
||||
if matches:
|
||||
coords = matches.group(1).split()
|
||||
out = Rect._make(int(coords[n]) for n in range(4))
|
||||
return out
|
||||
|
||||
@classmethod
|
||||
def baseline(cls, element: Element) -> Tuple[float, float]:
|
||||
"""
|
||||
Returns a tuple containing the baseline slope and intercept.
|
||||
"""
|
||||
if 'title' in element.attrib:
|
||||
matches = cls.baseline_pattern.search(element.attrib['title'])
|
||||
if matches:
|
||||
return float(matches.group(1)), int(matches.group(2))
|
||||
return (0.0, 0.0)
|
||||
|
||||
def pt_from_pixel(self, pxl) -> Rect:
|
||||
"""
|
||||
Returns the quantity in PDF units (pt) given quantity in pixels
|
||||
"""
|
||||
return Rect._make((c / self.dpi * inch) for c in pxl)
|
||||
|
||||
def _child_xpath(self, html_tag: str, html_class: Optional[str] = None) -> str:
|
||||
xpath = f".//{self.xmlns}{html_tag}"
|
||||
if html_class:
|
||||
xpath += f"[@class='{html_class}']"
|
||||
return xpath
|
||||
|
||||
@classmethod
|
||||
def replace_unsupported_chars(cls, s: str) -> str:
|
||||
"""
|
||||
Given an input string, returns the corresponding string that:
|
||||
* is available in the Helvetica facetype
|
||||
* does not contain any ligature (to allow easy search in the PDF file)
|
||||
"""
|
||||
return s.translate(cls.ligatures)
|
||||
|
||||
def topdown_position(self, element):
|
||||
pxl_line_coords = self.element_coordinates(element)
|
||||
line_box = self.pt_from_pixel(pxl_line_coords)
|
||||
# Coordinates here are still in the hocr coordinate system, so 0 on the y axis
|
||||
# is the top of the page and increasing values of y will move towards the
|
||||
# bottom of the page.
|
||||
return line_box.y2
|
||||
|
||||
def to_pdf(
|
||||
self,
|
||||
*,
|
||||
out_filename: Path,
|
||||
image_filename: Optional[Path] = None,
|
||||
show_bounding_boxes: bool = False,
|
||||
fontname: str = "Helvetica",
|
||||
invisible_text: bool = False,
|
||||
interword_spaces: bool = False,
|
||||
) -> None:
|
||||
"""
|
||||
Creates a PDF file with an image superimposed on top of the text.
|
||||
Text is positioned according to the bounding box of the lines in
|
||||
the hOCR file.
|
||||
The image need not be identical to the image used to create the hOCR
|
||||
file.
|
||||
It can have a lower resolution, different color mode, etc.
|
||||
|
||||
Arguments:
|
||||
out_filename: Path of PDF to write.
|
||||
image_filename: Image to use for this file. If omitted, the OCR text
|
||||
is shown.
|
||||
show_bounding_boxes: Show bounding boxes around various text regions,
|
||||
for debugging.
|
||||
fontname: Name of font to use.
|
||||
invisible_text: If True, text is rendered invisible so that is
|
||||
selectable but never drawn. If False, text is visible and may
|
||||
be seen if the image is skipped or deleted in Acrobat.
|
||||
interword_spaces: If True, insert spaces between words rather than
|
||||
drawing each word without spaces. Generally this improves text
|
||||
extraction.
|
||||
"""
|
||||
# create the PDF file
|
||||
# page size in points (1/72 in.)
|
||||
|
||||
pdfmetrics.registerFont(TTFont('Greek', 'static/fonts/greek.ttf'))
|
||||
pdfmetrics.registerFont(TTFont('GreekB', 'static/fonts/greek-bold.ttf'))
|
||||
registerFontFamily('Greek', normal='Greek', bold='GreekB')
|
||||
|
||||
pdf = Canvas(
|
||||
os.fspath(out_filename),
|
||||
pagesize=(self.width, self.height),
|
||||
pageCompression=1,
|
||||
)
|
||||
|
||||
if image_filename is not None:
|
||||
pdf.drawImage(
|
||||
os.fspath(image_filename), 0, 0, width=self.width, height=self.height
|
||||
)
|
||||
|
||||
# draw bounding box for each paragraph
|
||||
# light blue for bounding box of paragraph
|
||||
pdf.setStrokeColor(black)
|
||||
# light blue for bounding box of paragraph
|
||||
pdf.setFillColor(black)
|
||||
pdf.setLineWidth(1) # no line for bounding box
|
||||
for elem in self.hocr.iterfind(self._child_xpath('p', 'ocr_par')):
|
||||
elemtxt = self._get_element_text(elem).rstrip()
|
||||
if len(elemtxt) == 0:
|
||||
continue
|
||||
|
||||
pxl_coords = self.element_coordinates(elem)
|
||||
pt = self.pt_from_pixel(pxl_coords)
|
||||
|
||||
# draw the bbox border
|
||||
if show_bounding_boxes: # pragma: no cover
|
||||
pdf.rect(
|
||||
pt.x1, self.height - pt.y2, pt.x2 - pt.x1, pt.y2 - pt.y1, fill=1
|
||||
)
|
||||
|
||||
found_lines = False
|
||||
for line in sorted(
|
||||
chain(
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_header')),
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_line')),
|
||||
self.hocr.iterfind(self._child_xpath('span', 'ocr_textfloat')),
|
||||
),
|
||||
key=self.topdown_position,
|
||||
):
|
||||
found_lines = True
|
||||
self._do_line(
|
||||
pdf,
|
||||
line,
|
||||
"ocrx_word",
|
||||
fontname,
|
||||
invisible_text,
|
||||
interword_spaces,
|
||||
show_bounding_boxes,
|
||||
)
|
||||
|
||||
if not found_lines:
|
||||
# Tesseract did not report any lines (just words)
|
||||
root = self.hocr.find(self._child_xpath('div', 'ocr_page'))
|
||||
self._do_line(
|
||||
pdf,
|
||||
root,
|
||||
"ocrx_word",
|
||||
fontname,
|
||||
invisible_text,
|
||||
interword_spaces,
|
||||
show_bounding_boxes,
|
||||
)
|
||||
# put the image on the page, scaled to fill the page
|
||||
|
||||
|
||||
# finish up the page and save it
|
||||
pdf.showPage()
|
||||
pdf.save()
|
||||
|
||||
@classmethod
|
||||
def polyval(cls, poly, x): # pragma: no cover
|
||||
return x * poly[0] + poly[1]
|
||||
|
||||
def _do_line(
|
||||
self,
|
||||
pdf: Canvas,
|
||||
line: Optional[Element],
|
||||
elemclass: str,
|
||||
fontname: str,
|
||||
invisible_text: bool,
|
||||
interword_spaces: bool,
|
||||
show_bounding_boxes: bool,
|
||||
):
|
||||
if not line:
|
||||
return
|
||||
pxl_line_coords = self.element_coordinates(line)
|
||||
line_box = self.pt_from_pixel(pxl_line_coords)
|
||||
line_height = line_box.y2 - line_box.y1
|
||||
|
||||
slope, pxl_intercept = self.baseline(line)
|
||||
if abs(slope) < 0.005:
|
||||
slope = 0.0
|
||||
angle = atan(slope)
|
||||
cos_a, sin_a = cos(angle), sin(angle)
|
||||
|
||||
text = pdf.beginText()
|
||||
intercept = pxl_intercept / self.dpi * inch
|
||||
|
||||
# Don't allow the font to break out of the bounding box. Division by
|
||||
# cos_a accounts for extra clearance between the glyph's vertical axis
|
||||
# on a sloped baseline and the edge of the bounding box.
|
||||
fontsize = (line_height - abs(intercept)) / cos_a * 1.2
|
||||
#fontsize = 10.5
|
||||
text.setFont('Greek', fontsize)
|
||||
#if invisible_text:
|
||||
# text.setTextRenderMode(3) # Invisible (indicates OCR text)
|
||||
|
||||
# Intercept is normally negative, so this places it above the bottom
|
||||
# of the line box
|
||||
baseline_y2 = self.height - (line_box.y2 + intercept)
|
||||
|
||||
if False: # pragma: no cover
|
||||
# draw the baseline in magenta, dashed
|
||||
pdf.setDash()
|
||||
pdf.setStrokeColor(magenta)
|
||||
pdf.setLineWidth(0.5)
|
||||
# negate slope because it is defined as a rise/run in pixel
|
||||
# coordinates and page coordinates have the y axis flipped
|
||||
pdf.line(
|
||||
line_box.x1,
|
||||
baseline_y2,
|
||||
line_box.x2,
|
||||
self.polyval((-slope, baseline_y2), line_box.x2 - line_box.x1),
|
||||
)
|
||||
# light green for bounding box of word/line
|
||||
pdf.setDash(6, 3)
|
||||
pdf.setStrokeColor(red)
|
||||
|
||||
#text.setTextTransform(cos_a, -sin_a, sin_a, cos_a, line_box.x1, baseline_y2)
|
||||
text.setTextOrigin(line_box.x1, baseline_y2)
|
||||
##pdf.translate(line_box.x1, baseline_y2)
|
||||
pdf.setFillColor(black) # text in black
|
||||
|
||||
elements = line.findall(self._child_xpath('span', elemclass))
|
||||
for elem in elements:
|
||||
elemtxt = self._get_element_text(elem).strip()
|
||||
elemtxt = self.replace_unsupported_chars(elemtxt)
|
||||
if elemtxt == '':
|
||||
continue
|
||||
|
||||
pxl_coords = self.element_coordinates(elem)
|
||||
box = self.pt_from_pixel(pxl_coords)
|
||||
if False:
|
||||
# if `--interword-spaces` is true, append a space
|
||||
# to the end of each text element to allow simpler PDF viewers
|
||||
# such as PDF.js to better recognize words in search and copy
|
||||
# and paste. Do not remove space from last word in line, even
|
||||
# though it would look better, because it will interfere with
|
||||
# naive text extraction. \n does not work either.
|
||||
elemtxt += ' '
|
||||
box = Rect._make(
|
||||
(
|
||||
box.x1,
|
||||
line_box.y1,
|
||||
box.x2 + pdf.stringWidth(' ', fontname, line_height),
|
||||
line_box.y2,
|
||||
)
|
||||
)
|
||||
box_width = box.x2 - box.x1
|
||||
font_width = pdf.stringWidth(elemtxt, fontname, fontsize)
|
||||
|
||||
# draw the bbox border
|
||||
if False: # pragma: no cover
|
||||
pdf.rect(
|
||||
box.x1, self.height - line_box.y2, box_width, line_height, fill=0
|
||||
)
|
||||
|
||||
# Adjust relative position of cursor
|
||||
# This is equivalent to:
|
||||
# text.setTextOrigin(pt.x1, self.height - line_box.y2)
|
||||
# but the former generates a full text reposition matrix (Tm) in the
|
||||
# content stream while this issues a "offset" (Td) command.
|
||||
# .moveCursor() is relative to start of the text line, where the
|
||||
# "text line" means whatever reportlab defines it as. Do not use
|
||||
# use .getCursor(), since moveCursor() rather unintuitively plans
|
||||
# its moves relative to .getStartOfLine().
|
||||
# For skewed lines, in the text transform we set up a rotated
|
||||
# coordinate system, so we don't have to account for the
|
||||
# incremental offset. Surprisingly most PDF viewers can handle this.
|
||||
cursor = text.getStartOfLine()
|
||||
dx = box.x1 - cursor[0]
|
||||
dy = baseline_y2 - cursor[1]
|
||||
text.moveCursor(dx, dy)
|
||||
|
||||
# If reportlab tells us this word is 0 units wide, our best seems
|
||||
# to be to suppress this text
|
||||
if font_width > 0:
|
||||
#text.setHorizScale(100 * box_width / font_width)
|
||||
text.textOut(elemtxt)
|
||||
pdf.drawText(text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Convert hocr file to PDF')
|
||||
parser.add_argument(
|
||||
'-b',
|
||||
'--boundingboxes',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help='Show bounding boxes borders',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-r',
|
||||
'--resolution',
|
||||
type=int,
|
||||
default=300,
|
||||
help='Resolution of the image that was OCRed',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-i',
|
||||
'--image',
|
||||
default=None,
|
||||
help='Path to the image to be placed above the text',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--interword-spaces',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Add spaces between words',
|
||||
)
|
||||
parser.add_argument('hocrfile', help='Path to the hocr file to be parsed')
|
||||
parser.add_argument('outputfile', help='Path to the PDF file to be generated')
|
||||
args = parser.parse_args()
|
||||
|
||||
hocr = HocrTransform(hocr_filename=args.hocrfile, dpi=args.resolution)
|
||||
hocr.to_pdf(
|
||||
out_filename=args.outputfile,
|
||||
image_filename=args.image,
|
||||
show_bounding_boxes=args.boundingboxes,
|
||||
interword_spaces=args.interword_spaces,
|
||||
)
|
||||
|
BIN
static/fonts/AC-Poiret.ttf
Normal file
BIN
static/fonts/AC-Poiret.ttf
Normal file
Binary file not shown.
BIN
static/fonts/Compagnon-Roman.otf
Normal file
BIN
static/fonts/Compagnon-Roman.otf
Normal file
Binary file not shown.
BIN
static/fonts/SolideMirage-Etroit.otf
Normal file
BIN
static/fonts/SolideMirage-Etroit.otf
Normal file
Binary file not shown.
BIN
static/fonts/greek-bold.ttf
Normal file
BIN
static/fonts/greek-bold.ttf
Normal file
Binary file not shown.
BIN
static/fonts/greek.ttf
Executable file
BIN
static/fonts/greek.ttf
Executable file
Binary file not shown.
BIN
static/fonts/zarathustra-v01.otf
Normal file
BIN
static/fonts/zarathustra-v01.otf
Normal file
Binary file not shown.
0
static/hocr/anthropoktonia.hocr
Normal file
0
static/hocr/anthropoktonia.hocr
Normal file
142
static/hocr/gynaikoktonia (another copy).hocr
Normal file
142
static/hocr/gynaikoktonia (another copy).hocr
Normal file
@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title></title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name='ocr-system' content='tesseract 3.04.01' />
|
||||
<meta name='ocr-capabilities' content='ocr_page ocr_carea ocr_par ocr_line ocrx_word'/>
|
||||
</head>
|
||||
<body>
|
||||
<div class='ocr_page' id='page_1' title='image "images/anthropoktonia.png"; bbox 0 0 2480 3508; ppageno 0'>
|
||||
<div class='ocr_carea' id='block_1_1' title="bbox 610 316 1872 479">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_1' title="bbox 610 316 1872 479">
|
||||
<span class='ocr_line' id='line_1_1' title="bbox 610 316 1872 349; baseline 0 -1; x_size 39.351353; x_descenders 7.3513517; x_ascenders 9.9459457"><span class='ocrx_word' id='word_1_1' title='bbox 610 316 869 348; x_wconf 93' lang='ell' dir='ltr'>ΕΓΚΛΗΜΑΤΑ</span> <span class='ocrx_word' id='word_1_2' title='bbox 884 316 993 348; x_wconf 96' lang='ell' dir='ltr'>ΚΑΤΑ</span> <span class='ocrx_word' id='word_1_3' title='bbox 1005 316 1083 348; x_wconf 95' lang='ell' dir='ltr'>ΤΗΣ</span> <span class='ocrx_word' id='word_1_4' title='bbox 1097 316 1207 348; x_wconf 95' lang='ell' dir='ltr'>ΖΩΗΣ</span> <span class='ocrx_word' id='word_1_5' title='bbox 1223 316 1288 348; x_wconf 96' lang='ell' dir='ltr'>ΚΑΙ</span> <span class='ocrx_word' id='word_1_6' title='bbox 1305 316 1556 349; x_wconf 93' lang='ell' dir='ltr'>ΠΡΟΣΒΟΛΕΣ</span> <span class='ocrx_word' id='word_1_7' title='bbox 1568 316 1652 349; x_wconf 92' lang='ell' dir='ltr'>ΤΩΝ</span> <span class='ocrx_word' id='word_1_8' title='bbox 1667 316 1872 349; x_wconf 92' lang='ell' dir='ltr'>ΘΥΛΗΚΟΤΗΤ*</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_2' title="bbox 769 435 1711 479; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_9' title='bbox 769 438 789 470; x_wconf 94' lang='ell' dir='ltr'>Ι.</span> <span class='ocrx_word' id='word_1_10' title='bbox 807 435 1033 479; x_wconf 89' lang='ell' dir='ltr'>Εγκλήματα</span> <span class='ocrx_word' id='word_1_11' title='bbox 1048 435 1200 479; x_wconf 90' lang='ell' dir='ltr'>βλάβης</span> <span class='ocrx_word' id='word_1_12' title='bbox 1212 446 1278 479; x_wconf 91' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_13' title='bbox 1293 435 1391 479; x_wconf 90' lang='ell' dir='ltr'>ζωής</span> <span class='ocrx_word' id='word_1_14' title='bbox 1404 446 1474 471; x_wconf 91' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_15' title='bbox 1491 435 1711 479; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_2' title="bbox 983 557 1496 662">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_2' title="bbox 983 557 1496 662">
|
||||
<span class='ocr_line' id='line_1_3' title="bbox 1129 557 1351 601; baseline 0.005 -9; x_size 43; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_16' title='bbox 1129 557 1264 601; x_wconf 92' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_17' title='bbox 1279 560 1351 593; x_wconf 89' lang='ell'>299</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_4' title="bbox 983 618 1496 662; baseline 0.002 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_18' title='bbox 983 618 1319 662; x_wconf 91' lang='ell' dir='ltr'>Γυναικοκτονία</span> <span class='ocrx_word' id='word_1_19' title='bbox 1334 629 1380 662; x_wconf 93' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_20' title='bbox 1395 618 1496 654; x_wconf 92' lang='ell' dir='ltr'>δόλο</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_3' title="bbox 243 740 2197 845">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_3' title="bbox 243 740 2197 845">
|
||||
<span class='ocr_line' id='line_1_5' title="bbox 244 740 2166 784; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_21' title='bbox 244 743 274 775; x_wconf 93' lang='ell'>1.</span> <span class='ocrx_word' id='word_1_22' title='bbox 288 740 435 784; x_wconf 89' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_23' title='bbox 450 740 625 775; x_wconf 88' lang='ell' dir='ltr'>σκότωσε</span> <span class='ocrx_word' id='word_1_24' title='bbox 641 740 761 775; x_wconf 91' lang='ell' dir='ltr'>άλλη</span> <span class='ocrx_word' id='word_1_25' title='bbox 774 740 994 784; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_26' title='bbox 1009 751 1052 784; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_27' title='bbox 1070 740 1247 784; x_wconf 88' lang='ell' dir='ltr'>κάθειρξη</span> <span class='ocrx_word' id='word_1_28' title='bbox 1266 740 1395 784; x_wconf 89' lang='ell' dir='ltr'>ισόβια</span> <span class='ocrx_word' id='word_1_29' title='bbox 1412 740 1431 784; x_wconf 90' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_30' title='bbox 1448 740 1666 784; x_wconf 90' lang='ell' dir='ltr'>πρόσκαιρη</span> <span class='ocrx_word' id='word_1_31' title='bbox 1681 740 1933 784; x_wconf 84' lang='ell' dir='ltr'>τουλάχιστον</span> <span class='ocrx_word' id='word_1_32' title='bbox 1948 740 2045 775; x_wconf 90' lang='ell' dir='ltr'>δέκα</span> <span class='ocrx_word' id='word_1_33' title='bbox 2060 740 2166 775; x_wconf 93' lang='ell' dir='ltr'>ετών.</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_6' title="bbox 243 801 2197 845; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_34' title='bbox 243 804 274 836; x_wconf 93' lang='ell'>2.</span> <span class='ocrx_word' id='word_1_35' title='bbox 291 804 340 836; x_wconf 93' lang='ell' dir='ltr'>Αν</span> <span class='ocrx_word' id='word_1_36' title='bbox 357 812 376 845; x_wconf 94' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_37' title='bbox 392 801 514 845; x_wconf 88' lang='ell' dir='ltr'>πράξη</span> <span class='ocrx_word' id='word_1_38' title='bbox 531 801 827 845; x_wconf 90' lang='ell' dir='ltr'>αποφασίστηκε</span> <span class='ocrx_word' id='word_1_39' title='bbox 846 812 907 836; x_wconf 90' lang='ell' dir='ltr'>και</span> <span class='ocrx_word' id='word_1_40' title='bbox 920 801 1166 845; x_wconf 92' lang='ell' dir='ltr'>εκτελέστηκε</span> <span class='ocrx_word' id='word_1_41' title='bbox 1183 812 1227 836; x_wconf 94' lang='ell' dir='ltr'>σε</span> <span class='ocrx_word' id='word_1_42' title='bbox 1245 801 1399 845; x_wconf 90' lang='ell' dir='ltr'>βρασμό</span> <span class='ocrx_word' id='word_1_43' title='bbox 1417 801 1579 845; x_wconf 88' lang='ell' dir='ltr'>ψυχικής</span> <span class='ocrx_word' id='word_1_44' title='bbox 1594 801 1728 845; x_wconf 91' lang='ell' dir='ltr'>ορμής,</span> <span class='ocrx_word' id='word_1_45' title='bbox 1744 801 1992 845; x_wconf 90' lang='ell' dir='ltr'>επιβάλλεται</span> <span class='ocrx_word' id='word_1_46' title='bbox 2007 801 2197 845; x_wconf 88' lang='ell' dir='ltr'>κάθειρξη.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_4' title="bbox 917 923 1561 1028">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_4' title="bbox 917 923 1561 1028">
|
||||
<span class='ocr_line' id='line_1_7' title="bbox 1129 923 1352 967; baseline 0.004 -9; x_size 43; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_47' title='bbox 1129 923 1264 967; x_wconf 94' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_48' title='bbox 1279 926 1352 959; x_wconf 91' lang='ell'>●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_8' title="bbox 917 984 1561 1028; baseline 0.002 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_49' title='bbox 917 984 1253 1028; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_50' title='bbox 1267 985 1348 1020; x_wconf 91' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_51' title='bbox 1364 984 1561 1028; x_wconf 91' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_5' title="bbox 238 1106 2235 1211">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_5' title="bbox 238 1106 2235 1211">
|
||||
<span class='ocr_line' id='line_1_9' title="bbox 238 1106 2235 1150; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_52' title='bbox 238 1106 386 1150; x_wconf 88' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_53' title='bbox 407 1106 636 1150; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_54' title='bbox 660 1117 722 1141; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_55' title='bbox 742 1106 920 1141; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_56' title='bbox 943 1106 1264 1150; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_57' title='bbox 1286 1106 1432 1150; x_wconf 86' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_58' title='bbox 1453 1106 1531 1141; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_59' title='bbox 1554 1106 1754 1141; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_60' title='bbox 1777 1117 1838 1141; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_61' title='bbox 1858 1106 2019 1150; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_62' title='bbox 2043 1106 2235 1150; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_10' title="bbox 240 1167 2195 1211; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_63' title='bbox 240 1178 309 1202; x_wconf 95' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_64' title='bbox 326 1167 499 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_65' title='bbox 515 1178 576 1202; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_66' title='bbox 589 1167 667 1202; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_67' title='bbox 683 1167 787 1202; x_wconf 95' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_68' title='bbox 802 1168 845 1211; x_wconf 89' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_69' title='bbox 861 1167 981 1202; x_wconf 90' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_70' title='bbox 995 1178 1071 1202; x_wconf 95' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_71' title='bbox 1088 1167 1234 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_72' title='bbox 1250 1167 1328 1202; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_73' title='bbox 1344 1167 1477 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_74' title='bbox 1494 1167 1682 1202; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_75' title='bbox 1695 1167 1914 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_76' title='bbox 1929 1178 1972 1211; x_wconf 91' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_77' title='bbox 1988 1167 2195 1211; x_wconf 91' lang='ell' dir='ltr'>●●●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_6' title="bbox 972 1289 1510 1394">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_6' title="bbox 972 1289 1510 1394">
|
||||
<span class='ocr_line' id='line_1_11' title="bbox 1129 1289 1351 1333; baseline 0 -8; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_78' title='bbox 1129 1289 1264 1333; x_wconf 94' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_79' title='bbox 1279 1292 1351 1325; x_wconf 91' lang='ell'>301</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_12' title="bbox 972 1350 1510 1394; baseline 0 -8; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_80' title='bbox 972 1350 1193 1394; x_wconf 91' lang='ell' dir='ltr'>Συμμετοχή</span> <span class='ocrx_word' id='word_1_81' title='bbox 1210 1361 1256 1386; x_wconf 93' lang='ell' dir='ltr'>σε</span> <span class='ocrx_word' id='word_1_82' title='bbox 1271 1350 1510 1386; x_wconf 91' lang='ell' dir='ltr'>αυτοκτονία</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_7' title="bbox 238 1472 2238 1638">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_7' title="bbox 238 1472 2238 1638">
|
||||
<span class='ocr_line' id='line_1_13' title="bbox 238 1472 2236 1516; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_83' title='bbox 238 1472 386 1516; x_wconf 92' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_84' title='bbox 412 1472 612 1507; x_wconf 90' lang='ell' dir='ltr'>κατέπεισε</span> <span class='ocrx_word' id='word_1_85' title='bbox 637 1472 758 1507; x_wconf 92' lang='ell' dir='ltr'>άλλην</span> <span class='ocrx_word' id='word_1_86' title='bbox 781 1483 829 1507; x_wconf 90' lang='ell' dir='ltr'>να</span> <span class='ocrx_word' id='word_1_87' title='bbox 853 1472 1142 1516; x_wconf 90' lang='ell' dir='ltr'>αυτοκτονήσει,</span> <span class='ocrx_word' id='word_1_88' title='bbox 1168 1483 1216 1507; x_wconf 90' lang='ell' dir='ltr'>αν</span> <span class='ocrx_word' id='word_1_89' title='bbox 1238 1472 1442 1516; x_wconf 92' lang='ell' dir='ltr'>τελέστηκε</span> <span class='ocrx_word' id='word_1_90' title='bbox 1469 1483 1488 1516; x_wconf 98' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_91' title='bbox 1514 1472 1745 1507; x_wconf 90' lang='ell' dir='ltr'>αυτοκτονία</span> <span class='ocrx_word' id='word_1_92' title='bbox 1771 1472 1790 1516; x_wconf 98' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_93' title='bbox 1816 1472 1915 1516; x_wconf 88' lang='ell' dir='ltr'>έγινε</span> <span class='ocrx_word' id='word_1_94' title='bbox 1941 1472 2138 1516; x_wconf 90' lang='ell' dir='ltr'>απόπειρά</span> <span class='ocrx_word' id='word_1_95' title='bbox 2160 1483 2236 1516; x_wconf 98' lang='ell' dir='ltr'>της,</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_14' title="bbox 244 1533 2238 1577; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_96' title='bbox 244 1533 371 1577; x_wconf 90' lang='ell' dir='ltr'>καθώς</span> <span class='ocrx_word' id='word_1_97' title='bbox 390 1544 450 1568; x_wconf 90' lang='ell' dir='ltr'>και</span> <span class='ocrx_word' id='word_1_98' title='bbox 464 1533 602 1577; x_wconf 95' lang='ell' dir='ltr'>όποιος</span> <span class='ocrx_word' id='word_1_99' title='bbox 618 1533 746 1568; x_wconf 91' lang='ell' dir='ltr'>έδωσε</span> <span class='ocrx_word' id='word_1_100' title='bbox 766 1533 932 1577; x_wconf 90' lang='ell' dir='ltr'>βοήθεια</span> <span class='ocrx_word' id='word_1_101' title='bbox 950 1533 1043 1568; x_wconf 90' lang='ell' dir='ltr'>κατά</span> <span class='ocrx_word' id='word_1_102' title='bbox 1056 1544 1124 1577; x_wconf 96' lang='ell' dir='ltr'>την</span> <span class='ocrx_word' id='word_1_103' title='bbox 1138 1533 1275 1577; x_wconf 92' lang='ell' dir='ltr'>τέλεσή</span> <span class='ocrx_word' id='word_1_104' title='bbox 1291 1544 1367 1577; x_wconf 98' lang='ell' dir='ltr'>της,</span> <span class='ocrx_word' id='word_1_105' title='bbox 1387 1544 1406 1577; x_wconf 98' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_106' title='bbox 1424 1533 1543 1568; x_wconf 90' lang='ell' dir='ltr'>οποία</span> <span class='ocrx_word' id='word_1_107' title='bbox 1559 1533 1814 1577; x_wconf 90' lang='ell' dir='ltr'>διαφορετικά</span> <span class='ocrx_word' id='word_1_108' title='bbox 1830 1534 1900 1568; x_wconf 91' lang='ell' dir='ltr'>δεν</span> <span class='ocrx_word' id='word_1_109' title='bbox 1916 1534 1968 1568; x_wconf 90' lang='ell' dir='ltr'>θα</span> <span class='ocrx_word' id='word_1_110' title='bbox 1985 1533 2077 1577; x_wconf 90' lang='ell' dir='ltr'>ήταν</span> <span class='ocrx_word' id='word_1_111' title='bbox 2093 1533 2238 1577; x_wconf 97' lang='ell' dir='ltr'>εφικτή,</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_15' title="bbox 240 1594 741 1638; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_112' title='bbox 240 1594 459 1638; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_113' title='bbox 474 1605 518 1638; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_114' title='bbox 534 1594 741 1638; x_wconf 92' lang='ell' dir='ltr'>φυλάκιση.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_8' title="bbox 933 1717 1548 1822">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_8' title="bbox 933 1717 1548 1822">
|
||||
<span class='ocr_line' id='line_1_16' title="bbox 1129 1717 1351 1761; baseline 0 -8; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_115' title='bbox 1129 1717 1264 1761; x_wconf 99' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_116' title='bbox 1279 1720 1351 1753; x_wconf 91' lang='ell'>302</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_17' title="bbox 933 1778 1548 1822; baseline 0.002 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_117' title='bbox 933 1778 1269 1822; x_wconf 91' lang='ell' dir='ltr'>Γυναικοκτονία</span> <span class='ocrx_word' id='word_1_118' title='bbox 1282 1778 1364 1814; x_wconf 99' lang='ell' dir='ltr'>από</span> <span class='ocrx_word' id='word_1_119' title='bbox 1379 1778 1548 1822; x_wconf 91' lang='ell' dir='ltr'>θεσμική αμέλεια</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_9' title="bbox 238 1900 2047 1944">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_9' title="bbox 238 1900 2047 1944">
|
||||
<span class='ocr_line' id='line_1_18' title="bbox 238 1900 2047 1944; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_120' title='bbox 238 1900 386 1944; x_wconf 95' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_121' title='bbox 401 1900 479 1935; x_wconf 90' lang='ell' dir='ltr'>από</span> <span class='ocrx_word' id='word_1_122' title='bbox 495 1900 658 1944; x_wconf 90' lang='ell' dir='ltr'>αμέλεια</span> <span class='ocrx_word' id='word_1_123' title='bbox 673 1900 847 1935; x_wconf 94' lang='ell' dir='ltr'>σκότωσε</span> <span class='ocrx_word' id='word_1_124' title='bbox 863 1900 994 1942; x_wconf 92' lang='ell' dir='ltr'>άλλην,</span> <span class='ocrx_word' id='word_1_125' title='bbox 1009 1900 1227 1944; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_126' title='bbox 1242 1911 1285 1944; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_127' title='bbox 1302 1900 1496 1944; x_wconf 92' lang='ell' dir='ltr'>φυλάκιση</span> <span class='ocrx_word' id='word_1_128' title='bbox 1512 1900 1764 1944; x_wconf 92' lang='ell' dir='ltr'>τουλάχιστον</span> <span class='ocrx_word' id='word_1_129' title='bbox 1777 1900 1891 1944; x_wconf 93' lang='ell' dir='ltr'>τριών</span> <span class='ocrx_word' id='word_1_130' title='bbox 1908 1900 2047 1944; x_wconf 91' lang='ell' dir='ltr'>μηνών.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_10' title="bbox 1110 2022 1373 2119">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_10' title="bbox 1110 2022 1373 2119">
|
||||
<span class='ocr_line' id='line_1_19' title="bbox 1129 2022 1351 2066; baseline 0.005 -9; x_size 43; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_131' title='bbox 1129 2022 1264 2066; x_wconf 99' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_132' title='bbox 1279 2025 1351 2058; x_wconf 91' lang='ell'>303</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_20' title="bbox 1110 2083 1373 2119; baseline 0 0; x_size 41.532211; x_descenders 5.5322127; x_ascenders 11"><span class='ocrx_word' id='word_1_133' title='bbox 1110 2083 1373 2119; x_wconf 91' lang='ell' dir='ltr'>Παιδοκτονία</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_11' title="bbox 242 2205 2238 2310">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_11' title="bbox 242 2205 2238 2310">
|
||||
<span class='ocr_line' id='line_1_21' title="bbox 244 2205 2238 2249; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_134' title='bbox 244 2205 404 2249; x_wconf 89' lang='ell' dir='ltr'>Πατέρας</span> <span class='ocrx_word' id='word_1_135' title='bbox 418 2216 494 2240; x_wconf 95' lang='ell' dir='ltr'>που</span> <span class='ocrx_word' id='word_1_136' title='bbox 514 2216 557 2249; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_137' title='bbox 572 2205 749 2249; x_wconf 94' lang='ell' dir='ltr'>πρόθεση</span> <span class='ocrx_word' id='word_1_138' title='bbox 767 2205 941 2240; x_wconf 96' lang='ell' dir='ltr'>σκότωσε</span> <span class='ocrx_word' id='word_1_139' title='bbox 955 2216 998 2240; x_wconf 96' lang='ell' dir='ltr'>την</span> <span class='ocrx_word' id='word_1_140' title='bbox 1014 2205 1122 2240; x_wconf 90' lang='ell' dir='ltr'>κόρη</span> <span class='ocrx_word' id='word_1_141' title='bbox 1133 2216 1198 2249; x_wconf 98' lang='ell' dir='ltr'>του</span> <span class='ocrx_word' id='word_1_142' title='bbox 1215 2205 1309 2240; x_wconf 90' lang='ell' dir='ltr'>κατά</span> <span class='ocrx_word' id='word_1_143' title='bbox 1326 2205 1345 2249; x_wconf 98' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_144' title='bbox 1364 2205 1456 2249; x_wconf 91' lang='ell' dir='ltr'>μετά</span> <span class='ocrx_word' id='word_1_145' title='bbox 1469 2216 1536 2240; x_wconf 96' lang='ell' dir='ltr'>τον</span> <span class='ocrx_word' id='word_1_146' title='bbox 1548 2205 1694 2247; x_wconf 95' lang='ell' dir='ltr'>τοκετό,</span> <span class='ocrx_word' id='word_1_147' title='bbox 1711 2205 1810 2240; x_wconf 90' lang='ell' dir='ltr'>αλλά</span> <span class='ocrx_word' id='word_1_148' title='bbox 1825 2205 1901 2240; x_wconf 93' lang='ell' dir='ltr'>ενώ</span> <span class='ocrx_word' id='word_1_149' title='bbox 1917 2205 2238 2249; x_wconf 90' lang='ell' dir='ltr'>εξακολουθούσε</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_22' title="bbox 242 2266 2077 2310; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_150' title='bbox 242 2266 368 2310; x_wconf 90' lang='ell' dir='ltr'>ακόμη</span> <span class='ocrx_word' id='word_1_151' title='bbox 387 2277 406 2310; x_wconf 98' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_152' title='bbox 424 2266 633 2310; x_wconf 90' lang='ell' dir='ltr'>διατάραξη</span> <span class='ocrx_word' id='word_1_153' title='bbox 648 2277 717 2301; x_wconf 95' lang='ell' dir='ltr'>του</span> <span class='ocrx_word' id='word_1_154' title='bbox 734 2266 974 2310; x_wconf 90' lang='ell' dir='ltr'>οργανισμού</span> <span class='ocrx_word' id='word_1_155' title='bbox 989 2277 1054 2310; x_wconf 98' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_156' title='bbox 1069 2266 1147 2301; x_wconf 90' lang='ell' dir='ltr'>από</span> <span class='ocrx_word' id='word_1_157' title='bbox 1163 2266 1293 2308; x_wconf 90' lang='ell' dir='ltr'>αυτόν,</span> <span class='ocrx_word' id='word_1_158' title='bbox 1308 2266 1527 2310; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_159' title='bbox 1542 2277 1585 2310; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_160' title='bbox 1604 2266 1781 2310; x_wconf 93' lang='ell' dir='ltr'>κάθειρξη</span> <span class='ocrx_word' id='word_1_161' title='bbox 1799 2266 1874 2310; x_wconf 98' lang='ell' dir='ltr'>έως</span> <span class='ocrx_word' id='word_1_162' title='bbox 1889 2266 1986 2301; x_wconf 90' lang='ell' dir='ltr'>δέκα</span> <span class='ocrx_word' id='word_1_163' title='bbox 2000 2266 2077 2310; x_wconf 98' lang='ell' dir='ltr'>έτη.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_12' title="bbox 959 2449 1521 2493">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_12' title="bbox 959 2449 1521 2493">
|
||||
<span class='ocr_line' id='line_1_23' title="bbox 959 2449 1521 2493; baseline 0.002 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_164' title='bbox 959 2452 993 2484; x_wconf 94' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_165' title='bbox 1011 2449 1240 2493; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_166' title='bbox 1253 2460 1323 2485; x_wconf 91' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_167' title='bbox 1340 2449 1521 2493; x_wconf 93' lang='ell' dir='ltr'>●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_13' title="bbox 1030 2571 1450 2676">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_13' title="bbox 1030 2571 1450 2676">
|
||||
<span class='ocr_line' id='line_1_24' title="bbox 1129 2571 1352 2615; baseline 0 -8; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_168' title='bbox 1129 2571 1264 2615; x_wconf 99' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_169' title='bbox 1279 2574 1352 2607; x_wconf 91' lang='ell'>●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_25' title="bbox 1030 2632 1450 2676; baseline 0.002 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_170' title='bbox 1030 2632 1206 2676; x_wconf 94' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_171' title='bbox 1220 2643 1286 2676; x_wconf 91' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_172' title='bbox 1302 2632 1450 2676; x_wconf 91' lang='ell' dir='ltr'>●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_14' title="bbox 240 2754 2240 3104">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_14' title="bbox 242 2754 2240 2859">
|
||||
<span class='ocr_line' id='line_1_26' title="bbox 244 2754 2240 2798; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_173' title='bbox 244 2757 274 2789; x_wconf 93' lang='ell'>●●</span> <span class='ocrx_word' id='word_1_174' title='bbox 292 2754 440 2798; x_wconf 95' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_175' title='bbox 457 2754 572 2798; x_wconf 96' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_176' title='bbox 589 2765 632 2798; x_wconf 98' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_177' title='bbox 653 2754 864 2798; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_178' title='bbox 884 2765 949 2798; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_179' title='bbox 968 2754 1111 2798; x_wconf 87' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_180' title='bbox 1133 2754 1332 2789; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_181' title='bbox 1347 2765 1415 2798; x_wconf 96' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_182' title='bbox 1435 2754 1558 2798; x_wconf 98' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_183' title='bbox 1577 2765 1643 2798; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_184' title='bbox 1660 2754 1879 2798; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_185' title='bbox 1899 2765 1942 2798; x_wconf 91' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_186' title='bbox 1965 2754 2142 2798; x_wconf 93' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_187' title='bbox 2166 2754 2240 2798; x_wconf 98' lang='ell' dir='ltr'>●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_27' title="bbox 242 2815 430 2859; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_188' title='bbox 242 2815 339 2850; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_189' title='bbox 353 2815 430 2859; x_wconf 98' lang='ell' dir='ltr'>●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class='ocr_par' dir='ltr' id='par_1_15' title="bbox 240 2876 2237 3104">
|
||||
<span class='ocr_line' id='line_1_28' title="bbox 243 2876 2235 2920; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_190' title='bbox 243 2879 274 2911; x_wconf 93' lang='ell'>2.</span> <span class='ocrx_word' id='word_1_191' title='bbox 302 2876 449 2920; x_wconf 95' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_192' title='bbox 480 2887 524 2920; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_193' title='bbox 552 2887 595 2920; x_wconf 98' lang='ell' dir='ltr'>τη</span> <span class='ocrx_word' id='word_1_194' title='bbox 626 2876 837 2920; x_wconf 90' lang='ell' dir='ltr'>συναίνεση</span> <span class='ocrx_word' id='word_1_195' title='bbox 866 2887 931 2920; x_wconf 98' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_196' title='bbox 960 2876 1102 2920; x_wconf 88' lang='ell' dir='ltr'>εγκύου</span> <span class='ocrx_word' id='word_1_197' title='bbox 1136 2876 1155 2920; x_wconf 98' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_198' title='bbox 1184 2888 1259 2911; x_wconf 96' lang='ell' dir='ltr'>των</span> <span class='ocrx_word' id='word_1_199' title='bbox 1287 2876 1510 2920; x_wconf 93' lang='ell' dir='ltr'>προσώπων</span> <span class='ocrx_word' id='word_1_200' title='bbox 1538 2887 1614 2911; x_wconf 95' lang='ell' dir='ltr'>που</span> <span class='ocrx_word' id='word_1_201' title='bbox 1645 2876 1761 2920; x_wconf 95' lang='ell' dir='ltr'>έχουν</span> <span class='ocrx_word' id='word_1_202' title='bbox 1788 2887 1831 2920; x_wconf 98' lang='ell' dir='ltr'>τη</span> <span class='ocrx_word' id='word_1_203' title='bbox 1861 2876 1990 2920; x_wconf 95' lang='ell' dir='ltr'>γονική</span> <span class='ocrx_word' id='word_1_204' title='bbox 2024 2876 2186 2920; x_wconf 90' lang='ell' dir='ltr'>μέριμνα</span> <span class='ocrx_word' id='word_1_205' title='bbox 2216 2876 2235 2920; x_wconf 98' lang='ell' dir='ltr'>ή</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_29' title="bbox 242 2937 2236 2981; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_206' title='bbox 242 2937 441 2981; x_wconf 91' lang='ell' dir='ltr'>επιμέλειά</span> <span class='ocrx_word' id='word_1_207' title='bbox 454 2948 520 2981; x_wconf 98' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_208' title='bbox 535 2948 582 2972; x_wconf 90' lang='ell' dir='ltr'>αν</span> <span class='ocrx_word' id='word_1_209' title='bbox 598 2937 693 2981; x_wconf 90' lang='ell' dir='ltr'>αυτή</span> <span class='ocrx_word' id='word_1_210' title='bbox 711 2937 810 2972; x_wconf 90' lang='ell' dir='ltr'>είναι</span> <span class='ocrx_word' id='word_1_211' title='bbox 823 2937 982 2981; x_wconf 90' lang='ell' dir='ltr'>ανίκανη</span> <span class='ocrx_word' id='word_1_212' title='bbox 999 2948 1048 2972; x_wconf 90' lang='ell' dir='ltr'>να</span> <span class='ocrx_word' id='word_1_213' title='bbox 1063 2937 1296 2979; x_wconf 90' lang='ell' dir='ltr'>συναινέσει,</span> <span class='ocrx_word' id='word_1_214' title='bbox 1313 2937 1512 2972; x_wconf 90' lang='ell' dir='ltr'>διακόπτει</span> <span class='ocrx_word' id='word_1_215' title='bbox 1523 2948 1591 2981; x_wconf 96' lang='ell' dir='ltr'>την</span> <span class='ocrx_word' id='word_1_216' title='bbox 1606 2948 1695 2981; x_wconf 95' lang='ell' dir='ltr'>εγκυ</span> <span class='ocrx_word' id='word_1_217' title='bbox 1703 2937 1851 2981; x_wconf 92' lang='ell' dir='ltr'>μοσύνη</span> <span class='ocrx_word' id='word_1_218' title='bbox 1867 2948 1943 2981; x_wconf 98' lang='ell' dir='ltr'>της,</span> <span class='ocrx_word' id='word_1_219' title='bbox 1958 2937 2177 2981; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_220' title='bbox 2193 2948 2236 2981; x_wconf 91' lang='ell' dir='ltr'>●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_30' title="bbox 242 2998 2237 3042; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_221' title='bbox 242 2998 437 3042; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_222' title='bbox 471 2998 546 3042; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_223' title='bbox 576 2998 661 3042; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_224' title='bbox 693 2998 756 3042; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_225' title='bbox 793 2998 812 3042; x_wconf 98' lang='ell' dir='ltr'>●</span> <span class='ocrx_word' id='word_1_226' title='bbox 844 2998 1052 3042; x_wconf 90' lang='ell' dir='ltr'>Σας</span> <span class='ocrx_word' id='word_1_227' title='bbox 1085 2998 1197 3042; x_wconf 95' lang='ell' dir='ltr'>καλούμε</span> <span class='ocrx_word' id='word_1_228' title='bbox 1233 3009 1294 3033; x_wconf 90' lang='ell' dir='ltr'>να</span> <span class='ocrx_word' id='word_1_229' title='bbox 1324 3009 1372 3033; x_wconf 90' lang='ell' dir='ltr'>συμμετέχετε</span> <span class='ocrx_word' id='word_1_230' title='bbox 1404 2998 1554 3042; x_wconf 96' lang='ell' dir='ltr'>σε</span> <span class='ocrx_word' id='word_1_231' title='bbox 1586 2999 1662 3033; x_wconf 90' lang='ell' dir='ltr'>μία</span> <span class='ocrx_word' id='word_1_232' title='bbox 1696 2998 1930 3042; x_wconf 90' lang='ell' dir='ltr'>συζήτηση</span> <span class='ocrx_word' id='word_1_233' title='bbox 1966 3009 2009 3042; x_wconf 91' lang='ell' dir='ltr'>διερώτησης</span> <span class='ocrx_word' id='word_1_234' title='bbox 2042 2998 2237 3042; x_wconf 92' lang='ell' dir='ltr'>του</span>
|
||||
</span> <span class='ocr_line' id='line_1_31' title="bbox 240 3060 2235 3104; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_235' title='bbox 240 3060 493 3104; x_wconf 92' lang='ell' dir='ltr'>νόμου</span> <span class='ocrx_word' id='word_1_236' title='bbox 516 3060 591 3095; x_wconf 91' lang='ell' dir='ltr'>μέσω</span> <span class='ocrx_word' id='word_1_237' title='bbox 615 3060 712 3095; x_wconf 93' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_238' title='bbox 736 3071 797 3095; x_wconf 90' lang='ell' dir='ltr'>mailing</span> <span class='ocrx_word' id='word_1_239' title='bbox 817 3060 1025 3104; x_wconf 90' lang='ell' dir='ltr'>list:</span> <span class='ocrx_word' id='word_1_240' title='bbox 1050 3060 1175 3104; x_wconf 95' lang='ell' dir='ltr'>https://we.lurk.org/mailman3/lists/wordmord.we.lurk.org/</span>
|
||||
<span class='ocrx_word' id='word_1_241' title='bbox 1202 3063 1261 3095; x_wconf 89' lang='ell' dir='ltr'>καμία*</span> <span class='ocrx_word' id='word_1_242' title='bbox 1284 3071 1351 3104; x_wconf 96' lang='ell' dir='ltr'>επισημείωση</span> <span class='ocrx_word' id='word_1_243' title='bbox 1376 3060 1452 3095; x_wconf 90' lang='ell' dir='ltr'>είναι</span> <span class='ocrx_word' id='word_1_244' title='bbox 1474 3060 1599 3104; x_wconf 95' lang='ell' dir='ltr'>μόνη*,</span> <span class='ocrx_word' id='word_1_245' title='bbox 1627 3060 1817 3104; x_wconf 92' lang='ell' dir='ltr'>WordMord,</span> <span class='ocrx_word' id='word_1_246' title='bbox 1845 3060 1938 3095; x_wconf 90' lang='ell' dir='ltr'>2022,</span> <span class='ocrx_word' id='word_1_247' title='bbox 1959 3071 2003 3095; x_wconf 95' lang='ell' dir='ltr'>Free</span> <span class='ocrx_word' id='word_1_248' title='bbox 2029 3060 2144 3104; x_wconf 91' lang='ell' dir='ltr'>Art</span> <span class='ocrx_word' id='word_1_249' title='bbox 2166 3071 2235 3095; x_wconf 95' lang='ell' dir='ltr'>License</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_15' title="bbox 2193 3257 2238 3292">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_16' title="bbox 2193 3257 2238 3292">
|
||||
<span class='ocr_line' id='line_1_32' title="bbox 2193 3257 2238 3292; baseline 0 0; x_size 46.666668; x_descenders 11.666667; x_ascenders 11.666667"><span class='ocrx_word' id='word_1_250' title='bbox 2193 3257 2238 3292; x_wconf 88' lang='ell'>78</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
142
static/hocr/gynaikoktonia.hocr
Normal file
142
static/hocr/gynaikoktonia.hocr
Normal file
@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title></title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name='ocr-system' content='tesseract 3.04.01' />
|
||||
<meta name='ocr-capabilities' content='ocr_page ocr_carea ocr_par ocr_line ocrx_word'/>
|
||||
</head>
|
||||
<body>
|
||||
<div class='ocr_page' id='page_1' title='image "images/anthropoktonia.png"; bbox 0 0 2480 3508; ppageno 0'>
|
||||
<div class='ocr_carea' id='block_1_1' title="bbox 610 316 1872 479">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_1' title="bbox 610 316 1872 479">
|
||||
<span class='ocr_line' id='line_1_1' title="bbox 610 316 1872 349; baseline 0 -1; x_size 39.351353; x_descenders 7.3513517; x_ascenders 9.9459457"><span class='ocrx_word' id='word_1_1' title='bbox 610 316 869 348; x_wconf 93' lang='ell' dir='ltr'>ΕΓΚΛΗΜΑΤΑ</span> <span class='ocrx_word' id='word_1_2' title='bbox 884 316 993 348; x_wconf 96' lang='ell' dir='ltr'>ΚΑΤΑ</span> <span class='ocrx_word' id='word_1_3' title='bbox 1005 316 1083 348; x_wconf 95' lang='ell' dir='ltr'>ΤΗΣ</span> <span class='ocrx_word' id='word_1_4' title='bbox 1097 316 1207 348; x_wconf 95' lang='ell' dir='ltr'>ΖΩΗΣ</span> <span class='ocrx_word' id='word_1_5' title='bbox 1223 316 1288 348; x_wconf 96' lang='ell' dir='ltr'>ΚΑΙ</span> <span class='ocrx_word' id='word_1_6' title='bbox 1305 316 1556 349; x_wconf 93' lang='ell' dir='ltr'>ΠΡΟΣΒΟΛΕΣ</span> <span class='ocrx_word' id='word_1_7' title='bbox 1568 316 1652 349; x_wconf 92' lang='ell' dir='ltr'>ΤΩΝ</span> <span class='ocrx_word' id='word_1_8' title='bbox 1667 316 1872 349; x_wconf 92' lang='ell' dir='ltr'>ΘΥΛΗΚΟΤΗΤ*</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_2' title="bbox 769 435 1711 479; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_9' title='bbox 769 438 789 470; x_wconf 94' lang='ell' dir='ltr'>Ι.</span> <span class='ocrx_word' id='word_1_10' title='bbox 807 435 1033 479; x_wconf 89' lang='ell' dir='ltr'>Εγκλήματα</span> <span class='ocrx_word' id='word_1_11' title='bbox 1048 435 1200 479; x_wconf 90' lang='ell' dir='ltr'>βλάβης</span> <span class='ocrx_word' id='word_1_12' title='bbox 1212 446 1278 479; x_wconf 91' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_13' title='bbox 1293 435 1391 479; x_wconf 90' lang='ell' dir='ltr'>ζωής</span> <span class='ocrx_word' id='word_1_14' title='bbox 1404 446 1474 471; x_wconf 91' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_15' title='bbox 1491 435 1711 479; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_2' title="bbox 983 557 1496 662">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_2' title="bbox 983 557 1496 662">
|
||||
<span class='ocr_line' id='line_1_3' title="bbox 1129 557 1351 601; baseline 0.005 -9; x_size 43; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_16' title='bbox 1129 557 1264 601; x_wconf 92' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_17' title='bbox 1279 560 1351 593; x_wconf 89' lang='ell'>299</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_4' title="bbox 983 618 1496 662; baseline 0.002 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_18' title='bbox 983 618 1319 662; x_wconf 91' lang='ell' dir='ltr'>Γυναικοκτονία</span> <span class='ocrx_word' id='word_1_19' title='bbox 1334 629 1380 662; x_wconf 93' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_20' title='bbox 1395 618 1496 654; x_wconf 92' lang='ell' dir='ltr'>δόλο</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_3' title="bbox 243 740 2197 845">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_3' title="bbox 243 740 2197 845">
|
||||
<span class='ocr_line' id='line_1_5' title="bbox 244 740 2166 784; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_21' title='bbox 244 743 274 775; x_wconf 93' lang='ell'>1.</span> <span class='ocrx_word' id='word_1_22' title='bbox 288 740 435 784; x_wconf 89' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_23' title='bbox 450 740 625 775; x_wconf 88' lang='ell' dir='ltr'>σκότωσε</span> <span class='ocrx_word' id='word_1_24' title='bbox 641 740 761 775; x_wconf 91' lang='ell' dir='ltr'>άλλη</span> <span class='ocrx_word' id='word_1_25' title='bbox 774 740 994 784; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_26' title='bbox 1009 751 1052 784; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_27' title='bbox 1070 740 1247 784; x_wconf 88' lang='ell' dir='ltr'>κάθειρξη</span> <span class='ocrx_word' id='word_1_28' title='bbox 1266 740 1395 784; x_wconf 89' lang='ell' dir='ltr'>ισόβια</span> <span class='ocrx_word' id='word_1_29' title='bbox 1412 740 1431 784; x_wconf 90' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_30' title='bbox 1448 740 1666 784; x_wconf 90' lang='ell' dir='ltr'>πρόσκαιρη</span> <span class='ocrx_word' id='word_1_31' title='bbox 1681 740 1933 784; x_wconf 84' lang='ell' dir='ltr'>τουλάχιστον</span> <span class='ocrx_word' id='word_1_32' title='bbox 1948 740 2045 775; x_wconf 90' lang='ell' dir='ltr'>δέκα</span> <span class='ocrx_word' id='word_1_33' title='bbox 2060 740 2166 775; x_wconf 93' lang='ell' dir='ltr'>ετών.</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_6' title="bbox 243 801 2197 845; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_34' title='bbox 243 804 274 836; x_wconf 93' lang='ell'>2.</span> <span class='ocrx_word' id='word_1_35' title='bbox 291 804 340 836; x_wconf 93' lang='ell' dir='ltr'>Αν</span> <span class='ocrx_word' id='word_1_36' title='bbox 357 812 376 845; x_wconf 94' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_37' title='bbox 392 801 514 845; x_wconf 88' lang='ell' dir='ltr'>πράξη</span> <span class='ocrx_word' id='word_1_38' title='bbox 531 801 827 845; x_wconf 90' lang='ell' dir='ltr'>αποφασίστηκε</span> <span class='ocrx_word' id='word_1_39' title='bbox 846 812 907 836; x_wconf 90' lang='ell' dir='ltr'>και</span> <span class='ocrx_word' id='word_1_40' title='bbox 920 801 1166 845; x_wconf 92' lang='ell' dir='ltr'>εκτελέστηκε</span> <span class='ocrx_word' id='word_1_41' title='bbox 1183 812 1227 836; x_wconf 94' lang='ell' dir='ltr'>σε</span> <span class='ocrx_word' id='word_1_42' title='bbox 1245 801 1399 845; x_wconf 90' lang='ell' dir='ltr'>βρασμό</span> <span class='ocrx_word' id='word_1_43' title='bbox 1417 801 1579 845; x_wconf 88' lang='ell' dir='ltr'>ψυχικής</span> <span class='ocrx_word' id='word_1_44' title='bbox 1594 801 1728 845; x_wconf 91' lang='ell' dir='ltr'>ορμής,</span> <span class='ocrx_word' id='word_1_45' title='bbox 1744 801 1992 845; x_wconf 90' lang='ell' dir='ltr'>επιβάλλεται</span> <span class='ocrx_word' id='word_1_46' title='bbox 2007 801 2197 845; x_wconf 88' lang='ell' dir='ltr'>κάθειρξη.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_4' title="bbox 917 923 1561 1028">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_4' title="bbox 917 923 1561 1028">
|
||||
<span class='ocr_line' id='line_1_7' title="bbox 1129 923 1352 967; baseline 0.004 -9; x_size 43; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_47' title='bbox 1129 923 1264 967; x_wconf 94' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_48' title='bbox 1279 926 1352 959; x_wconf 91' lang='ell'>●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_8' title="bbox 917 984 1561 1028; baseline 0.002 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_49' title='bbox 917 984 1253 1028; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_50' title='bbox 1267 985 1348 1020; x_wconf 91' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_51' title='bbox 1364 984 1561 1028; x_wconf 91' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_5' title="bbox 238 1106 2235 1211">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_5' title="bbox 238 1106 2235 1211">
|
||||
<span class='ocr_line' id='line_1_9' title="bbox 238 1106 2235 1150; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_52' title='bbox 238 1106 386 1150; x_wconf 88' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_53' title='bbox 407 1106 636 1150; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_54' title='bbox 660 1117 722 1141; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_55' title='bbox 742 1106 920 1141; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_56' title='bbox 943 1106 1264 1150; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_57' title='bbox 1286 1106 1432 1150; x_wconf 86' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_58' title='bbox 1453 1106 1531 1141; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_59' title='bbox 1554 1106 1754 1141; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_60' title='bbox 1777 1117 1838 1141; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_61' title='bbox 1858 1106 2019 1150; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_62' title='bbox 2043 1106 2235 1150; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_10' title="bbox 240 1167 2195 1211; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_63' title='bbox 240 1178 309 1202; x_wconf 95' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_64' title='bbox 326 1167 499 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_65' title='bbox 515 1178 576 1202; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_66' title='bbox 589 1167 667 1202; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_67' title='bbox 683 1167 787 1202; x_wconf 95' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_68' title='bbox 802 1168 845 1211; x_wconf 89' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_69' title='bbox 861 1167 981 1202; x_wconf 90' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_70' title='bbox 995 1178 1071 1202; x_wconf 95' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_71' title='bbox 1088 1167 1234 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_72' title='bbox 1250 1167 1328 1202; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_73' title='bbox 1344 1167 1477 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_74' title='bbox 1494 1167 1682 1202; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_75' title='bbox 1695 1167 1914 1211; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_76' title='bbox 1929 1178 1972 1211; x_wconf 91' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_77' title='bbox 1988 1167 2195 1211; x_wconf 91' lang='ell' dir='ltr'>●●●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_6' title="bbox 972 1289 1510 1394">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_6' title="bbox 972 1289 1510 1394">
|
||||
<span class='ocr_line' id='line_1_11' title="bbox 1129 1289 1351 1333; baseline 0 -8; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_78' title='bbox 1129 1289 1264 1333; x_wconf 94' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_79' title='bbox 1279 1292 1351 1325; x_wconf 91' lang='ell'>301</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_12' title="bbox 972 1350 1510 1394; baseline 0 -8; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_80' title='bbox 972 1350 1193 1394; x_wconf 91' lang='ell' dir='ltr'>Συμμετοχή</span> <span class='ocrx_word' id='word_1_81' title='bbox 1210 1361 1256 1386; x_wconf 93' lang='ell' dir='ltr'>σε</span> <span class='ocrx_word' id='word_1_82' title='bbox 1271 1350 1510 1386; x_wconf 91' lang='ell' dir='ltr'>αυτοκτονία</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_7' title="bbox 238 1472 2238 1638">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_7' title="bbox 238 1472 2238 1638">
|
||||
<span class='ocr_line' id='line_1_13' title="bbox 238 1472 2236 1516; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_83' title='bbox 238 1472 386 1516; x_wconf 92' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_84' title='bbox 412 1472 612 1507; x_wconf 90' lang='ell' dir='ltr'>κατέπεισε</span> <span class='ocrx_word' id='word_1_85' title='bbox 637 1472 758 1507; x_wconf 92' lang='ell' dir='ltr'>άλλην</span> <span class='ocrx_word' id='word_1_86' title='bbox 781 1483 829 1507; x_wconf 90' lang='ell' dir='ltr'>να</span> <span class='ocrx_word' id='word_1_87' title='bbox 853 1472 1142 1516; x_wconf 90' lang='ell' dir='ltr'>αυτοκτονήσει,</span> <span class='ocrx_word' id='word_1_88' title='bbox 1168 1483 1216 1507; x_wconf 90' lang='ell' dir='ltr'>αν</span> <span class='ocrx_word' id='word_1_89' title='bbox 1238 1472 1442 1516; x_wconf 92' lang='ell' dir='ltr'>τελέστηκε</span> <span class='ocrx_word' id='word_1_90' title='bbox 1469 1483 1488 1516; x_wconf 98' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_91' title='bbox 1514 1472 1745 1507; x_wconf 90' lang='ell' dir='ltr'>αυτοκτονία</span> <span class='ocrx_word' id='word_1_92' title='bbox 1771 1472 1790 1516; x_wconf 98' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_93' title='bbox 1816 1472 1915 1516; x_wconf 88' lang='ell' dir='ltr'>έγινε</span> <span class='ocrx_word' id='word_1_94' title='bbox 1941 1472 2138 1516; x_wconf 90' lang='ell' dir='ltr'>απόπειρά</span> <span class='ocrx_word' id='word_1_95' title='bbox 2160 1483 2236 1516; x_wconf 98' lang='ell' dir='ltr'>της,</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_14' title="bbox 244 1533 2238 1577; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_96' title='bbox 244 1533 371 1577; x_wconf 90' lang='ell' dir='ltr'>καθώς</span> <span class='ocrx_word' id='word_1_97' title='bbox 390 1544 450 1568; x_wconf 90' lang='ell' dir='ltr'>και</span> <span class='ocrx_word' id='word_1_98' title='bbox 464 1533 602 1577; x_wconf 95' lang='ell' dir='ltr'>όποιος</span> <span class='ocrx_word' id='word_1_99' title='bbox 618 1533 746 1568; x_wconf 91' lang='ell' dir='ltr'>έδωσε</span> <span class='ocrx_word' id='word_1_100' title='bbox 766 1533 932 1577; x_wconf 90' lang='ell' dir='ltr'>βοήθεια</span> <span class='ocrx_word' id='word_1_101' title='bbox 950 1533 1043 1568; x_wconf 90' lang='ell' dir='ltr'>κατά</span> <span class='ocrx_word' id='word_1_102' title='bbox 1056 1544 1124 1577; x_wconf 96' lang='ell' dir='ltr'>την</span> <span class='ocrx_word' id='word_1_103' title='bbox 1138 1533 1275 1577; x_wconf 92' lang='ell' dir='ltr'>τέλεσή</span> <span class='ocrx_word' id='word_1_104' title='bbox 1291 1544 1367 1577; x_wconf 98' lang='ell' dir='ltr'>της,</span> <span class='ocrx_word' id='word_1_105' title='bbox 1387 1544 1406 1577; x_wconf 98' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_106' title='bbox 1424 1533 1543 1568; x_wconf 90' lang='ell' dir='ltr'>οποία</span> <span class='ocrx_word' id='word_1_107' title='bbox 1559 1533 1814 1577; x_wconf 90' lang='ell' dir='ltr'>διαφορετικά</span> <span class='ocrx_word' id='word_1_108' title='bbox 1830 1534 1900 1568; x_wconf 91' lang='ell' dir='ltr'>δεν</span> <span class='ocrx_word' id='word_1_109' title='bbox 1916 1534 1968 1568; x_wconf 90' lang='ell' dir='ltr'>θα</span> <span class='ocrx_word' id='word_1_110' title='bbox 1985 1533 2077 1577; x_wconf 90' lang='ell' dir='ltr'>ήταν</span> <span class='ocrx_word' id='word_1_111' title='bbox 2093 1533 2238 1577; x_wconf 97' lang='ell' dir='ltr'>εφικτή,</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_15' title="bbox 240 1594 741 1638; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_112' title='bbox 240 1594 459 1638; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_113' title='bbox 474 1605 518 1638; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_114' title='bbox 534 1594 741 1638; x_wconf 92' lang='ell' dir='ltr'>φυλάκιση.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_8' title="bbox 933 1717 1548 1822">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_8' title="bbox 933 1717 1548 1822">
|
||||
<span class='ocr_line' id='line_1_16' title="bbox 1129 1717 1351 1761; baseline 0 -8; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_115' title='bbox 1129 1717 1264 1761; x_wconf 99' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_116' title='bbox 1279 1720 1351 1753; x_wconf 91' lang='ell'>302</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_17' title="bbox 933 1778 1548 1822; baseline 0.002 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_117' title='bbox 933 1778 1269 1822; x_wconf 91' lang='ell' dir='ltr'>Γυναικοκτονία</span> <span class='ocrx_word' id='word_1_118' title='bbox 1282 1778 1364 1814; x_wconf 99' lang='ell' dir='ltr'>από</span> <span class='ocrx_word' id='word_1_119' title='bbox 1379 1778 1548 1822; x_wconf 91' lang='ell' dir='ltr'>θεσμική αμέλεια</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_9' title="bbox 238 1900 2047 1944">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_9' title="bbox 238 1900 2047 1944">
|
||||
<span class='ocr_line' id='line_1_18' title="bbox 238 1900 2047 1944; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_120' title='bbox 238 1900 386 1944; x_wconf 95' lang='ell' dir='ltr'>Όποιος</span> <span class='ocrx_word' id='word_1_121' title='bbox 401 1900 479 1935; x_wconf 90' lang='ell' dir='ltr'>από</span> <span class='ocrx_word' id='word_1_122' title='bbox 495 1900 658 1944; x_wconf 90' lang='ell' dir='ltr'>αμέλεια</span> <span class='ocrx_word' id='word_1_123' title='bbox 673 1900 847 1935; x_wconf 94' lang='ell' dir='ltr'>σκότωσε</span> <span class='ocrx_word' id='word_1_124' title='bbox 863 1900 994 1942; x_wconf 92' lang='ell' dir='ltr'>άλλην,</span> <span class='ocrx_word' id='word_1_125' title='bbox 1009 1900 1227 1944; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_126' title='bbox 1242 1911 1285 1944; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_127' title='bbox 1302 1900 1496 1944; x_wconf 92' lang='ell' dir='ltr'>φυλάκιση</span> <span class='ocrx_word' id='word_1_128' title='bbox 1512 1900 1764 1944; x_wconf 92' lang='ell' dir='ltr'>τουλάχιστον</span> <span class='ocrx_word' id='word_1_129' title='bbox 1777 1900 1891 1944; x_wconf 93' lang='ell' dir='ltr'>τριών</span> <span class='ocrx_word' id='word_1_130' title='bbox 1908 1900 2047 1944; x_wconf 91' lang='ell' dir='ltr'>μηνών.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_10' title="bbox 1110 2022 1373 2119">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_10' title="bbox 1110 2022 1373 2119">
|
||||
<span class='ocr_line' id='line_1_19' title="bbox 1129 2022 1351 2066; baseline 0.005 -9; x_size 43; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_131' title='bbox 1129 2022 1264 2066; x_wconf 99' lang='ell' dir='ltr'>Άρθρο</span> <span class='ocrx_word' id='word_1_132' title='bbox 1279 2025 1351 2058; x_wconf 91' lang='ell'>303</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_20' title="bbox 1110 2083 1373 2119; baseline 0 0; x_size 41.532211; x_descenders 5.5322127; x_ascenders 11"><span class='ocrx_word' id='word_1_133' title='bbox 1110 2083 1373 2119; x_wconf 91' lang='ell' dir='ltr'>Παιδοκτονία</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_11' title="bbox 242 2205 2238 2310">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_11' title="bbox 242 2205 2238 2310">
|
||||
<span class='ocr_line' id='line_1_21' title="bbox 244 2205 2238 2249; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_134' title='bbox 244 2205 404 2249; x_wconf 89' lang='ell' dir='ltr'>Πατέρας</span> <span class='ocrx_word' id='word_1_135' title='bbox 418 2216 494 2240; x_wconf 95' lang='ell' dir='ltr'>που</span> <span class='ocrx_word' id='word_1_136' title='bbox 514 2216 557 2249; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_137' title='bbox 572 2205 749 2249; x_wconf 94' lang='ell' dir='ltr'>πρόθεση</span> <span class='ocrx_word' id='word_1_138' title='bbox 767 2205 941 2240; x_wconf 96' lang='ell' dir='ltr'>σκότωσε</span> <span class='ocrx_word' id='word_1_139' title='bbox 955 2216 998 2240; x_wconf 96' lang='ell' dir='ltr'>την</span> <span class='ocrx_word' id='word_1_140' title='bbox 1014 2205 1122 2240; x_wconf 90' lang='ell' dir='ltr'>κόρη</span> <span class='ocrx_word' id='word_1_141' title='bbox 1133 2216 1198 2249; x_wconf 98' lang='ell' dir='ltr'>του</span> <span class='ocrx_word' id='word_1_142' title='bbox 1215 2205 1309 2240; x_wconf 90' lang='ell' dir='ltr'>κατά</span> <span class='ocrx_word' id='word_1_143' title='bbox 1326 2205 1345 2249; x_wconf 98' lang='ell' dir='ltr'>ή</span> <span class='ocrx_word' id='word_1_144' title='bbox 1364 2205 1456 2249; x_wconf 91' lang='ell' dir='ltr'>μετά</span> <span class='ocrx_word' id='word_1_145' title='bbox 1469 2216 1536 2240; x_wconf 96' lang='ell' dir='ltr'>τον</span> <span class='ocrx_word' id='word_1_146' title='bbox 1548 2205 1694 2247; x_wconf 95' lang='ell' dir='ltr'>τοκετό,</span> <span class='ocrx_word' id='word_1_147' title='bbox 1711 2205 1810 2240; x_wconf 90' lang='ell' dir='ltr'>αλλά</span> <span class='ocrx_word' id='word_1_148' title='bbox 1825 2205 1901 2240; x_wconf 93' lang='ell' dir='ltr'>ενώ</span> <span class='ocrx_word' id='word_1_149' title='bbox 1917 2205 2238 2249; x_wconf 90' lang='ell' dir='ltr'>εξακολουθούσε</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_22' title="bbox 242 2266 2077 2310; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_150' title='bbox 242 2266 368 2310; x_wconf 90' lang='ell' dir='ltr'>ακόμη</span> <span class='ocrx_word' id='word_1_151' title='bbox 387 2277 406 2310; x_wconf 98' lang='ell' dir='ltr'>η</span> <span class='ocrx_word' id='word_1_152' title='bbox 424 2266 633 2310; x_wconf 90' lang='ell' dir='ltr'>διατάραξη</span> <span class='ocrx_word' id='word_1_153' title='bbox 648 2277 717 2301; x_wconf 95' lang='ell' dir='ltr'>του</span> <span class='ocrx_word' id='word_1_154' title='bbox 734 2266 974 2310; x_wconf 90' lang='ell' dir='ltr'>οργανισμού</span> <span class='ocrx_word' id='word_1_155' title='bbox 989 2277 1054 2310; x_wconf 98' lang='ell' dir='ltr'>της</span> <span class='ocrx_word' id='word_1_156' title='bbox 1069 2266 1147 2301; x_wconf 90' lang='ell' dir='ltr'>από</span> <span class='ocrx_word' id='word_1_157' title='bbox 1163 2266 1293 2308; x_wconf 90' lang='ell' dir='ltr'>αυτόν,</span> <span class='ocrx_word' id='word_1_158' title='bbox 1308 2266 1527 2310; x_wconf 90' lang='ell' dir='ltr'>τιμωρείται</span> <span class='ocrx_word' id='word_1_159' title='bbox 1542 2277 1585 2310; x_wconf 91' lang='ell' dir='ltr'>με</span> <span class='ocrx_word' id='word_1_160' title='bbox 1604 2266 1781 2310; x_wconf 93' lang='ell' dir='ltr'>κάθειρξη</span> <span class='ocrx_word' id='word_1_161' title='bbox 1799 2266 1874 2310; x_wconf 98' lang='ell' dir='ltr'>έως</span> <span class='ocrx_word' id='word_1_162' title='bbox 1889 2266 1986 2301; x_wconf 90' lang='ell' dir='ltr'>δέκα</span> <span class='ocrx_word' id='word_1_163' title='bbox 2000 2266 2077 2310; x_wconf 98' lang='ell' dir='ltr'>έτη.</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_12' title="bbox 959 2449 1521 2493">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_12' title="bbox 959 2449 1521 2493">
|
||||
<span class='ocr_line' id='line_1_23' title="bbox 959 2449 1521 2493; baseline 0.002 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_164' title='bbox 959 2452 993 2484; x_wconf 94' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_165' title='bbox 1011 2449 1240 2493; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_166' title='bbox 1253 2460 1323 2485; x_wconf 91' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_167' title='bbox 1340 2449 1521 2493; x_wconf 93' lang='ell' dir='ltr'>●●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_13' title="bbox 1030 2571 1450 2676">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_13' title="bbox 1030 2571 1450 2676">
|
||||
<span class='ocr_line' id='line_1_24' title="bbox 1129 2571 1352 2615; baseline 0 -8; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_168' title='bbox 1129 2571 1264 2615; x_wconf 99' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_169' title='bbox 1279 2574 1352 2607; x_wconf 91' lang='ell'>●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_25' title="bbox 1030 2632 1450 2676; baseline 0.002 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_170' title='bbox 1030 2632 1206 2676; x_wconf 94' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_171' title='bbox 1220 2643 1286 2676; x_wconf 91' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_172' title='bbox 1302 2632 1450 2676; x_wconf 91' lang='ell' dir='ltr'>●●●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_14' title="bbox 240 2754 2240 3104">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_14' title="bbox 242 2754 2240 2859">
|
||||
<span class='ocr_line' id='line_1_26' title="bbox 244 2754 2240 2798; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_173' title='bbox 244 2757 274 2789; x_wconf 93' lang='ell'>●●</span> <span class='ocrx_word' id='word_1_174' title='bbox 292 2754 440 2798; x_wconf 95' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_175' title='bbox 457 2754 572 2798; x_wconf 96' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_176' title='bbox 589 2765 632 2798; x_wconf 98' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_177' title='bbox 653 2754 864 2798; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_178' title='bbox 884 2765 949 2798; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_179' title='bbox 968 2754 1111 2798; x_wconf 87' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_180' title='bbox 1133 2754 1332 2789; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_181' title='bbox 1347 2765 1415 2798; x_wconf 96' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_182' title='bbox 1435 2754 1558 2798; x_wconf 98' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_183' title='bbox 1577 2765 1643 2798; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_184' title='bbox 1660 2754 1879 2798; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_185' title='bbox 1899 2765 1942 2798; x_wconf 91' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_186' title='bbox 1965 2754 2142 2798; x_wconf 93' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_187' title='bbox 2166 2754 2240 2798; x_wconf 98' lang='ell' dir='ltr'>●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_27' title="bbox 242 2815 430 2859; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_188' title='bbox 242 2815 339 2850; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_189' title='bbox 353 2815 430 2859; x_wconf 98' lang='ell' dir='ltr'>●●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class='ocr_par' dir='ltr' id='par_1_15' title="bbox 240 2876 2237 3104">
|
||||
<span class='ocr_line' id='line_1_28' title="bbox 243 2876 2235 2920; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_190' title='bbox 243 2879 274 2911; x_wconf 93' lang='ell'>●●</span> <span class='ocrx_word' id='word_1_191' title='bbox 302 2876 449 2920; x_wconf 95' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_192' title='bbox 480 2887 524 2920; x_wconf 91' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_193' title='bbox 552 2887 595 2920; x_wconf 98' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_194' title='bbox 626 2876 837 2920; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_195' title='bbox 866 2887 931 2920; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_196' title='bbox 960 2876 1102 2920; x_wconf 88' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_197' title='bbox 1136 2876 1155 2920; x_wconf 98' lang='ell' dir='ltr'>●</span> <span class='ocrx_word' id='word_1_198' title='bbox 1184 2888 1259 2911; x_wconf 96' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_199' title='bbox 1287 2876 1510 2920; x_wconf 93' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_200' title='bbox 1538 2887 1614 2911; x_wconf 95' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_201' title='bbox 1645 2876 1761 2920; x_wconf 95' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_202' title='bbox 1788 2887 1831 2920; x_wconf 98' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_203' title='bbox 1861 2876 1990 2920; x_wconf 95' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_204' title='bbox 2024 2876 2186 2920; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_205' title='bbox 2216 2876 2235 2920; x_wconf 98' lang='ell' dir='ltr'>●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_29' title="bbox 242 2937 2236 2981; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_206' title='bbox 242 2937 441 2981; x_wconf 91' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_207' title='bbox 454 2948 520 2981; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_208' title='bbox 535 2948 582 2972; x_wconf 90' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_209' title='bbox 598 2937 693 2981; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_210' title='bbox 711 2937 810 2972; x_wconf 90' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_211' title='bbox 823 2937 982 2981; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_212' title='bbox 999 2948 1048 2972; x_wconf 90' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_213' title='bbox 1063 2937 1296 2979; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_214' title='bbox 1313 2937 1512 2972; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_215' title='bbox 1523 2948 1591 2981; x_wconf 96' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_216' title='bbox 1606 2948 1695 2981; x_wconf 95' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_217' title='bbox 1703 2937 1851 2981; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_218' title='bbox 1867 2948 1943 2981; x_wconf 98' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_219' title='bbox 1958 2937 2177 2981; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_220' title='bbox 2193 2948 2236 2981; x_wconf 91' lang='ell' dir='ltr'>●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_30' title="bbox 242 2998 2237 3042; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_221' title='bbox 242 2998 437 3042; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_222' title='bbox 471 2998 546 3042; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_223' title='bbox 576 2998 661 3042; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_224' title='bbox 693 2998 756 3042; x_wconf 98' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_225' title='bbox 793 2998 812 3042; x_wconf 98' lang='ell' dir='ltr'>●</span> <span class='ocrx_word' id='word_1_226' title='bbox 844 2998 1052 3042; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_227' title='bbox 1085 2998 1197 3042; x_wconf 95' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_228' title='bbox 1233 3009 1294 3033; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_229' title='bbox 1324 3009 1372 3033; x_wconf 90' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_230' title='bbox 1404 2998 1554 3042; x_wconf 96' lang='ell' dir='ltr'>●●●●●●●</span> <span class='ocrx_word' id='word_1_231' title='bbox 1586 2999 1662 3033; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_232' title='bbox 1696 2998 1930 3042; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_233' title='bbox 1966 3009 2009 3042; x_wconf 91' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_234' title='bbox 2042 2998 2237 3042; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●</span>
|
||||
</span>
|
||||
<span class='ocr_line' id='line_1_31' title="bbox 240 3060 2235 3104; baseline 0 -9; x_size 44; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_235' title='bbox 240 3060 493 3104; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●●●●</span> <span class='ocrx_word' id='word_1_236' title='bbox 516 3060 591 3095; x_wconf 91' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_237' title='bbox 615 3060 712 3095; x_wconf 93' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_238' title='bbox 736 3071 797 3095; x_wconf 90' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_239' title='bbox 817 3060 1025 3104; x_wconf 90' lang='ell' dir='ltr'>●●●●●●●●●</span> <span class='ocrx_word' id='word_1_240' title='bbox 1050 3060 1175 3104; x_wconf 95' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_241' title='bbox 1202 3063 1261 3095; x_wconf 89' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_242' title='bbox 1284 3071 1351 3104; x_wconf 96' lang='ell' dir='ltr'>●●●</span> <span class='ocrx_word' id='word_1_243' title='bbox 1376 3060 1452 3095; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_244' title='bbox 1474 3060 1599 3104; x_wconf 95' lang='ell' dir='ltr'>●●●●●●</span> <span class='ocrx_word' id='word_1_245' title='bbox 1627 3060 1817 3104; x_wconf 92' lang='ell' dir='ltr'>●●●●●●●●</span> <span class='ocrx_word' id='word_1_246' title='bbox 1845 3060 1938 3095; x_wconf 90' lang='ell' dir='ltr'>●●●●</span> <span class='ocrx_word' id='word_1_247' title='bbox 1959 3071 2003 3095; x_wconf 95' lang='ell' dir='ltr'>●●</span> <span class='ocrx_word' id='word_1_248' title='bbox 2029 3060 2144 3104; x_wconf 91' lang='ell' dir='ltr'>●●●●●</span> <span class='ocrx_word' id='word_1_249' title='bbox 2166 3071 2235 3095; x_wconf 95' lang='ell' dir='ltr'>●●●</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class='ocr_carea' id='block_1_15' title="bbox 2193 3257 2238 3292">
|
||||
<p class='ocr_par' dir='ltr' id='par_1_16' title="bbox 2193 3257 2238 3292">
|
||||
<span class='ocr_line' id='line_1_32' title="bbox 2193 3257 2238 3292; baseline 0 0; x_size 46.666668; x_descenders 11.666667; x_ascenders 11.666667"><span class='ocrx_word' id='word_1_250' title='bbox 2193 3257 2238 3292; x_wconf 88' lang='ell'>78</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
static/images/anthropoktonia.png
Executable file
BIN
static/images/anthropoktonia.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 406 KiB |
BIN
static/images/blank.png
Executable file
BIN
static/images/blank.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
static/images/closed.gif
Normal file
BIN
static/images/closed.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 635 B |
BIN
static/images/open.gif
Normal file
BIN
static/images/open.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
BIN
static/images/tongue-emoji.png
Normal file
BIN
static/images/tongue-emoji.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 523 KiB |
87
static/styles (copy).css
Normal file
87
static/styles (copy).css
Normal file
@ -0,0 +1,87 @@
|
||||
@font-face {
|
||||
font-family: Compagnon;
|
||||
src: url(fonts/Compagnon-Roman.otf);
|
||||
}
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: ACPoiret;
|
||||
src: url(fonts/AC-Poiret.ttf);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Solide-Mirage;
|
||||
src: url(fonts/SolideMirage-Etroit.otf);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Zarathustra;
|
||||
src: url(fonts/zarathustra-v01.otf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
body {
|
||||
font-family:ACPoiret;
|
||||
}
|
||||
|
||||
#title1, #title2, #title3 {
|
||||
font-family: Compagnon;
|
||||
font-size: 1.2em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#my_field {
|
||||
height: 15rem;
|
||||
width: 100rem;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
|
||||
#initialpdf, #showmonster, #empty_frame, #button1, #button2, #title1, #title2, #title3 {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
#empty_frame {
|
||||
height: 68rem;
|
||||
width: 40rem;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 20px 20px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
margin: 0.2em 0.2em;
|
||||
cursor: pointer;
|
||||
font-size: 1em;
|
||||
border-radius: 25px;
|
||||
font-family: Solide-Mirage;
|
||||
font-weight: bold;
|
||||
box-shadow: 12px 3px rgba(253, 105, 179,0.4);
|
||||
/* box-shadow: 8px 3px rgba(254, 223, 46,0.4); */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
td {
|
||||
vertical-align:top;
|
||||
|
||||
}
|
||||
|
||||
textarea {
|
||||
font-family: Zarathustra;
|
||||
border-radius: 25px;
|
||||
background: linear-gradient(to right,rgba(128, 128, 128,0.2), white);
|
||||
}
|
||||
|
||||
iframe {
|
||||
border-radius: 25px;
|
||||
}
|
112
static/styles.css
Normal file
112
static/styles.css
Normal file
@ -0,0 +1,112 @@
|
||||
@font-face {
|
||||
font-family: Compagnon;
|
||||
src: url(fonts/Compagnon-Roman.otf);
|
||||
}
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: ACPoiret;
|
||||
src: url(fonts/AC-Poiret.ttf);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Solide-Mirage;
|
||||
src: url(fonts/SolideMirage-Etroit.otf);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Zarathustra;
|
||||
src: url(fonts/zarathustra-v01.otf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
body {
|
||||
font-family:ACPoiret;
|
||||
}
|
||||
|
||||
#title1, #title2, #title3 {
|
||||
font-family: Compagnon;
|
||||
font-size: 1.2em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#my_field {
|
||||
height: 15rem;
|
||||
width: 98%;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.6em;
|
||||
padding:1em;
|
||||
}
|
||||
|
||||
|
||||
#initialpdf, #showmonster, #empty_frame, #button1, #button2, #button4, #button5, #title1, #title2, #title3 {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#button3, #button4 {
|
||||
color: #22A7A7 !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
#empty_frame {
|
||||
height: 50rem;
|
||||
width: 95%;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
font-size: 1em;
|
||||
line-height: 1.6em;
|
||||
padding:1em;
|
||||
}
|
||||
|
||||
|
||||
|
||||
button {
|
||||
padding: 20px 20px;
|
||||
text-align: center;
|
||||
color: #8184A4;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
margin: 0.2em 0.2em;
|
||||
cursor: pointer;
|
||||
font-size: 1em;
|
||||
border-radius: 25px;
|
||||
font-family: Solide-Mirage;
|
||||
font-weight: bold;
|
||||
box-shadow: 12px 3px rgba(0, 64, 128,0.8);
|
||||
/* box-shadow: 8px 3px rgba(254, 223, 46,0.4); */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
|
||||
td {
|
||||
vertical-align:top;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
word-wrap: break-word;
|
||||
padding-right:1em;
|
||||
}
|
||||
|
||||
textarea {
|
||||
font-family: Zarathustra;
|
||||
border-radius: 25px;
|
||||
border: 2px solid #004080;
|
||||
/*background: linear-gradient(to right,rgba(128, 128, 128,0.2), white);*/
|
||||
}
|
||||
|
||||
iframe {
|
||||
border-radius: 25px;
|
||||
width: 95%;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
table {
|
||||
table-layout:fixed;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
/* #empty_frame, #title3 {
|
||||
width:20rem;
|
||||
} */
|
63
static/ΔΙΑΒΑΣΕΜΕ.txt
Normal file
63
static/ΔΙΑΒΑΣΕΜΕ.txt
Normal file
@ -0,0 +1,63 @@
|
||||
ΔΙΑΒΑΣΕΜΕ.txt
|
||||
|
||||
|
||||
Οδηγίες χρήσης για το "καμία* επισημείωση δεν είναι μόνη" (καλύτερη προβολή σε desktop)
|
||||
|
||||
|
||||
* Για να δείτε τις επισημειώσεις:
|
||||
|
||||
* αντιγράψτε το μακροσκελές σύνδεσμο που θα βρείτε στο τέλος του κειμένου αυτού
|
||||
|
||||
|
||||
* μπείτε στο παρακάτω διαδικτυακό εργαλείο μέσω του σύνδεσμου: http://poinikos.wordmord-ur.la/
|
||||
|
||||
|
||||
* κάντε επικόλληση του μακροσκελούς συνδέσμου στο άδειο παράθυρο
|
||||
|
||||
|
||||
* πατήστε το κουμπί "ΠΡΟΒΟΛΗ PDF", για να αποκωδικοποιήσετε το μακροσκελές url
|
||||
|
||||
|
||||
* πατήστε το κουμπί "ΑΝΤΙΓΡΑΦΗ ΠΟΙΝΙΚΟΥ ΚΩΔΙΚΑ"
|
||||
Επιλέξτε το περιεχόμενο του PDF και αντιγράψτε με ctrl+C (cmnd+C)
|
||||
Κάνετε επικόλληση με ctrl+v (cmnd+v) στο κενό παράθυρο που αναδύθηκε για να διαβάσετε την επισημείωση
|
||||
Πάρτε το χρόνο σας
|
||||
Μπορείτε να στείλετε τις τροποποιήσεις που προτείνετε στο mailing list του WordMord
|
||||
|
||||
|
||||
* πατήστε το κουμπί "ΜΕΤΑΛΛΑΓΜΕΝΟΣ ΠΟΙΝΙΚΟΣ ΚΩΔΙΚΑΣ" για προβολή του τροποποιημένου PDF όπου η επισημείωση που προτείνει το WordMord αντικαθιστά το πρωτότυπο κείμενο του Ποινικού Κώδικα
|
||||
|
||||
|
||||
* Για να συμμετέχετε στη συζήτηση μπορείτε να γραφτείτε στο mailing list εδώ:
|
||||
|
||||
https://we.lurk.org/mailman3/lists/wordmord.we.lurk.org/
|
||||
|
||||
Θα συζητήσουμε και θα μοιραστούμε γνώσεις πάνω στο ερώτημα της στατικότητας της γλώσσας του νόμου, διερευνώντας τρόπους μετάλλαξής του
|
||||
|
||||
|
||||
* Κοινοποιήστε αυτό το μήνυμα μαζί με τον σύνδεσμο του PDF κατά βούληση
|
||||
|
||||
|
||||
Η καμία* επισημείωση δεν είναι μόνη είναι ένα εγχείρημα παρέμβασης στο νομικό λόγο εντός ενός ημι-δημόσιου διαλόγου που συμβαίνει μέσω του mailing list του WordMord.
|
||||
Σας καλούμε να συμμετέχετε σε αυτή τη συζήτηση διερώτησης του νόμου και συγκεκριμένα του Δέκατου Πέμπτου Κεφαλαίου του Ποινικού Κώδικα, που αφορά στα Εγκλήματα κατά της Ζωής.
|
||||
Το PDF του Ποινικού Κώδικα περιέχει κάποιες επισημειώσεις οι οποίες δεν είναι ορατές από την αρχή. Αυτή είναι η πρώτη από μια σειρά μεταλλάξεων που ανοίγει τη συζήτηση.
|
||||
|
||||
|
||||
Με επισημειω(μα)τικούς χαιρετισμούς,
|
||||
|
||||
|
||||
WordMord,
|
||||
|
||||
http://wordmord-ur.la
|
||||
|
||||
|
||||
|
||||
Επισημειωμένο PDF του Δέκατου Πέμπτου Κεφαλαίου του Ποινικού Κώδικα
|
||||
|
||||
https://wordmord-ur.la/pdf/Dear_lovers,_this_is_a_virus._She*_invites_you_to_be_part_of_a_discussion_seeking_to_risk_the_limits_of_the_greek_penal_code/%ce%9c%cf%80%cf%81%ce%bf%cf%83%cf%84%ce%ac_%ce%bc%ce%b1%cf%82_%cf%83%cf%84%ce%b7_%ce%bc%ce%bf%ce%b9%cf%81%ce%b1%cf%83%ce%bc%ce%ad%ce%bd%ce%b7_%ce%bf%ce%b8%cf%8c%ce%bd%ce%b7_%ce%bb%ce%ac%ce%bc%cf%80%ce%b5%ce%b9_%ce%b1%cf%80%cf%8c_%cf%84%ce%bf_%cf%86%cf%89%cf%82_%cf%84%cf%89%ce%bd_%ce%bb%ce%ac%cf%80%cf%84%ce%bf%cf%80_%ce%bc%ce%b1%cf%82_%cf%84%ce%bf_%ce%94%ce%ad%ce%ba%ce%b1%cf%84%ce%bf_%ce%a0%ce%ad%ce%bc%cf%80%cf%84%ce%bf_%ce%86%cf%81%ce%b8%cf%81%ce%bf_%cf%84%ce%bf%cf%85_%ce%a0%ce%bf%ce%b9%ce%bd%ce%b9%ce%ba%ce%bf%cf%8d_%ce%9a%cf%8e%ce%b4%ce%b9%ce%ba%ce%b1/%ce%9c%cf%80%ce%bf%cf%81%ce%bf%cf%8d%ce%bc%ce%b5_%ce%bd%ce%b1_%ce%ba%ce%ac%ce%bd%ce%bf%cf%85%ce%bc%ce%b5_%cf%84%cf%81%ce%bf%cf%80%ce%bf%cf%80%ce%bf%ce%b9%ce%ae%cf%83%ce%b5%ce%b9%cf%82_%cf%80%ce%bf%cf%85_%ce%b1%ce%bd%ce%b1%cf%84%ce%b1%cf%81%ce%ac%cf%83%ce%bf%cf%85%ce%bd_%cf%84%ce%bf%ce%bd_%cf%80%ce%bf%ce%b9%ce%bd%ce%b9%ce%ba%cf%8c_%ce%ba%cf%8e%ce%b4%ce%b9%ce%ba%ce%b1,_%ce%b5%ce%ba%ce%b8%ce%ad%cf%84%ce%bf%ce%bd%cf%84%ce%ac%cf%82_%cf%84%ce%bf%ce%bd_%cf%83%ce%b5_%cf%83%cf%85%ce%b6%ce%ae%cf%84%ce%b7%cf%83%ce%b7/%ce%a0%cf%8e%cf%82_%cf%84%ce%bf_%ce%b5%ce%af%cf%80%ce%b5%cf%82;/%ce%9c%ce%b5%cf%84%ce%b1%ce%bb%ce%bb%ce%ac%ce%be%ce%b5%ce%b9%cf%82_%cf%84%ce%bf%cf%85_%cf%80%ce%bf%ce%b9%ce%bd%ce%b9%ce%ba%ce%bf%cf%8d_%ce%ba%cf%8e%ce%b4%ce%b9%ce%ba%ce%b1...Do_you_copy;_%ce%a4%ce%bf%ce%bd_%ce%ba%ce%ac%ce%bd%ce%b5%ce%b9%cf%82_%cf%83%ce%b5%ce%bb%ce%ad%ce%ba%cf%84_%ce%ba%ce%b1%ce%b9_%ce%ba%cf%8c%cf%80%ce%b9_%ce%b1%cf%80%cf%8c_%cf%84%ce%bf_pdf/%ce%9d%ce%b1%ce%b9!_%ce%9a%ce%b1%ce%b9_%cf%84%cf%8e%cf%81%ce%b1_%cf%84%ce%b9;_%ce%a4%ce%b9_%ce%ba%ce%ac%ce%bd%cf%89_%ce%bc%ce%b5_%ce%b1%cf%85%cf%84%cf%8c;/%ce%9a%ce%ac%cf%84%cf%83%ce%b5_%ce%bc%ce%b9%cf%83%cf%8c,_%cf%87%cf%8e%cf%83%cf%84%ce%bf_%cf%83%cf%84%ce%bf_%ce%b3%ce%bf%cf%85%cf%8c%cf%81%ce%bd%cf%84.../M%ce%bc%ce%bc_(%ce%bc%ce%bc%ce%bc%ce%b7%ce%b7%ce%b7!)_%cf%84%ce%bf_Word_%ce%b4%ce%b5%ce%bd_%ce%b1%ce%bd%ce%b1%ce%b3%ce%bd%cf%89%cf%81%ce%af%ce%b6%ce%b5%ce%b9_%cf%84%ce%bf%cf%85%cf%82_%cf%87%ce%b1%cf%81%ce%b1%ce%ba%cf%84%ce%ae%cf%81%ce%b5%cf%82,_%ce%b4%ce%b5_%cf%83%cf%85%ce%b3%ce%ba%cf%81%ce%b1%cf%84%ce%b5%ce%af_%cf%84%ce%bf%cf%85_%cf%84%cf%8d%cf%80%ce%bf%cf%85%cf%82_(%cf%84%ce%bf_%cf%83%ce%ba%cf%8c%cf%84%cf%89%cf%83%ce%b5!_%ce%ba%cf%84%ce%ae%ce%bd%ce%bf%cf%82!_%ce%b2%ce%b9%ce%ac%ce%b6%ce%b5%ce%b9%cf%82_%cf%84%ce%b7_%ce%b3%ce%bb%cf%8e%cf%83%cf%83%ce%b1_%ce%bc%ce%bf%cf%85!)/_%ce%92%ce%bb%ce%ad%cf%80%cf%89_(%cf%84%ce%bf_%ce%b2%ce%bb%ce%ad%cf%80%cf%89,_%ce%b5%ce%af%ce%bc%ce%b1%ce%b9_%ce%bc%ce%ac%cf%81%cf%84%cf%85%cf%81%ce%b1%cf%82_Mord)_%ce%ba%ce%ac%cf%84%ce%b9_%cf%80%ce%b5%cf%81%ce%af%ce%b5%cf%81%ce%b3%ce%b1_%cf%83%cf%8d%ce%bc%ce%b2%ce%bf%ce%bb%ce%b1/(%ce%a3-%ce%95-%ce%99-%ce%92_%ce%9c-%ce%99!!!)/%ce%94%ce%b5%ce%bd_%ce%be%ce%ad%cf%81%cf%89_%ce%b1%ce%bd_%ce%bc%cf%80%ce%bf%cf%81%cf%8e._%ce%a4%ce%97_%ce%93%ce%9b%ce%a9%ce%a3%ce%a3%ce%91_%ce%a3%ce%9f%ce%a5_%ce%9c%ce%95%ce%a3%ce%91!/%ce%98%ce%b1_%cf%84%ce%bf_%ce%ba%ce%ac%ce%bd%cf%89_%cf%80%ce%ad%ce%b9%cf%83%cf%84_%cf%83%cf%84%ce%bf_%cf%84%cf%83%ce%b1%cf%84/%ce%91!_%ce%92%ce%bb%ce%ad%cf%80%cf%89_%ce%ac%ce%bb%ce%bb%ce%bf_%ce%ba%ce%b5%ce%af%ce%bc%ce%b5%ce%bd%ce%bf_%ce%b5%ce%b4%cf%8e._%ce%94%ce%bf%cf%8d%ce%bb%ce%b5%cf%88%ce%b5_%cf%84%ce%bf_%ce%b5%cf%81%ce%b3%ce%b1%ce%bb%ce%b5%ce%af%ce%bf!/%ce%9b%ce%af%ce%b3%ce%bf_%ce%ac%cf%84%ce%bf%ce%bd%ce%bf_%cf%84%ce%bf_%ce%ba%cf%8c%ce%b2%cf%89/%ce%9d%ce%b1%ce%b9_%ce%bf%ce%b9_%cf%84%cf%8c%ce%bd%ce%bf%ce%b9_%ce%b5%ce%af%ce%bd%ce%b1%ce%b9_%cf%83%cf%84%ce%bf_%cf%83%cf%87%ce%bf%ce%bb%ce%b5%ce%b9%ce%bf/%ce%bc%ce%b1%cf%85%cf%83%cf%89%ce%bb%ce%b5%ce%b9%ce%bf/%ce%bc%ce%bf%cf%85%cf%83%ce%b5%ce%b9%ce%bf/irinodikio/%cf%83%cf%86%ce%b1%ce%b3%ce%b5%ce%b9%ce%bf/%ce%bd%ce%b5%ce%ba%cf%81%ce%bf%cf%84%ce%b1%cf%86%ce%b5%ce%b9%ce%bf/%cf%83%cf%85%ce%bb%ce%bb%ce%bf%ce%b3%ce%b9%ce%ba%ce%b7_%ce%bc%ce%bd%ce%b7%ce%bc%ce%b7.pdf
|
||||
|
||||
|
||||
|
||||
καμία* επισημείωση δεν είναι μόνη,
|
||||
WordMord(ɔ), 2022, Free Art Licence,
|
||||
http://artlibre.org/licence/lal/en/
|
24
templates/base.html
Normal file
24
templates/base.html
Normal file
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="../static/styles.css"
|
||||
/>
|
||||
<link rel="icon" href="/static/images/tongue-emoji.png">
|
||||
|
||||
<!--href="{{ url_for('static', filename='styles.css') }}"-->
|
||||
<title>{% block title %} {% endblock %} Ποινικός Κώδικας WordMord</title>
|
||||
</head>
|
||||
<body>
|
||||
<!-- <nav class="navbar navbar-expand-md navbar-light">
|
||||
<a href="/">Wordmord</a>
|
||||
<a href="/about">About</a>
|
||||
</nav> -->
|
||||
<div class="content">
|
||||
{% block content %} {% endblock %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
121
templates/results (copy).html
Normal file
121
templates/results (copy).html
Normal file
@ -0,0 +1,121 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- <iframe src="https://pad.vvvvvvaria.org/wordmord.test" height="800" width="800"></iframe> -->
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<button onclick="decode()">provoli / show PDF</button>
|
||||
<button id="button1" onclick="transform()">metalucksi PDF / distort PDF</button>
|
||||
<button id="button2" onclick="copy()"> antigrafi keimenou ponikou kodika / copy penal code text</button>
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
<span id="title3"> perioxi epikollimenou keimenou / pasted text area</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<!-- <input type="text" id="my_field" value="" wrap="soft"> -->
|
||||
<textarea name="text" id="my_field" wrap="soft" placeholder="Paste the URL of the PDF here. Κάνε επικόλληση του λινκ εδώ. WordMord believes that the violence of language is not eradicated by merely deleting/erasing words, but rather by transversing their violent imposition through specific practices that trouble and disrupt grammatical consistency, semantic norms, ‘correct’ pronunciation, ‘proper’ bodily posture. The rupture of linguistic limits suggests the possibility of experiencing language in its materiality.
|
||||
|
||||
WordMord poses questions on the relationship between language, technology, trauma and violence. The collective artistic research will evolve through workshops, presentations and artworks. Through collaborations with artists, activists and groups working on feminist coding,WordMord seeks to shape an online rhizomatic space as an active feminist archive. At the same time, it project will provide tools and methods towards a poetically subversive meta/para/re-writing of derogatory narratives and consequently of trauma and violence.
|
||||
|
||||
#WordMord´s initial research group: Vassiliea Stylianidou aka Franck-Lee Alli-Tis, Angeliki Diakrousi, Christina Karagianni, Stylianos Benetos aka Oýto Arognos, Mounologies: Eleni Diamantouli and Anna Delimpasi. It started in collaboration with the #CNMFPP in 2019.
|
||||
"></textarea>
|
||||
</td>
|
||||
<td rowspan="3">
|
||||
<textarea name="empty" id="empty_frame" wrap="soft" placeholder="Paste the copied text here. Κάνε επικόλληση του κειμένου εδώ"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span id="title1"> epishmeiomenos poinikos kodikas / annotated penal code</span>
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
<span id="title2">metalucktriomeno PDF / distorted PDF</span>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div id="initialpdf">
|
||||
<iframe id="inputpdf" src="" height="800rem" width="800rem"></iframe>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<iframe id="showmonster" src="{{url_for('static', filename='pdf/output.pdf')}}" height="800rem" width="800rem"></iframe>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</table>
|
||||
<!-- WordMord believes that the violence of language is not eradicated by merely deleting/erasing words, but rather by transversing their violent imposition through specific practices that trouble and disrupt grammatical consistency, semantic norms, ‘correct’ pronunciation, ‘proper’ bodily posture. The rupture of linguistic limits suggests the possibility of experiencing language in its materiality.
|
||||
|
||||
WordMord poses questions on the relationship between language, technology, trauma and violence. The collective artistic research will evolve through workshops, presentations and artworks. Through collaborations with artists, activists and groups working on feminist coding,WordMord seeks to shape an online rhizomatic space as an active feminist archive. At the same time, it project will provide tools and methods towards a poetically subversive meta/para/re-writing of derogatory narratives and consequently of trauma and violence.
|
||||
|
||||
#WordMord´s initial research group: Vassiliea Stylianidou aka Franck-Lee Alli-Tis, Angeliki Diakrousi, Christina Karagianni, Stylianos Benetos aka Oýto Arognos, Mounologies: Eleni Diamantouli and Anna Delimpasi. It started in collaboration with the #CNMFPP in 2019.
|
||||
|
||||
Tags -->
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
function decode() {
|
||||
var url = document.getElementById("my_field").value;
|
||||
var urlDecode = decodeURIComponent(url);
|
||||
// console.log(urlDecode);
|
||||
|
||||
document.getElementById("my_field").value = urlDecode;
|
||||
const showpdf = document.getElementById("inputpdf");
|
||||
var textarea = document.getElementById('my_field');
|
||||
var result
|
||||
|
||||
function updateResult() {
|
||||
result.textContent = textarea.value;
|
||||
}
|
||||
|
||||
textarea.addEventListener('keyup', updateResult);
|
||||
showpdf.src = textarea.value;
|
||||
const pdf = document.getElementById("initialpdf");
|
||||
pdf.style.visibility = "visible";
|
||||
const button1 = document.getElementById("button1");
|
||||
button1.style.visibility = "visible";
|
||||
const button2 = document.getElementById("button2");
|
||||
button2.style.visibility = "visible";
|
||||
const title1 = document.getElementById("title1");
|
||||
title1.style.visibility = "visible";
|
||||
|
||||
|
||||
// textarea.style.color="#fd69B3";
|
||||
|
||||
}
|
||||
|
||||
function transform() {
|
||||
const show = document.getElementById("showmonster");
|
||||
show.style.visibility = "visible";
|
||||
const title2 = document.getElementById("title2");
|
||||
title2.style.visibility = "visible";
|
||||
}
|
||||
|
||||
function copy() {
|
||||
const show = document.getElementById("empty_frame");
|
||||
show.style.visibility = "visible";
|
||||
const title3 = document.getElementById("title3");
|
||||
title3.style.visibility = "visible";
|
||||
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$('form').find("input[type='text'],textarea").val("");
|
||||
});
|
||||
// extract the text of a pdf/ copy on clipboard
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
116
templates/results.html
Normal file
116
templates/results.html
Normal file
@ -0,0 +1,116 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- <iframe src="https://pad.vvvvvvaria.org/wordmord.test" height="800" width="800"></iframe> -->
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<!-- <input type="text" id="my_field" value="" wrap="soft"> -->
|
||||
<textarea name="text" id="my_field" wrap="soft" placeholder="Επικόλληση του συνδέσμου του PDF του Ποινικού Κώδικα που βρήκατε στο ηλεκτρονικό ταχυδρομείο σας ή στο ΔΙΑΒΑΣΕΜΕ.txt, εδώ.
|
||||
"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
|
||||
<button id="button3" onclick="readme()">ΔΙΑΒΑΣΕΜΕ.txt</button>
|
||||
<button id="button5" onclick="decode()">ΠΡΟΒΟΛΗ ΠΟΙΝΙΚΟΥ ΚΩΔΙΚΑ <img src="{{url_for('static', filename='images/closed.gif')}}"></button>
|
||||
<button id="button2" onclick="copy()"> ΑΝΤΙΓΡΑΦΗ ΚΩΔΙΚΑ</button>
|
||||
<button id="button1" onclick="transform()">ΜΕΤΑΛΛΑΓΜΕΝΟΣ ΚΩΔΙΚΑΣ</button>
|
||||
<button id="button4" onclick="window.open('{{url_for('static', filename='pdf/ΣΧΕΔΙΟ_ΜΕΤΑΛΛΑΓΜΕΝΟΥ_ΠΟΙΝΙΚΟΥ_ΚΩΔΙΚΑ_01.pdf')}}');">ΚΑΤΕΒΑΣΕ ΜΕΤΑΛΛΑΓΜΕΝΟ ΚΩΔΙΚΑ <img src="{{url_for('static', filename='images/open.gif')}}"> </button>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<div id="initialpdf">
|
||||
<iframe id="inputpdf" src="" height="800rem" width="750rem"></iframe>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<textarea name="empty" id="empty_frame" wrap="soft" placeholder="Επιλέξτε και αντιγράψτε το περιεχόμενο του PDF.
|
||||
Κάντε επικόλληση του περιεχομένου του Ποινικού Κώδικα εδώ.
|
||||
Υπάρχει δυνατότητα επεξεργασίας του επικολλημένου κειμένου.
|
||||
|
||||
Μπορείτε να στείλετε τις τροποποιήσεις που προτείνετε στο mailing list του WordMord https://we.lurk.org/mailman3/lists/wordmord.we.lurk.org/"></textarea>
|
||||
</td>
|
||||
<td class="prevent">
|
||||
<!--<iframe id="showmonster" src="{{url_for('static', filename='pdf/ΣΧΕΔΙΟ_ΜΕΤΑΛΛΑΓΜΕΝΟΥ_ΠΟΙΝΙΚΟΥ_ΚΩΔΙΚΑ_01.pdf')}}" height="750rem" width="800rem"></iframe>-->
|
||||
<iframe id="showmonster" src="{{url_for('static', filename='pdf/ΣΧΕΔΙΟ_ΜΕΤΑΛΛΑΓΜΕΝΟΥ_ΠΟΙΝΙΚΟΥ_ΚΩΔΙΚΑ_01.pdf')}}" height="800rem" width="750rem"></iframe>
|
||||
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
function decode() {
|
||||
var url = document.getElementById("my_field").value;
|
||||
var urlDecode = decodeURIComponent(url);
|
||||
// console.log(urlDecode);
|
||||
|
||||
|
||||
|
||||
document.getElementById("my_field").value = urlDecode;
|
||||
const showpdf = document.getElementById("inputpdf");
|
||||
var textarea = document.getElementById('my_field');
|
||||
var result
|
||||
|
||||
|
||||
function updateResult() {
|
||||
result.textContent = textarea.value;
|
||||
}
|
||||
|
||||
textarea.addEventListener('keyup', updateResult);
|
||||
showpdf.src = textarea.value;
|
||||
const pdf = document.getElementById("initialpdf");
|
||||
pdf.style.visibility = "visible";
|
||||
const button2 = document.getElementById("button2");
|
||||
button2.style.visibility = "visible";
|
||||
textarea.style.color = "blue";
|
||||
|
||||
}
|
||||
|
||||
|
||||
function readme(){
|
||||
window.open('{{url_for('static',filename='ΔΙΑΒΑΣΕΜΕ.txt')}}');
|
||||
const button5 = document.getElementById("button5");
|
||||
button5.style.visibility = "visible";
|
||||
}
|
||||
|
||||
function transform() {
|
||||
const show = document.getElementById("showmonster");
|
||||
show.style.visibility = "visible";
|
||||
const button4 = document.getElementById("button4");
|
||||
button4.style.visibility = "visible";
|
||||
var emptyframe = document.getElementById('empty_frame');
|
||||
emptyframe.style.color = "blue";
|
||||
}
|
||||
|
||||
function copy() {
|
||||
const show = document.getElementById("empty_frame");
|
||||
show.style.visibility = "visible";
|
||||
const button1 = document.getElementById("button1");
|
||||
button1.style.visibility = "visible";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$('form').find("input[type='text'],textarea").val("");
|
||||
});
|
||||
// extract the text of a pdf/ copy on clipboard
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
101
templates/results_2.html
Normal file
101
templates/results_2.html
Normal file
@ -0,0 +1,101 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- <iframe src="https://pad.vvvvvvaria.org/wordmord.test" height="800" width="800"></iframe> -->
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<button onclick="decode()">provoli / show PDF</button>
|
||||
<button id="button1" onclick="transform()">metalucksi PDF / distort PDF</button>
|
||||
<button id="button2" onclick="copy()"> antigrafi keimenou ponikou kodika / copy penal code text</button>
|
||||
<!-- <input type="text" id="my_field" value="" wrap="soft"> -->
|
||||
<textarea name="text" id="my_field" wrap="soft" placeholder="Paste the URL of the PDF here. Κάνε επικόλληση του λινκ εδώ. WordMord believes that the violence of language is not eradicated by merely deleting/erasing words, but rather by transversing their violent imposition through specific practices that trouble and disrupt grammatical consistency, semantic norms, ‘correct’ pronunciation, ‘proper’ bodily posture. The rupture of linguistic limits suggests the possibility of experiencing language in its materiality.
|
||||
|
||||
WordMord poses questions on the relationship between language, technology, trauma and violence. The collective artistic research will evolve through workshops, presentations and artworks. Through collaborations with artists, activists and groups working on feminist coding,WordMord seeks to shape an online rhizomatic space as an active feminist archive. At the same time, it project will provide tools and methods towards a poetically subversive meta/para/re-writing of derogatory narratives and consequently of trauma and violence.
|
||||
|
||||
#WordMord´s initial research group: Vassiliea Stylianidou aka Franck-Lee Alli-Tis, Angeliki Diakrousi, Christina Karagianni, Stylianos Benetos aka Oýto Arognos, Mounologies: Eleni Diamantouli and Anna Delimpasi. It started in collaboration with the #CNMFPP in 2019.
|
||||
"></textarea>
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
<span id="title3"> perioxi epikollimenou keimenou / pasted text area</span>
|
||||
<textarea name="empty" id="empty_frame" wrap="soft" placeholder="Paste the copied text here. Κάνε επικόλληση του κειμένου εδώ"></textarea>
|
||||
<span id="title1"> epishmeiomenos poinikos kodikas / annotated penal code</span>
|
||||
<div id="initialpdf">
|
||||
<iframe id="inputpdf" src="" height="800rem" width="800rem"></iframe>
|
||||
</div>
|
||||
|
||||
<span id="title2">metalucktriomeno PDF / distorted PDF</span>
|
||||
<iframe id="showmonster" src="{{url_for('static', filename='pdf/output.pdf')}}" height="800rem" width="800rem"></iframe>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<!-- WordMord believes that the violence of language is not eradicated by merely deleting/erasing words, but rather by transversing their violent imposition through specific practices that trouble and disrupt grammatical consistency, semantic norms, ‘correct’ pronunciation, ‘proper’ bodily posture. The rupture of linguistic limits suggests the possibility of experiencing language in its materiality.
|
||||
|
||||
WordMord poses questions on the relationship between language, technology, trauma and violence. The collective artistic research will evolve through workshops, presentations and artworks. Through collaborations with artists, activists and groups working on feminist coding,WordMord seeks to shape an online rhizomatic space as an active feminist archive. At the same time, it project will provide tools and methods towards a poetically subversive meta/para/re-writing of derogatory narratives and consequently of trauma and violence.
|
||||
|
||||
#WordMord´s initial research group: Vassiliea Stylianidou aka Franck-Lee Alli-Tis, Angeliki Diakrousi, Christina Karagianni, Stylianos Benetos aka Oýto Arognos, Mounologies: Eleni Diamantouli and Anna Delimpasi. It started in collaboration with the #CNMFPP in 2019.
|
||||
|
||||
Tags -->
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
function decode() {
|
||||
var url = document.getElementById("my_field").value;
|
||||
var urlDecode = decodeURIComponent(url);
|
||||
// console.log(urlDecode);
|
||||
|
||||
document.getElementById("my_field").value = urlDecode;
|
||||
const showpdf = document.getElementById("inputpdf");
|
||||
var textarea = document.getElementById('my_field');
|
||||
var result
|
||||
|
||||
function updateResult() {
|
||||
result.textContent = textarea.value;
|
||||
}
|
||||
|
||||
textarea.addEventListener('keyup', updateResult);
|
||||
showpdf.src = textarea.value;
|
||||
const pdf = document.getElementById("initialpdf");
|
||||
pdf.style.visibility = "visible";
|
||||
const button1 = document.getElementById("button1");
|
||||
button1.style.visibility = "visible";
|
||||
const button2 = document.getElementById("button2");
|
||||
button2.style.visibility = "visible";
|
||||
const title1 = document.getElementById("title1");
|
||||
title1.style.visibility = "visible";
|
||||
|
||||
|
||||
// textarea.style.color="#fd69B3";
|
||||
|
||||
}
|
||||
|
||||
function transform() {
|
||||
const show = document.getElementById("showmonster");
|
||||
show.style.visibility = "visible";
|
||||
const title2 = document.getElementById("title2");
|
||||
title2.style.visibility = "visible";
|
||||
}
|
||||
|
||||
function copy() {
|
||||
const show = document.getElementById("empty_frame");
|
||||
show.style.visibility = "visible";
|
||||
const title3 = document.getElementById("title3");
|
||||
title3.style.visibility = "visible";
|
||||
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$('form').find("input[type='text'],textarea").val("");
|
||||
});
|
||||
// extract the text of a pdf/ copy on clipboard
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user