Skip to main content

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

Project description

dehyphen PyPI PyPI - Python Version PyPI - Downloads

Experimental, use with care.

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

dehyphen tries to reconstruct the original 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.

If you are into text extraction for German PDFs: Stay tuned. I'm gonna release something soon-ish. Follow @ddd_jetzt on Twitter for updates.

Installation

pip install 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).

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. There is non for German.

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.Strafrecht 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.2.0.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

dehyphen-0.2.0-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dehyphen-0.2.0.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.9 CPython/3.8.4 Darwin/19.6.0

File hashes

Hashes for dehyphen-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ec6702730de5a03d6604400111dfbbb4a3037a629bb626a42d53f0c692cb95e0
MD5 21fbd9b3199c9039ee854564cfacae92
BLAKE2b-256 44c1899084e01547a717e2deef036b13d2dd5dc81d734a424cba5c124d476537

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dehyphen-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.9 CPython/3.8.4 Darwin/19.6.0

File hashes

Hashes for dehyphen-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca697cd5519dbc3ae85e373caf0d3624c2055c2c2f4632d6913dda5738bd1422
MD5 123b0744268440e8a7097a31950d190a
BLAKE2b-256 c3f3209201c27426125633ed1695048788b6b6ff0469d4f3fdde44bf3f033274

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