Skip to main content

Dehyphenation of broken text (mainly German), i.e., extracted from a PDF

Project description

dehyphen PyPI PyPI - Python Version PyPI - Downloads

Experimental, use with care.

Python package for dehyphenation of broken text, i.e., extracted from a PDF. Mainly for the German but works for other languages as well.

dehyphen tries to reconstruct the original continuous text by choosing the most probably way to join lines or paragraphs (and remove hyphens). Several options are getting scored by calculating the perplexity of text, using Flair's character-based language models. Based on these scores, the best fitting option is taken to guess the original text.

Check out the PDF text extraction pipeline pd3f that uses dehypen internally.

An Example

For this input

die Bedeutung der finan-

ziellen Interessen der Union

dehyphen joines the lines and removes the '-'.

die Bedeutung der finanziellen Interessen der Union

But in this example

Auch andere EU-

Staaten, wie bspw. Polen,

the lines are also joined bu the hyphen is kept (becaus it's part of the word).

Auch andere EU-Staaten, wie bspw. Polen,

Installation

pip install dehyphen

or

poetry add dehyphen

Usage

from dehyphen import FlairScorer

scorer = FlairScorer(lang="de")

You need to set lang to de for German, en for English, es for Spanish, etc. Otherwise, a multi-language-model will be chosen as the default. See this section in the source code for more models (but omit the "-backwards" and "-forwards" as specified by Flair). Some are described here and there is another repo with some more models.

To speed up computations, choose a -fast language model from Flair. However, there are currently only a few. There is for instance a multi-language one named multi-v0 that contains English, German, French and others. Unfortunately, there is no fast German-only model right now.

Using CUDA (with a GPU) dramatically improves performance.

1. remove hyphens from the end of a line (within paragraphs)

# returns cleaned paragraph
scorer.dehyphen(special_format)

The input text has to be in a special format. Paragraphs should be seperated by two newlines characters (\n\n). Line should be end with a single newline \n. Several helper functions exists to transform the data into the required format.

2. join paragraphs, e.g., to reverse a page break

# returns the joined paragraphs if the language model thinks there were split, otherwise `None`
scorer.is_split_paragraph(paragraph_1, paragraph_2)

Example

from dehyphen import FlairScorer

scorer = FlairScorer(lang="de")

some_german_text = """Zwar wird durch die Einführung eines eigenen Strafgesetzes die Bedeutung der finan-
ziellen Interessen der Union gewiss unterstrichen, dennoch erscheint die Aufspaltung
des strafrechtlichen Vermögensschutzes zweifelhaft, insbesondere soweit es densel-
ben Schutzgegenstand, nämlich die vermögensrelevanten Interessen der Union be-
trifft. Zum einen wird es den Normunterworfenen ohne Not erschwert, die zu befolgen-
den Strafgesetze zu erfassen. Zum anderen ergeben sich potentielle Auslegungsdif-

ferenzen durch die Verwendung teilweise abweichender Terminologie (finanzielle In-
teressen vs. Vermögen). Schließlich wird der Schutz besagter Interessen ohnedies
bislang innerhalb des StGB gewährleistet. Daher empfiehlt es sich u.E., sämtliche Re-
gelungen des RegE in das StGB zu integrieren, soweit entsprechende Neuregelungen
überhaupt erforderlich sind. Hierdurch wird sich auch eine klarere Trennung von Straf-
recht und Verwaltungsrecht erreichen lassen.

Das Erfolgsverständnis entspricht daher eher dem wesentlich weiteren Betrugsbegriff
bspw. des US-amerikanischen Rechts (Federal Law bspw. Fraud, Defraud, Wire-
Fraud, Bank-Fraud, 18.U.S.C. §1341 ff.(2016)) , die teilweise auch ganz auf einen
Schaden verzichten. Fraud erfasst auch viele untreue- und unterschlagungsähnliche
Verhaltensweisen sowie betrügerische Verfügungen als solche. Auch andere EU-
Staaten, wie bspw. Polen, liegen im Hinblick auf den Erfolg näher bei der Richtlinie
als bei der deutschen Schadensdogmatik.
"""

special_format = text_to_format(some_german_text)
fixed_hyphens = scorer.dehyphen(special_format)

# checks if two paragraphs can be joined, useful to, e.g., reverse page breaks.
joined_paragraph = scorer.is_split_paragraph(fixed_hyphens[:2])

print(joined_paragraph)

Output text:

Zwar wird durch die Einführung eines eigenen Strafgesetzes die Bedeutung der finanziellen Interessen der Union gewiss unterstrichen, dennoch erscheint die Aufspaltung des strafrechtlichen Vermögensschutzes zweifelhaft, insbesondere soweit es denselben Schutzgegenstand, nämlich die vermögensrelevanten Interessen der Union betrifft. Zum einen wird es den Norm unterworfenen ohne Not erschwert, die zubefolgenden Strafgesetze zu erfassen. Zum anderen ergeben sich potentielle Auslegungsdifferenzen durch die Verwendung teilweise abweichender Terminologie (finanzielle Interessen vs. Vermögen). Schließlich wird der Schutz besagter Interessen ohnediesbislang innerhalb des StGB gewährleistet. Daher empfiehlt es sich u.E., sämtliche Regelungen des RegE in das StGB zu integrieren, soweit entsprechende Neuregelungenüberhaupt erforderlich sind. Hierdurch wird sich auch eine klarere Trennung von Strafrecht und Verwaltungsrecht erreichen lassen.

Hyphens are removed, paragraphs are joined along the word Auslegungsdifferenzen.

print(fixed_hyphens[-1])

Output text:

Das Erfolgsverständnis entspricht daher eher dem wesentlich weiteren Betrugsbegriff bspw. des US-amerikanischen Rechts (Federal Law bspw. Fraud, Defraud, Wire-Fraud, Bank-Fraud, 18.U.S.C. §1341 ff.(2016)), die teilweise auch ganz auf einen Schaden verzichten. Fraud erfasst auch viele untreue- und unterschlagungsähnliche Verhaltensweisen sowie betrügerische Verfügungen als solche. Auch andere EU-Staaten, wie bspw. Polen, liegen im Hinblick auf den Erfolg näher bei der Richtlinie als bei der deutschen Schadensdogmatik und Verwaltungsrecht erreichen lassen.

EU-Staaten & Wire-Fraud are not dehyphenized.

License

GPLv3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dehyphen-0.3.4.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

dehyphen-0.3.4-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file dehyphen-0.3.4.tar.gz.

File metadata

  • Download URL: dehyphen-0.3.4.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.10 CPython/3.8.5 Darwin/19.6.0

File hashes

Hashes for dehyphen-0.3.4.tar.gz
Algorithm Hash digest
SHA256 9f21e63aa95c6ab1bcc8ee9edd119d54fbbdd0f750d2c2b772bf09304493661d
MD5 e7a6aaf7198da5198234478cf3909638
BLAKE2b-256 50a411ce34ccf7d7ec55e5669a0e872726080cb9927ed1ae1d3d06767038a308

See more details on using hashes here.

File details

Details for the file dehyphen-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: dehyphen-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 19.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.10 CPython/3.8.5 Darwin/19.6.0

File hashes

Hashes for dehyphen-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 14269260b6459c9cf3d20d771e416fab08ba5d0f5408d9b5c045b7eba00ea0a6
MD5 95f2d7af7b0d6ce02695fe114daa02be
BLAKE2b-256 484fbe8ba2ade0e461170c05953cf59719019949257a31be25175138e87b6820

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page