- Mapování polských souborů pomocí mapy s českým překladem.
- fuzzywuzzy najde v českém překladu podobný název.
- Následně se vybere správný soubor s polským názvem.
- Podle toho se vytvoří playlist .m3u s tímto videem a jeho zpomalenou verzí
- Tento playlist se otevře ve vlc a přehrává se první video.
#!/usr/bin/env python3
import os
import subprocess
import sys
from fuzzywuzzy import process, fuzz # Potřebuješ nainstalovat fuzzywuzzy: pip install fuzzywuzzy python-Levenshtein
# Mapování českých názvů na polské názvy souborů (bez 'Tatiana Stachak - ' a '.mkv')
# Přeložené české názvy na základě polských originálů
mapping = {
"Pohádka jiskřičky": "Bajka iskierki (Sparkle\\'s tale - Das Märchen des Funkens)",
"Byla jednou malá žabička": "Była sobie żabka mała",
"Byl jednou král": "Był sobie król (There once was a king - Es war einmal ein König)",
"Černý beran": "Czarny baran (A black ram - Schwarzes Schaf)",
"Jedou, jedou děti cestou": "Jadą, jadą dzieci drogą",
"Jede vlak": "Jedzie pociąg (Train is coming - Aus der Ferne kommt ein Zug)",
"Kukačka": "Kukułka (Cuckoo - Der Kuckuck)",
"Tři kuřátka": "Kurki trzy (Twinkle, twinkle little star - Blinde, blinke kleiner Sterm)",
"My jsme trpaslíci": "Mujesteśmy krasnoludki (We arę little dwarfs - Wir sind kleine Zwerge)",
"Na mostě v Avignonu": "Na moście w Avignon (Sur le pont d\\'Avignon)",
"Padá sníh": "Pada śnieg (Jingle bells)",
"Pane Janie": "Panie Janie (Frère Jacques)",
"Sedí si zajíc": "Siedzi sobie zając (There\\'s a Hare - Sitzender Hase)",
"Šedý mráček": "Siwa chmurka (A grey cloud - Graues Wölkchen)",
"Starý Donald": "Stary Donald (Old MacDonald)",
"Starý medvěd tvrdě spí": "Stary niedźwiedź mocno śpi",
"Zlá zima": "Zła zima (Bad winter - Böser Winter)"
}
def find_polish_name(czech_input):
# Použijeme fuzzy matching pro nalezení nejlepší shody (na část nebo celý název)
czech_names = list(mapping.keys())
best_match, score = process.extractOne(czech_input, czech_names, scorer=fuzz.partial_ratio)
if score >= 70: # Minimální skóre pro shodu, můžeš upravit
return mapping[best_match]
else:
print(f"Žádná shoda pro '{czech_input}' nalezena.")
sys.exit(1)
def create_m3u_playlist(polish_name, directory):
# Předpokládáme, že soubory jsou v aktuálním adresáři nebo specifikovaném
original_file = f"Tatiana Stachak - {polish_name}.mkv"
slowed_file = os.path.join("4", f"Tatiana Stachak - {polish_name}.mkv")
if not os.path.exists(original_file):
print(f"Originální soubor '{original_file}' neexistuje.")
sys.exit(1)
if not os.path.exists(slowed_file):
print(f"Zpomalený soubor '{slowed_file}' neexistuje.")
sys.exit(1)
playlist_name = "temp_playlist.m3u"
with open(playlist_name, 'w', encoding='utf-8') as f:
f.write("#EXTM3U\n")
f.write(f"#EXTINF:-1,Originál\n{os.path.abspath(original_file)}\n")
f.write(f"#EXTINF:-1,Zpomalená verze\n{os.path.abspath(slowed_file)}\n")
return playlist_name
def open_in_vlc(playlist):
try:
subprocess.call(['vlc', playlist])
except FileNotFoundError:
print("VLC není nainstalováno nebo není v PATH.")
finally:
# Smazat dočasný playlist po otevření (volitelně)
os.remove(playlist)
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Použití: python script.py 'český název nebo část'")
sys.exit(1)
czech_input = ' '.join(sys.argv[1:])
polish_name = find_polish_name(czech_input)
playlist = create_m3u_playlist(polish_name, os.getcwd())
open_in_vlc(playlist)
Jak funguje FuzzyWuzzy?
from fuzzywuzzy import fuzz, process
mapping = {
"My jsme trpaslíci": "Mujesteśmy krasnoludki",
"Jede vlak": "Jedzie pociąg",
}
vstup = "trpaslíci"
nejlepsi, skore = process.extractOne(vstup, mapping.keys(), scorer=fuzz.partial_ratio)
print(f"Nalezeno: {nejlepsi} (skóre {skore})")
print(f"Polský soubor: {mapping[nejlepsi]}") Má vrátit podobný výstup:
Nalezeno: My jsme trpaslíci (skóre 86)
Polský soubor: Mujesteśmy krasnoludkiPopis skriptu
- script.py Jedou
- script.py jedou
- script.py děti
- script.py vlak
- script.py král
- script.py zajíc
- script.py sníh
- script.py donald
Příklady reálného chování (testováno na podobných datech):
Zadáno | Pravděpodobně najde | Skóre (přibližně) |
|---|---|---|
Jedou | Jedou, jedou děti cestou | 100 % |
jede | Jede vlak | 100 % |
děti | Jedou, jedou děti cestou | 100 % |
vlak | Jede vlak | 100 % |
král | Byl jednou král | 100 % |
zajíc | Sedí si zajíc | 100 % |
sníh | Padá sníh | 100 % |
donald | Starý Donald | 100 % |
kuka | Kukačka | ~86–100 % |
medvěd | Starý medvěd tvrdě spí | 77–100 % |
zima | Zlá zima | 100 % |
if score >= 60: # ← změň z 70 na 60 nebo i 50
return mapping[best_match]def find_polish_name(czech_input):
czech_input = czech_input.lower().strip()
czech_names = list(mapping.keys())
# Nejprve zkusíme přesnou podřetězcovou shodu (case-insensitive)
for name in czech_names:
if czech_input in name.lower():
return mapping[name]
# Pokud nic nenajde → fuzzy
best_match, score = process.extractOne(czech_input, czech_names, scorer=fuzz.partial_ratio)
if score >= 65:
return mapping[best_match]
print(f"Nenašel jsem shodu pro: '{czech_input}' (nejlepší byl '{best_match}' se skóre {score})")
sys.exit(1)
Žádné komentáře:
Okomentovat