Náhrada v texte synonymami

Programovacie jazyky, rady, poradňa...
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Náhrada v texte synonymami

Príspevok od používateľa Peter Michalík »

Mám vstupný súbor, v ktorom sa po znakoch $$$ vyskytujú názvy, ktoré môžu mať viac podobných mien. Tie všetky mená sú v druhom csv súbore a potreboval by som vytvoriť nový súbor, v ktorom by boli tie názvy vo vstupnom súbore vymenené za prvý názov v poradí príslušného riadku csv. Názov môže v prvom znaku obsahovať písmeno alebo číslicu a potom iba písmená (malé aj veľké) a medzery, až po najbližšiu číslicu.

Vstup:

Kód: Vybrať všetko

$$$Gen 2:1
$$$1 Kráľov 3:15
$$$II Korinťanom 15:8
csv:

Kód: Vybrať všetko

"Genesis","Genezis","Gen","Genesis","Ge","Gn","1. M","1.M","1M","1 M","I M",,,,,
"I Kings","1. Kráľov","1.Kráľov","1Kr","1K","I Kgs","1Kgs","I Ki","1Ki","I Kings","First Kgs","1Kin","1Kráľ",,,,,,,
"II Corinthians","2. Korinťanom","II Korinťanom","2Kor","2. Korintským","2.Korintským","2K","2 Korint","II Korint"
výstup:

Kód: Vybrať všetko

$$$Genesis 2:1
$$$I Kings 3:15
$$$II Corinthians 15:8
Tých súborov mám viac a pri ručnom vymieňaní názvov som porobil chyby. Pomôžte mi prosím. :)
Prílohy
Moduly.zip
(1.24 MiB) 18 stiahnutí
Ing. Gandalf
Expert
Expert
Príspevky: 178
Registrovaný: 02 feb 2007, 19:46

Re: Náhrada v texte synonymami

Príspevok od používateľa Ing. Gandalf »

Neviem ci to este potrebujes, ale azda to tentokrat vyjde na prvykrat... :D Inak, ak sa smiem opytat, naco potrebujes bibliu v tolkych roznych formatoch?

Kód: Vybrať všetko

# Python 3.2
import re, csv

# Nacita zoznam knih a ich synonyma.
books = []
with open('nazvy-knih.csv', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',')
    for line in reader:
        line = [x for x in line if x]   # Vyhodi prazdne polozky.
        books.append(tuple(line))

# Riadok po radku vyparsuje vstupny subor a vymeni synonyma za cele nazvy.
converted = []
for line in open('bi.txt', encoding='utf-8'):
    line = line.strip()
    reg = re.compile(r'^\$\$\$(.*) (\d+:\d+)$')
    match = re.match(reg, line)
    if match != None:
        for book in books:
            if match.group(1) in book:
                converted.append(re.sub(reg, r'$$${} \2'.format(book[0]), line))
                break
    else:
        converted.append(line)

# Zapise konvertovany text do suboru.
with open('bib_converted.txt', mode='wt', encoding='utf-8') as f:
    for line in converted:
        print(line, file=f)

print('Hotovo!')
Prílohy
bib.zip
(1.2 MiB) 15 stiahnutí
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Re: Náhrada v texte synonymami

Príspevok od používateľa Peter Michalík »

Strašne moc ti ďakujem, zasa si ma zachránil :) :) :)

Dal som urobiť aplikáciu do iPhone, ktorá bude pracovať sa rôznymi prekladmi biblie.
Vyhľadávanie, porovnávanie prekladov, e-knihy. Bude zadarmo.
Onedlho by mala byť v appstore. Bude sa volať BibleTop.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Náhrada v texte synonymami

Príspevok od používateľa BX »

A toto musíš dodávať ty? Oni si to urobiť nevedia? (Teda narážam aj na Tvoje predchádzajúce požiadavky)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: Náhrada v texte synonymami

Príspevok od používateľa chrono »

Inak pri tom skripte by asi bolo lepšie, ak by vypísal informáciu o tom, že sa v tom nazvy-knih.csv súbore nenašiel správny názov (pretože teraz sa také riadky úplne preskakujú a je dosť pravdepodobné, že ten súbor nebude fungovať; v tom súbore, čo si sem dal, minimálne jeden názov knihy nemá zodpovedajúci synonym, konkrétne chýba Phlm pre Philemon).
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Re: Náhrada v texte synonymami

Príspevok od používateľa Peter Michalík »

Ja som zadal len aplikáciu, o dáta a ostatné sa starám ja. Som na to sám, tak hádam to budem stíhať :)

//autoeditácia príspevku (14 Apr 2011, 21:47)
Dala by sa do toho skriptu teda dorobiť nejaká kontrola, aby vypísalo, ak nejaký synonym chýba ? Pls.
Ing. Gandalf
Expert
Expert
Príspevky: 178
Registrovaný: 02 feb 2007, 19:46

Re: Náhrada v texte synonymami

Príspevok od používateľa Ing. Gandalf »

Moze byt?

Kód: Vybrať všetko

# Python 3.2
import re, csv

# Nacita zoznam knih a ich synonyma.
books = []
with open('nazvy-knih.csv', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',')
    for line in reader:
        line = [x for x in line if x]   # Vyhodi prazdne polozky.
        books.append(tuple(line))

# Riadok po radku vyparsuje vstupny subor a vymeni synonyma za cele nazvy.
converted = []
for i, line in enumerate(open('bi.txt', encoding='utf-8')):
    line = line.strip()
    reg = re.compile(r'^\$\$\$(.*) (\d+:\d+)$')
    match = re.match(reg, line)
    s = ''
    if match != None:
        for book in books:
            if match.group(1) in book:
                s = re.sub(reg, r'$$${} \2'.format(book[0]), line)
                break
        if s:
            line = s
        else:
            print('Chyba! Kniha so synonymom "{}" na riadku {} ("{}") sa nenasla.'.format(match.group(1), i+1, line))
    converted.append(line)

# Zapise konvertovany text do suboru.
with open('bib_converted.txt', mode='wt', encoding='utf-8') as f:
    for line in converted:
        print(line, file=f)

print('Hotovo!')
Peter Michalík
Light Expert
Light Expert
Príspevky: 44
Registrovaný: 11 máj 2008, 9:01

Re: Náhrada v texte synonymami

Príspevok od používateľa Peter Michalík »

Teraz to je úplná špica, ešte raz ďakujem :smt023
Napísať odpoveď