Dehyphenation of broken text (mainly German), e.g., extracted from a PDF
Project description
dehyphen
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec6702730de5a03d6604400111dfbbb4a3037a629bb626a42d53f0c692cb95e0 |
|
MD5 | 21fbd9b3199c9039ee854564cfacae92 |
|
BLAKE2b-256 | 44c1899084e01547a717e2deef036b13d2dd5dc81d734a424cba5c124d476537 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca697cd5519dbc3ae85e373caf0d3624c2055c2c2f4632d6913dda5738bd1422 |
|
MD5 | 123b0744268440e8a7097a31950d190a |
|
BLAKE2b-256 | c3f3209201c27426125633ed1695048788b6b6ff0469d4f3fdde44bf3f033274 |