Skip to content

Instantly share code, notes, and snippets.

@FabianBeiner
Created June 28, 2024 08:25
Show Gist options
  • Save FabianBeiner/709a6dad43bffcb361a1256f2fe8afdf to your computer and use it in GitHub Desktop.
Save FabianBeiner/709a6dad43bffcb361a1256f2fe8afdf to your computer and use it in GitHub Desktop.
Tolino E-Book-Reader „notes.txt“ Parser
#!/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