Created
June 28, 2024 08:25
-
-
Save FabianBeiner/709a6dad43bffcb361a1256f2fe8afdf to your computer and use it in GitHub Desktop.
Tolino E-Book-Reader „notes.txt“ Parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
""" | |
Dieses Skript liest eine Datei (notes.txt) aus, die Markierungen von einem Tolino E-Book-Reader enthält, | |
und extrahiert die Markierungen ohne den restlichen Text. | |
Es trennt die Markierungen, wenn fünf aufeinanderfolgende Zeilenumbrüche, Tabs oder Leerzeichen auftreten. | |
Optional kann es die Zitate mit den richtigen Anführungszeichen versehen (Englisch: “ ”, Deutsch: „ “). | |
""" | |
import re | |
import argparse | |
def detect_language(text): | |
"""Erkennt die Sprache des Textes anhand häufiger deutscher und englischer Wörter.""" | |
german_words = ['und', 'der', 'die', 'das', 'ist', 'zu', 'ich', 'nicht', 'mit', 'es', 'ein', 'er', 'sie', 'wie'] | |
english_words = ['and', 'the', 'is', 'in', 'it', 'to', 'of', 'i', 'you', 'that', 'he', 'she', 'we', 'they', 'be'] | |
german_count = sum(word in text.lower() for word in german_words) | |
english_count = sum(word in text.lower() for word in english_words) | |
return 'german' if german_count > english_count else 'english' | |
def extract_markings(file_path, use_quotes): | |
"""Liest die Datei ein und extrahiert die Markierungen.""" | |
with open(file_path, 'r', encoding='utf-8') as file: | |
content = file.read() | |
# Inhalt nach dem Trenner aufteilen | |
entries = content.split('-----------------------------------') | |
# Liste zur Speicherung der extrahierten Markierungen | |
markings = [] | |
for entry in entries: | |
if 'Markierung' in entry: | |
# Markierungstext extrahieren | |
start = entry.find('Markierung') + len('Markierung auf Seite') + 5 | |
end = entry.find('Hinzugefügt am') | |
marking = entry[start:end].strip() | |
# Definiere den spezifischen Separator für mehrere Zitate in einem Eintrag (fünf Zeilen leerer Inhalt) | |
specific_separator = r'(?:\s*\n\s*){5,}' | |
# In einzelne Markierungen aufteilen basierend auf dem spezifischen Separator | |
individual_markings = re.split(specific_separator, marking) | |
for im in individual_markings: | |
clean_marking = im.strip().replace('\n', ' ').replace('“', '').replace('”', '').replace('"', '') | |
clean_marking = ' '.join(clean_marking.split()) # Entferne zusätzliche Leerzeichen | |
if clean_marking: | |
if use_quotes: | |
# Sprache erkennen und entsprechende Anführungszeichen anwenden | |
language = detect_language(clean_marking) | |
if language == 'english': | |
clean_marking = f'“{clean_marking}”' | |
else: | |
clean_marking = f'„{clean_marking}“' | |
markings.append(clean_marking) | |
return markings | |
def main(): | |
parser = argparse.ArgumentParser(description="Tolino E-Book-Reader „notes.txt“ Parser") | |
parser.add_argument('--use-quotes', action='store_true', help="Zitate mit korrekten Anführungszeichen ausgeben.") | |
args = parser.parse_args() | |
file_path = 'notes.txt' | |
markings = extract_markings(file_path, args.use_quotes) | |
for i, marking in enumerate(markings): | |
print(marking) | |
if i < len(markings) - 1: | |
print("\n") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment