Skip to content

Commit

Permalink
woohooooo
Browse files Browse the repository at this point in the history
  • Loading branch information
marekyggdrasil committed Aug 7, 2022
1 parent 294066d commit 8089ae5
Show file tree
Hide file tree
Showing 7 changed files with 217 additions and 1 deletion.
52 changes: 51 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,51 @@
# polishify
# polishify

## Setup

Simply

```sh
pip install polishify
```

## Usage

If you have some text that is in Polish but characters look weird it might not be encoded with `windows-1250` or `iso-8859-2` encoding. If your file is `sometext.txt` you may

```sh
polishify sometext.txt
```

and it will show you something like

```
detected encoding is: windows-1250
```

If you wish to get this file converted to `utf-8` just do

```sh
polishify sometext.txt properly-encoded.txt
```

If you do it in bash script you might not want to see any outputs, the script supports silent mode as follows

```sh
polishify sometext.txt properly-encoded.txt --silent
```

This package contains words with polish letters, you might want to use your own dataset `dataset.json` file.

```sh
polishify sometext.txt properly-encoded.txt --silent --dataset dataset.json
```

We also provide a tool that generates it from a text

```sh
polishify-extract sometext.txt dataset.json --encoding windows-1250
```

## Author

Made by [Marek Narożniak](https://mareknarozniak.com/), for the world and especially people who have people in the family who needs subtitles in Polish and want to bulk convert their encodings. No warranty provided. Licensed under GPL-3.
1 change: 1 addition & 0 deletions polishify/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__version__ = '0.1.0'
48 changes: 48 additions & 0 deletions polishify/extract.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# import string
# print(string.printable)

import argparse
import re
import json

parser = argparse.ArgumentParser(description='Polishify by Marek Narozniak, a tool that helps you get rid of old encodings in Polish text.')
parser.add_argument('input',
help='Input file that contains polish text to generate the dataset')
parser.add_argument('output',
help='Output file that will store the dataset')
parser.add_argument('--encoding',
default='utf-8',
help='Encoding of the file.')
args = parser.parse_args()

def main():
data = None
with open(args.input, 'rb+') as f:
data = f.read()

decoded = data.decode(args.encoding).lower()

keep = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
remove = '0123456789!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~\r\n'

for r in remove:
decoded = decoded.replace(r, ' ')

decoded = re.sub(' +', ' ', decoded)

words = decoded.split(' ')
words = list(set(words))

polish = 'łąęźćżńó'
dataset = {}

for p in polish:
selected = []
for word in words:
if p in word:
selected.append(word)
print(p, len(selected))
dataset[p] = selected

with open(args.output, 'w') as f:
json.dump(dataset, f, ensure_ascii=False)
82 changes: 82 additions & 0 deletions polishify/polishify.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import argparse
import sys
import re
import json

from polishify import static

try:
import importlib.resources as pkg_resources
except ImportError:
# Try backported to PY<37 `importlib_resources`.
import importlib_resources as pkg_resources

parser = argparse.ArgumentParser(description='Polishify by Marek Narozniak, a tool that helps you get rid of old encodings in Polish text.')
parser.add_argument('--silent',
required=False,
action='store_true',
help='Silent mode makes it not show any output.')
parser.add_argument('input',
help='Input file that contains polish text with unknown encoding.')
parser.add_argument('--out',
help='If present, writes the utf-8 encoded text there')
parser.add_argument('--dataset',
help='You may use your own words reference dataset json file.')
args = parser.parse_args()


def getLowercaseWords(text):
remove = '0123456789!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~\r\n'
lowered = text.lower()
for r in remove:
lowered = lowered.replace(r, ' ')
lowered = re.sub(' +', ' ', lowered)
words = lowered.split(' ')
words = list(set(words))
return words


def isPolish(text, dataset):
polish = 'łąęźćżńó'
words = getLowercaseWords(text)
for j, p in enumerate(polish):
required_words = dataset[p]
common = [value for value in words if value in required_words]
if len(common) == 0:
return False
return True


def main():
dataset = None
if args.dataset:
with open(args.dataset, 'r') as f:
dataset = json.load(f)
else:
with pkg_resources.open_binary(static, 'dataset.json') as f:
dataset = json.load(f)

encodings = ['utf-8', 'iso-8859-2', 'windows-1250']

data = None
with open(args.input, 'rb+') as f:
data = f.read()

target_encoding = None
for encoding in encodings:
try:
decoded = data.decode(encoding)
except:
continue
if isPolish(decoded, dataset):
target_encoding = encoding
if not args.silent:
print('detected encoding is: ', encoding)
break

if args.out:
if not args.silent:
print('Writing to', args.out)
decoded = data.decode(target_encoding)
with open(args.out, 'w') as f:
f.write(decoded)
Empty file added polishify/static/__init__.py
Empty file.
1 change: 1 addition & 0 deletions polishify/static/dataset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"ł": ["dotykał", "właśnie", "pamiętał", "generał", "byłam", "długa", "była", "słonecznym", "zgłodniałeś", "współrzędne", "znalazł", "wysiłku", "krzesło", "małej", "dotykałem", "popełniamy", "całkowita", "przybyły", "pełni", "około", "człowieku", "istniała", "światło", "współczuję", "powiedziałbym", "miałbym", "właściwą", "układzie", "miałeś", "powiedział", "pokonał", "niezwykłą", "powiedziałam", "chciałem", "żałuje", "głodny", "zasłużyliście", "słyszeć", "położenie", "białek", "połączeniem", "zawiodła", "obsługi", "miało", "moduł", "zmarnowałeś", "widziałem", "ustaliłem", "chciał", "wokół", "błędny", "siły", "powstrzymywało", "malowidła", "włączymy", "włączam", "wyraził", "połączenie", "siłowe", "działać", "łatwym", "odkrył", "tłumaczyć", "dłużej", "północ", "przepełniło", "chciała", "sprowadził", "przydział", "osłonę", "wiedział", "mówiła", "przesyła", "przesłać", "włącznie", "wyłączaj", "usłyszeć", "strzelałeś", "dołączycie", "mały", "kłopoty", "mówiłem", "przyjaciół", "zastanawiałem", "łańcucha", "cały", "spisałeś", "wykrywał", "członkowie", "włączaj", "mogłeś", "usiadłem", "cała", "zostało", "poczułem", "źródło", "dorównywałaby", "wzrastało", "zauważyłem", "chłopiec", "chłopaki", "przyszłość", "zapadło", "pomysł", "myślałem", "bawiłam", "został", "załapałem", "kałużowy”", "skupiłem", "udało", "żołnierzy", "widział", "zgubiłam", "przesłona", "właściwy", "wiedziałem", "odległej", "tyłu", "przeszłość", "sygnał", "tańczyła", "całe", "miała", "posłuchaj", "pułkowniku", "poszedł", "zmieniło", "śniło", "mogło", "diabła", "sprawdziłem", "wyłączenia", "należało", "pułkownika", "stało", "dół", "był", "pomyślałam", "przyprowadziłem", "główną", "powiedziałeś", "rozległe", "wyłącz", "odbijało", "działa", "słyszałem", "zapamiętał", "zatonęło", "pułkownik", "podobało", "smakowałam", "całego", "bały", "posłuchać", "spał", "nazywało", "wyłączyła", "leżało", "całkowicie", "zaskoczył", "mogły", "próżnował", "włączają", "opadły", "przeczytałam", "przesyłaj", "wyłączcie", "szukały", "znalazłeś", "przełamać", "byłem", "zrobiłeś", "słuchajcie", "źródła", "powracał", "pełno", "przetrwało", "zabrałaś", "zrobiłem", "piekło", "głowę", "niewłaściwym", "zdołasz", "głównego", "hałasu", "miła", "najechał", "obsługiwać", "miło", "członków", "próbowałem", "zobaczył", "nastąpiło", "włączyć", "było", "wybierałam", "zostałeś", "doskonałe", "miły", "błagał", "strzał", "dotknęła", "sprowadziłeś", "głód", "została", "pozostałe", "zgadzało", "pułkownikiem", "wysłać", "połączenia", "zgłosiliście", "trwałoby", "zebrałam", "były", "załamuje", "udział", "chciałaś", "głodowi", "podjęłaś", "słucham", "całym", "mogła", "umysłu", "udzielił", "generała", "załóż", "powiedziałem", "dowiedziałem", "mało", "osłony", "przyjaciółmi", "właściwie", "miałem", "światła", "musiał", "zagłada", "wyczułeś", "karłowata", "przeładować", "błędy", "łącznie", "zupełnie", "zespół", "kałużowy", "wydawało", "tłumaczenie", "wyłączeniu"], "ą": ["powstrzymują", "mijają", "wodą", "najmądrzejsi", "wymagają", "ściągnie", "mogą", "wygląda", "pomogą", "przelatujący", "mówią", "ziemią", "skąd", "zbliżających", "właściwą", "dotąd", "wyczuwają", "zacząć", "niezwykłą", "jedną", "dyplomatyczną", "stwierdzą", "zaczną", "spędzą", "znaną", "połączeniem", "sądzę", "latające", "zbuntowaną", "wystarczająco", "dokądś", "potrafią", "mówiąc", "osiąga", "potężną", "idą", "włączymy", "misją", "włączam", "naszą", "interesującego", "połączenie", "ją", "pańską", "niewyobrażalną", "wracają", "szczątkowymi", "mną", "bądź", "odciągnąć", "włącznie", "wyłączaj", "dołączycie", "pomocą", "urządzeniu", "lądowania", "dokąd", "mają", "waszą", "oglądam", "zabierając", "bądźcie", "włączaj", "tą", "wyglądają", "moją", "twoją", "otwartą", "galaktyką", "śpią", "imponujące", "wziąć", "bawią", "związek", "są", "usiąść", "przywódcą", "porządku", "wylądujemy", "muszą", "pozwalają", "początku", "zjawią", "rozwalą", "nieosiągalny", "wykonując", "wyłączenia", "reprezentujących", "ekspedycyjną", "główną", "wyłącz", "określających", "którą", "lecą", "tysiące", "potrzebują", "niesamowitą", "wyrządzona", "zbliżają", "sobą", "ojczyzną", "bronią", "wyłączyła", "nawiązaliśmy", "zamknąć", "najpotężniejszą", "chwilą", "włączają", "wiedzą", "wyłączcie", "przebudzą", "wykrywają", "aktywują", "oglądasz", "nadlatują", "pewnością", "powstrzymujące", "stąd", "powierzchnią", "ciągle", "inną", "przybędą", "niebezpieczną", "nastąpiło", "wątpię", "włączyć", "rozwiązanie", "chcą", "ostatnią", "rangą", "obudzą", "dobrą", "wyjątkowemu", "żyją", "otrząśnij", "połączenia", "lądujcie", "gorące", "nawiązywać", "postąpić", "ściągnij", "będą", "biorąc", "nawiązaliście", "wyruszą", "technologią", "podjąć", "łącznie", "zasilają", "latającym", "zewnątrz", "zająć", "widzą", "wyłączeniu"], "ę": ["przegapię", "pamiętał", "imię", "galaktykę", "miesięcy", "wędrowców", "naprawdę", "współrzędne", "pragnę", "konsolę", "będzie", "zabiorę", "rację", "cię", "noktowizję", "współczuję", "antarktydę", "okazję", "szurnięci", "grupę", "spędzą", "sondę", "wodę", "ochronę", "sądzę", "błędny", "mogę", "potężną", "parę", "wrócę", "nadaję", "sprzętu", "myślę", "potęga", "dostęp", "stronę", "szczęście", "boję", "uwięziliście", "osłonę", "idę", "atlantydę", "obronę", "zapętlone", "nazwę", "klęknij", "rozmowę", "między", "potędze", "nowinę", "wiarę", "ciężko", "będziesz", "umrę", "placówkę", "uwagę", "znajdę", "cieszę", "planetę", "względu", "pojęcia", "chwilę", "poślę", "będę", "przemyślę", "najwięcej", "zgadnę", "maskę", "celę", "uszkodzę", "chcę", "stuknięci", "radę", "daję", "energię", "większym", "zasięg", "ziemię", "szansę", "będziecie", "dziękuję", "zapamiętał", "zatonęło", "następnym", "herbatę", "trochę", "tę", "najpotężniejszą", "muszę", "mówię", "przybędzie", "zaakceptuję", "części", "strefę", "decyzję", "zapamiętaj", "się", "potrzebuję", "dźwięk", "czuję", "dziurę", "proszę", "lubię", "kamerę", "zdecyduję", "głowę", "zwięźle", "przybędą", "więcej", "więc", "wątpię", "wszędzie", "wyrażę", "dotknęła", "funkcję", "dzięki", "pamiętam", "próbuję", "zasięgiem", "nadzieję", "garstkę", "część", "zdobędziecie", "ramię", "kartotekę", "oblężeni", "pozycję", "podjęłaś", "widzę", "uwzględniono", "rękach", "będziemy", "technologię", "będą", "poświęca", "ręka", "błędy", "językiem", "dziwię", "zaczęliśmy"], "ź": ["sprawdź", "przyprowadź", "chodźmy", "wejdźcie", "później", "znaleźliśmy", "chodźcie", "bądź", "idźcie", "najwyraźniej", "przyjaźń", "bądźcie", "idź", "weź", "źródło", "późno", "odpowiedź", "znaleźć", "przejdź", "znajdźcie", "źli", "źródła", "nieźle", "dźwięk", "zwięźle", "źle"], "ć": ["pośpieszyć", "przedrzeć", "spodziewać", "zobaczyć", "odejść", "zostać", "darować", "porozmawiać", "ruszać", "ilość", "reaktywować", "zadbać", "użyć", "zaoferować", "przeszukać", "potraktować", "wracać", "sprawdzić", "wstawać", "zatrzymać", "stać", "zacząć", "słyszeć", "jeść", "zapalać", "być", "podtrzymać", "opuszczać", "zareagować", "lecieć", "przerwać", "wychodzić", "wymieniać", "iść", "wybierać", "działać", "tłumaczyć", "szukać", "negocjować", "zapewnić", "martwić", "widzieć", "ustanowić", "wpakować", "przesłać", "odciągnąć", "usłyszeć", "sieć", "spróbować", "startować", "obecność", "zabezpieczyć", "kryć", "wyrazić", "zdolność", "przyszłość", "ćwiczeniom", "wziąć", "wylecieć", "handlować", "używać", "poznać", "uczyć", "utworzyć", "brakować", "usiąść", "bać", "pozwolić", "ocalić", "ćwiczenia", "podnieść", "przeszłość", "robić", "znaleźć", "widać", "ustalić", "spowodować", "potrzebować", "wrócić", "zapalić", "bawić", "ewakuować", "zatrzymywać", "dopuścić", "atakować", "dzwonić", "posłuchać", "powiedzieć", "opuścić", "siedzieć", "porzucić", "zamknąć", "gadać", "śmierć", "strzelać", "żyć", "dość", "przełamać", "rozwalić", "wiadomość", "dostać", "pokazać", "latać", "cześć", "obstawiać", "przygotować", "niewidzialność", "przekonywać", "wypatrywać", "uratować", "ludzkość", "umrzeć", "obsługiwać", "wpuść", "czekać", "zasilić", "włączyć", "wyruszać", "zostawić", "zbadać", "spytać", "pohandlować", "udać", "otworzyć", "zrobić", "wysłać", "wiedzieć", "przypominać", "część", "zabić", "ciemność", "zebrać", "zejść", "myśleć", "nawiązywać", "wyobrazić", "zastanowić", "postąpić", "mnożyć", "zawrócić", "przemieszczać", "obróć", "walić", "sprawić", "zabrać", "przeładować", "przejść", "podjąć", "pójść", "mieć", "zająć"], "ż": ["próżniowej", "niż", "użyć", "bliżej", "zbliżających", "żniwo", "także", "przecież", "żebyś", "chociaż", "żałuje", "życie", "zasłużyliście", "położenie", "sierżancie", "żywe", "wyjeżdżam", "przekaż", "tuż", "potężną", "przeżyli", "uważajcie", "żartujesz", "niewyobrażalną", "dłużej", "boże", "żadnego", "każdy", "drużyna", "drużyny", "ciężko", "starożytni", "należy", "ważniejszego", "pilotażowi", "że", "zużywa", "zauważyłem", "używać", "ponieważ", "podróż", "kałużowy”", "żołnierzy", "pokaż", "możliwości", "żerowiska", "możesz", "żartuj", "zbliża", "najodważniejsi", "należało", "zużycie", "podróży", "też", "żywot", "zbliżają", "leżało", "poważny", "nieważne", "próżnował", "najpotężniejszą", "żyć", "życia", "poważne", "może", "możemy", "niezależne", "żyje", "ostrożniejszy", "żeby", "życiu", "wyrażę", "możecie", "zbliżonych", "pomoże", "aż", "żyją", "uważam", "upoważnienia", "już", "oblężeni", "każdym", "duże", "najwyższy", "żerowisko", "mnożyć", "odżywiane", "załóż", "ostrożni", "duża", "pomóż", "przeróżne", "kałużowy", "możliwe", "dużo"], "ń": ["pański", "zadzwońcie", "zostań", "pańską", "badań", "przyjaźń", "łańcucha", "ogień", "końcu", "zakończenie", "dzień", "tańczyła", "skończyliśmy", "broń", "dzwońcie", "niebezpieczeństwie", "odsuńcie", "pokoleń", "mieszkańcy", "przestrzeń"], "ó": ["próżniowej", "pozwól", "wędrowców", "współrzędne", "bandytów", "mówią", "siódmy", "córka", "stóp", "współczuję", "krajów", "pomóc", "móc", "spróbujcie", "przywódca", "którzy", "genów", "spróbuj", "zrób", "naróbcie", "potrójnie", "którymi", "później", "wokół", "zetów", "nieporównywalna", "sposób", "mówiąc", "wrócę", "ogóle", "dopóki", "północ", "dwóch", "światów", "mówiła", "wrócili", "równie", "pokój", "mówiłem", "spokój", "przyjaciół", "spróbować", "spójrzcie", "placówkę", "którego", "spójrz", "które", "źródło", "dorównywałaby", "komórkach", "róbcie", "późno", "mówi", "wróg", "podróż", "krótkie", "przywódcą", "środków", "przycisków", "przodków", "podwójnie", "próbowaliśmy", "wrócimy", "której", "dół", "milionów", "wrócić", "stój", "placówce", "podróży", "główną", "odwróci", "którą", "gotów", "próżnował", "mnóstwo", "mówię", "ósmy", "źródła", "powrócimy", "spróbujemy", "wśród", "placówki", "których", "głównego", "twój", "który", "którym", "członków", "próbowałem", "mój", "która", "wrót", "głód", "powróci", "komórki", "próbuję", "odbiór", "niektórzy", "swój", "niektórych", "wkrótce", "zawrócić", "załóż", "wrócisz", "obróć", "przyjaciółmi", "adresów", "pomóż", "przeróżne", "zespół", "pójdziemy", "pójść"]}
34 changes: 34 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import setuptools
import polishify


setuptools.setup(
name='polishify',
version=polishify.__version__,
packages=['polishify', 'polishify.static'],
license='MIT',
description = 'Helps you convert Polish text of unknown encoding into UTF-8',
long_description=open('README.md').read(),
long_description_content_type="text/markdown",
author = 'Marek Narozniak',
author_email = 'marek.yggdrasil@gmail.com',
install_requires=['argparse'],
url = 'https://github.com/marekyggdrasil/polishify',
classifiers=[
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 2",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
include_package_data=True,
package_data = {
# If any package contains *.txt or *.rst files, include them:
'': ['dataset.json'],
},
entry_points={
'console_scripts': [
'polishify=polishify.polishify:main',
'polishify-extract=polishify.extract:main'
],
},
)

0 comments on commit 8089ae5

Please sign in to comment.