Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to make it work with e.g. Polish or German: full script #7

Open
Manamama opened this issue Oct 9, 2024 · 1 comment
Open

How to make it work with e.g. Polish or German: full script #7

Manamama opened this issue Oct 9, 2024 · 1 comment

Comments

@Manamama
Copy link

Manamama commented Oct 9, 2024

Solved it after 5 hours only due to #2 tip.

This code works:

import sys
from dehyphen import FlairScorer, text_to_format
import os

def flatten_list(nested_list):
    """Recursively flatten a nested list into a single list while preserving EOLs at the middle level."""
    flat_list = []

    # Outer loop for the first level
    for outer_item in nested_list:
        # Middle loop for the second level
        flat_list.append("\n")  # Add a single EOL for separation
        for middle_item in outer_item:                
            
            # Innermost loop for the third level
            for word in middle_item:
                flat_list.append(word)  # Append each word to the flat list

    return flat_list

def main(input_file):
    # Initialize the scorer for German
    scorer = FlairScorer(lang="de")

    # Read the input file
    with open(input_file, 'r', encoding='utf-8') as file:
        polish_text = file.read()

    # Format the input text
    special_format = text_to_format(polish_text)

    # Remove hyphens from the text
    fixed_hyphens = scorer.dehyphen(special_format)
    print(fixed_hyphens)
    # Flatten the nested list of characters into a single string
    if isinstance(fixed_hyphens, list):
        # Use the flattening function to get a flat list of strings
        flat_output = flatten_list(fixed_hyphens)
        flattened_text = ' '.join(flat_output)  # Join all flattened elements into a single string
    else:
        flattened_text = fixed_hyphens  # In case it's already a string

    # Create output file name based on input file name
    base_name = os.path.basename(input_file)
    output_file = os.path.join(os.path.dirname(input_file), f"{os.path.splitext(base_name)[0]}_unhyphenated.txt")

    # Write the fixed text to the output file
    with open(output_file, 'w', encoding='utf-8') as file:
        file.write(flattened_text)

    print(f"Unhyphenated text written to {output_file}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python unhyphenate.py <path_to_input_file>")
        sys.exit(1)

    input_file_path = sys.argv[1]
    main(input_file_path)

(adjust the language there by hand - it pulls the right models off Net, at least for now.)

Sample result:

cat ~/Downloads/test_hyphened.txt
W ten sposób szef Reichswehry, a zarazem główny inicjator i wy-
konawca zbrojeń niemieckich, przeciął wszelką na ten temat dyskusję.

Dzięki tego rodzaju opiece i ogromnym kapitałom „Gefu* zdołało
w stosunkowo krótkim czasie, założyć w Rosji sowieckiej wiele fabryk
materiałów wojennych, które, o ironio.... już w kilka lat później, stały
się zakładami macierzystymi dla rozbudowującego się do ogromnych
rozmiarów sowieckiego przemysłu wojennego, skierowanego przeciw
Niemcom. Niektóre z tych fabryk, zorganizowali i kierowali nimi nie-
mieccy fachowcy, że wymienię tu choćby największą z fabryk chemicz-
nych, produkujących przeważnie gazy trujące, p. f. „Persolś, w Trocku,
w gubernii samarskiej, którą zorganizował i urządził słynny producent
gazów trujących inż. Hugo Stoltzenberg, z Hamburga. Również znana
niemiecka fabryka samolotów, Junkersa, zajęła się organizacją i bu-
dową przemysłu lotniczego w Sowietach. Według umowy Junkersa z mi-
nisterstwem Reichswehry, z marca 1922 roku, wspomniana firma zobo-
wiązała się do wyprodukowania na terytorium Rosji sowieckiej 299 „pak*
rocznie — tak bowiem nazwano w umowie z Junkersem nowoczesne Sa-
mołoty myśliwskie z których, w myśl osobnego porozumienia Z So-
wiecką misją handlową w Berlinie, 60 „pak* rocznie przeznaczonych
było dla Rosji, zaś 259 dla Reichswehry. Fakt zawarcia i wykonywa-
nia tej umowy, wyszedł na jaw dopiero jesienią 1924 r. kiedy to między
firmą Junkers a ministerstwem Reichswehry doszło do poważnych nie-
porozumień na tle finansowym. Owe nieporozumienia odbiły się później
silnym echem w Reichstagu. Mianowicie na jednym z posiedzeń komisji
budżetowej, poseł socjalistyczny Kiinstler odczytał pismo generała von
Seeckta, skierowane do firmy Junkers, w którym autor — szef Reichs-
wehry — uginał się przed żądaniami prywatnej firmy, aby uniknąć mię-
dzynarodowego skandalu i zataić przed światem zbrojenia niemieckie.

[Notice the double EOL above, retained below.]

time python ~/Documents/Synchronized_with_Online/Code_snippets/Ubuntu/unhyphenate.py ~/Downloads/test_hyphened.txt
~/.local/lib/python3.10/site-packages/flair/models/language_model.py:190: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  state = torch.load(str(model_file), map_location=flair.device)
[[['W', 'ten', 'sposób', 'szef', 'Reichswehry,', 'a', 'zarazem', 'główny', 'inicjator', 'i '], ['wykonawca', 'zbrojeń', 'niemieckich,', 'przeciął', 'wszelką', 'na', 'ten', 'temat', 'dyskusję.']], [['Dzięki', 'tego', 'rodzaju', 'opiece', 'i', 'ogromnym', 'kapitałom', '„Gefu*', 'zdołało '], ['w', 'stosunkowo', 'krótkim', 'czasie,', 'założyć', 'w', 'Rosji', 'sowieckiej', 'wiele', 'fabryk '], ['materiałów', 'wojennych,', 'które,', 'o', 'ironio....', 'już', 'w', 'kilka', 'lat', 'później,', 'stały '], ['się', 'zakładami', 'macierzystymi', 'dla', 'rozbudowującego', 'się', 'do', 'ogromnych '], ['rozmiarów', 'sowieckiego', 'przemysłu', 'wojennego,', 'skierowanego', 'przeciw '], ['Niemcom.', 'Niektóre', 'z', 'tych', 'fabryk,', 'zorganizowali', 'i', 'kierowali', 'nimi '], ['niemieccy', 'fachowcy,', 'że', 'wymienię', 'tu', 'choćby', 'największą', 'z', 'fabryk '], ['chemicznych,', 'produkujących', 'przeważnie', 'gazy', 'trujące,', 'p.', 'f.', '„Persolś,', 'w', 'Trocku, '], ['w', 'gubernii', 'samarskiej,', 'którą', 'zorganizował', 'i', 'urządził', 'słynny', 'producent '], ['gazów', 'trujących', 'inż.', 'Hugo', 'Stoltzenberg,', 'z', 'Hamburga.', 'Również', 'znana '], ['niemiecka', 'fabryka', 'samolotów,', 'Junkersa,', 'zajęła', 'się', 'organizacją', 'i '], ['budową', 'przemysłu', 'lotniczego', 'w', 'Sowietach.', 'Według', 'umowy', 'Junkersa', 'z '], ['ministerstwem', 'Reichswehry,', 'z', 'marca', '1922', 'roku,', 'wspomniana', 'firma '], ['zobowiązała', 'się', 'do', 'wyprodukowania', 'na', 'terytorium', 'Rosji', 'sowieckiej', '299', '„pak* '], ['rocznie', '—', 'tak', 'bowiem', 'nazwano', 'w', 'umowie', 'z', 'Junkersem', 'nowoczesne '], ['Samołoty', 'myśliwskie', 'z', 'których,', 'w', 'myśl', 'osobnego', 'porozumienia', 'Z '], ['Sowiecką', 'misją', 'handlową', 'w', 'Berlinie,', '60', '„pak*', 'rocznie', 'przeznaczonych '], ['było', 'dla', 'Rosji,', 'zaś', '259', 'dla', 'Reichswehry.', 'Fakt', 'zawarcia', 'i '], ['wykonywania', 'tej', 'umowy,', 'wyszedł', 'na', 'jaw', 'dopiero', 'jesienią', '1924', 'r.', 'kiedy', 'to', 'między '], ['firmą', 'Junkers', 'a', 'ministerstwem', 'Reichswehry', 'doszło', 'do', 'poważnych', 'nie- '], ['porozumień', 'na', 'tle', 'finansowym.', 'Owe', 'nieporozumienia', 'odbiły', 'się', 'później '], ['silnym', 'echem', 'w', 'Reichstagu.', 'Mianowicie', 'na', 'jednym', 'z', 'posiedzeń', 'komisji '], ['budżetowej,', 'poseł', 'socjalistyczny', 'Kiinstler', 'odczytał', 'pismo', 'generała', 'von '], ['Seeckta,', 'skierowane', 'do', 'firmy', 'Junkers,', 'w', 'którym', 'autor', '—', 'szef '], ['Reichswehry', '—', 'uginał', 'się', 'przed', 'żądaniami', 'prywatnej', 'firmy,', 'aby', 'uniknąć '], ['międzynarodowego', 'skandalu', 'i', 'zataić', 'przed', 'światem', 'zbrojenia', 'niemieckie.']]]
Unhyphenated text written to ~/Downloads/test_hyphened_unhyphenated.txt

real	0m9.986s
user	0m28.122s
sys	0m5.254s

cat ~/Downloads/test_hyphened_unhyphenated.txt

W ten sposób szef Reichswehry, a zarazem główny inicjator i wykonawca zbrojeń niemieckich, przeciął wszelką na ten temat dyskusję.
Dzięki tego rodzaju opiece i ogromnym kapitałom „Gefu* zdołało w stosunkowo krótkim czasie, założyć w Rosji sowieckiej wiele fabryk materiałów wojennych, które, o ironio.... już w kilka lat później, stały się zakładami macierzystymi dla rozbudowującego się do ogromnych rozmiarów sowieckiego przemysłu wojennego, skierowanego przeciw Niemcom. Niektóre z tych fabryk, zorganizowali i kierowali nimi niemieccy fachowcy, że wymienię tu choćby największą z fabryk chemicznych, produkujących przeważnie gazy trujące, p. f. „Persolś, w Trocku, w gubernii samarskiej, którą zorganizował i urządził słynny producent gazów trujących inż. Hugo Stoltzenberg, z Hamburga. Również znana niemiecka fabryka samolotów, Junkersa, zajęła się organizacją i budową przemysłu lotniczego w Sowietach. Według umowy Junkersa z ministerstwem Reichswehry, z marca 1922 roku, wspomniana firma zobowiązała się do wyprodukowania na terytorium Rosji sowieckiej 299 „pak* rocznie — tak bowiem nazwano w umowie z Junkersem nowoczesne Samołoty myśliwskie z których, w myśl osobnego porozumienia Z Sowiecką misją handlową w Berlinie, 60 „pak* rocznie przeznaczonych było dla Rosji, zaś 259 dla Reichswehry. Fakt zawarcia i wykonywania tej umowy, wyszedł na jaw dopiero jesienią 1924 r. kiedy to między firmą Junkers a ministerstwem Reichswehry doszło do poważnych nie- porozumień na tle finansowym. Owe nieporozumienia odbiły się później silnym echem w Reichstagu. Mianowicie na jednym z posiedzeń komisji budżetowej, poseł socjalistyczny Kiinstler odczytał pismo generała von Seeckta, skierowane do firmy Junkers, w którym autor — szef Reichswehry — uginał się przed żądaniami prywatnej firmy, aby uniknąć międzynarodowego skandalu i zataić przed światem zbrojenia niemieckie.

@Manamama Manamama changed the title Does not work with e.g. Polish Does not work with e.g. Polish or even in German Oct 9, 2024
@Manamama Manamama changed the title Does not work with e.g. Polish or even in German How to make it work with e.g. Polish or German: full script Oct 10, 2024
@Manamama
Copy link
Author

FYI, I have updated it slightly since, see: https://github.com/Manamama/Ubuntu_Scripts_1/blob/main/unhyphenate.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant