Workflow & data

Na tomto místě se můžete seznámit s postupem, který jsme vyvinuli jako návrh možného řešení detekce biblických citací (nejen) v prvorepublikovém tisku. Zde poskytnutý popis se snaží co možná nejvíce problematiku přiblížit, aniž by se zbytečně zabíhalo do příliš technického popisu.

Kompletní script a řešení je možné nalézt na portálu GitHub

GitHub OctocatGitHub Octocat

Periodika

Jak již bylo zmíněno na úvodní stránce projektu, náš projekt je zaměřen na prvorepublikový tisk v letech 1925 až 1939. Konkrétní periodika byla zvolena tak, aby obsahovala pestřejší škálu témat, u kterých lze očekávat rozdílné výsledky detekování biblických citací. Omezený časový výsek, stejně jako zvolená periodika jsou ale také odrazem dostupnosti dat a jejich vzájemného časového překryvu. Důležité je upozornit zejména na dostupnost některých periodik v konkrétních letech – katolicky laděný Čech nám byl dostupný pouze v letech 1925 až 1935, ačkoliv vycházel až do roku 1937. Polední list jsme v době tvorby projektu měli k dispozici dokonce pouze v letech 1930 až 1933.

  • Čech: politický týdeník katolický byly katolicky laděné noviny vycházející v denní periodicitě od roku 1869 (v letech 1897 až 1903 pod názvem Katolické listy) jako reprezentant nejstarší politické strany v českých zemích, Národní strany staročeské.
  • Věstník katolického duchovenstva byl měsíčníkem vycházejím mezi lety 1900–1942, přičemž v letech 1900–1920 byl vydáván dvakrát měsíčně. Jak naznačují i podtituly, které tento věstník nesl, církevně-politický a zájmový orgán katolického kléru v zemích Koruny české, respektive církevně-politický a zájmový orgán katol. klerů v státě československém, ve velké míře se zabýval katolickými tématy.
  • Moravský hospodář navázal na Ústřední list rolnictva moravského. Začal vycházet roku 1898, a přestal v roce 1941. Toto periodikum vycházející jednou za 14 dní se zaměřovalo na zemědělství a ekonomiku.
  • Moravský večerník vycházel v Olomouci v letech 1922–1945 v různé periodicitě, ve sledovaném období jako deník. Obsahem jednotlivých čísel byla jak politika, tak rovněž krátké zprávy z regionu, kulturní tipy, sportovní zpravodajství nebo reklamy.
  • Přítomnost: nezávislý týdeník byla vydávána mezi lety 1924–1939 a 1942–1945. Ve 30. letech byla jedním z nejuznávanějších deníků zabývajících se politikou.
  • Venkov: orgán České strany agrární, od roku 1916 byl ústřední list České strany agrární ústředním tiskovým orgánem agrární strany a byl vydáván v letech 1906–1938.
  • Studentský časopis začal být vydáván v roce 1922 a ukončen 1942. Jednalo se o časopis určený pro mládež, čemuž byly i přizpůsobeny texty. Ve sledovaném období byl vydáván desetkrát do roka.
  • Československý zemědělec byl vydáván mezi lety 1919 a 1939, a to v týdenní periodicitě. V rámci tohoto periodika pravidelně vycházelo několik příloh, které se zabývaly zemědělstvím a hospodářstvím v tom nejširším slova smyslu.
  • Český učitel: věstník Zemského ústředního spolku jednot učitelských v Čechách začal vycházet v roce 1897 jako týdeník (kromě prázdnin), v době trvání první světové války bylo vydávání přerušeno a opět obnoveno v roce 1919. K zániku tohoto týdeníku došlo v roce 1941. Zaměřoval se především na témata související se vzděláváním a výukou.
  • Posel záhrobní: spiritistický časopis věnovaný záhadám duševním byl předním časopisem českých spiritistů, spojený s osobou Karla Sezemského. Byl vydáván čtyřikrát do roka mezi lety 1900–1940 a obsahoval nejen překlady ze zahraničních časopisů, medijní projevy, ale oznamoval také místa konání spiritistických přednášek a sjezdů.
  • Polední list byl nepolitickým časopisem vydávaným v novinářském koncernu Tempo mezi lety 1929–1945 v denní periodicitě.

Níže můžete vidět graf, který podává celkový přehled o rozsahu prozkoumávaného datasetu.

Bible

Charakter nám dostupného biblického datasetu výrazně ovlivňuje možnosti, které máme pro detekci jednotlivých veršů napříč prohledávaným korpusem, viz níže. Ze serveru obohu.cz nám byly poskytnuty čtyři překlady – konkrétně Bible kralická (Starý a Nový zákon), překlad Jana Hejčla (Starý zákon a Deuterokanonické knihy), překlad Jana Ladislava Sýkory (Nový zákon) a překlad Františka Žilky (Nový zákon). Navíc nám byly Pavlem Koskem z Masarykovy univerzity poskytnuty některé části tzv. Bible svatováclavské. Na následujícím grafu můžete vidět přehledovou statistiku rozsahu biblického datasetu.

Problematika dat

Najít v jakémkoliv textu biblický verš se může zdát jako poměrně jednoduchá a přímočará záležitost. Celý proces nicméně naráží na mnoho komplikací, které plynou jak z povahy biblického textu, tak z povahy textů, ve kterých citace hledáme. Níže shrnujeme nejpodstatnější překážky, které vylučují jednoduché fulltextové vyhledávání.

Problematika biblického textu

Bible je v českém jazyce dostupná v mnoha překladech. Situace ve 30. letech minulého století nebyla jiná, a i v této době se paralelně používalo více překladů. Jak je vidět výše, dostupnost používaných překladů je bohužel značně omezená a nemalá část z nich stále podléhá autorskému zákonu. Ve zkoumaných textech se navíc nezřídka objevují různé parafráze či aluze (narážky), které mohou mnohdy být považovány za biblický citát, avšak neodpovídají žádnému z nám dostupných překladů. Například známá část verše Mt 22:37 „Milovati budeš Pána Boha svého z celého srdce svého, a ze vší duše své, a ze vší mysli své.“ byla nalezena i ve spojení „Milovati budeš Pána Boha svého … nade všecko“.

Biblické verše jsou navíc nezřídka citovány jen zčásti. To vede k nutnosti verše rozdělovat na menší části, které v rámci tohoto projektu nazýváme podverše. Automatizované dělení na menší části s sebou nicméně přináší další komplikace, jelikož takovéto dělení ne vždy vede ke smysluplnému úryvku z verše. Může tak docházet ke zkreslení výsledků.

Další obtíže způsobují verše a podverše, které jsou příliš obecné povahy, a i když se třeba plně vyskytují v prohledávaném textu, o biblické citáty se nejedná. Tento problém je řešen pomocí předem připraveného seznamu takovýchto veršů a podveršů, které ve výsledném čištění dat ignorujeme. To do zpracování nicméně vnáší nutnou ruční práci vědce, která nemusí být vždy stoprocentní (odpovídající verše byly vytipovány až na základě prohledávání), navíc některé obecné verše se mohou ukázat jako skutečné biblické citáty. Jako příklad může sloužit verš Ex 20:13, tedy přikázání „Nezabiješ“. Zdali je nalezená citace skutečně biblickým citátem, či nikoliv, je rozpoznatelné až dle kontextu. Detekce na takovéto úrovni by vyžadovala jiný, významně složitější přístup.

Posledním úskalím, které zde zmíníme, je vnitřní intertextualita Bible. Některá znění veršů a podveršů se objevují v Bibli na více místech, a není tak vždy jednoznačné, kterému verši je nalezenou citaci vhodné připsat. Příkladem tohoto fenoménu může být proslulý idiom „hlas volajícího na poušti“, který nalezneme na několika místech Bible (evangelia Mt 3:3, J 1:23 a Mk 1:3 v tomto odkazují na Iz 40:3).

Problematika periodik

Problematický avšak není pouze biblický text. Také periodika, ve kterých verše hledáme, mají své nedostatky. Tím prvním je samotná dostupnost, která limituje náš výběr. Druhým a nejzásadnějším problémem je pak kvalita OCR. Tato překážka v některých případech naprosto znemožňuje práci s daty, avšak ve většině případů je naštěstí kvalita OCR dostatečná, aby bylo možné s určitou tolerancí citáty detekovat.

                
    """ Ukázka naprosto špatně rozpoznaného textu. """
    bad_ocr_example = ':1$yé^7nisn^rátu>" .tam\'.^hilcòlnr\' v\'mmt^ferjèh^Vojenskí; ^viětíek, pochybu je, д^е Iry pbíipsl tra ^гогкаг!е vlc/zastřelení j rukojmí řgeUibferai Rozkaž\'byl tak‘e|z!r»ičeň, ^zaie^oyalo •*Se jen usnesení\' 1.; jptíníU, žiSající i zaStřek: ní rukojmí, к nětmuž^Eglhofer .poznamenal: „Jsem; srbz(Шпеп.'

    """ Ukázka nedokonale rozpoznaného textu, který obsahuje biblický citát. """
    poor_ocr_with_bible_quote = '„Mrlovati budeš bližního svého jako sebe samého“, je teprve druhé ze dvou přikázání lásky, podobné prvému :„Мдlovati budeš Pána Boha svého ... nade všecko.“ Proč dnešní láska blíženecká je namnoze tak neplodná, pouhá slova?'
                
            

Postup

Abychom překonali výše zmíněné limity, hledání jsme rozdělili do několika kroků. Níže je popsán proces prohledávání na jednom konkrétním případě. Pro detailní postup včetně kódu se můžete podívat na GitHub projektu, zejména na Jupyter Notebook popisující proces prohledávání. Celý projekt je vystavěn v Python v. 3.9.9 za použití externích balíčků.

                
    import pandas as pd
    import os
    import joblib

    from os import listdir as os_listdir
    from os.path import isdir as os_path_isdir
    from os.path import exists as os_exists
    from os import remove as os_remove
    from json import load as json_load
    from re import sub as re_sub
    from re import split as re_split
    from os.path import join as join_path
    from unidecode import unidecode
    from time import time
    from Levenshtein import distance
    from gensim import corpora
    from collections import defaultdict
    from nltk import word_tokenize, sent_tokenize
    from math import ceil, isnan
                
            

Příprava biblického datasetu

Prvním krokem je vytvoření biblického datasetu, který pak umožní prohledávání na libovolných datech. Biblický dataset obsahuje všechny verše ve všech nám dostupných překladech. Vytvoření datasetu je níže ilustrováno na příkladu verše L 20:25/Mk 12:17 v překladu Ladislava Sýkory:

Ježíš pak řekl jim: „Dávejte tedy, co je císařovo, císaři; a co je Božího, Bohu!“ I divili se mu.

Každý verš je nejprve rozdělen na podverše:

                
    verse_text = 'Ježíš pak řekl jim: ,Dávejte tedy, co jest císařovo, císaři, a co jest Božího, Bohu.“ I divili se mu.'
    subverses = ['Ježíš pak řekl jim Dávejte tedy',
            'Dávejte tedy co jest císařovo',
            'co jest císařovo císaři',
            'císaři a co jest Božího',
            'a co jest Božího Bohu.“ I divili se mu.',
            'Bohu.“ I divili se mu.']
                
            

Každý z těchto podveršů je následně rozdělen na n-gramy o velikosti maximálně čtyř znaků. Volba právě čtyř znaků byla výsledkem mnoha experimentů. Toto rozdělení podverše na menší části předchází výše zmíněným problémům s OCR. Můžete si všimnout, že některá slova jsou označena jako tzv. stop-words, tedy slova, která ve vyhledávání ignorujeme. V tomto případě se jedná například o „a“, „i“ nebo „se“.

                
    subverse_1 = ['jezi', 'ezis', 'rekl', 'jim', 'dave', 'avej', 'vejt', 'ejte', 'tedy']
    subverse_2 = ['dave', 'avej', 'vejt', 'ejte', 'tedy', 'co', 'jest', 'cisa', 'isar', 'saro', 'arov', 'rovo'] 
    subverse_3 = ['co', 'jest', 'cisa', 'isar', 'saro', 'arov', 'rovo', 'cisa', 'isar', 'sari']
    subverse_4 = ['cisa', 'isar', 'sari', 'co', 'jest', 'bozi', 'ozih', 'ziho'] 
    subverse_5 = ['co', 'jest', 'bozi', 'ozih', 'ziho', 'bohu', 'divi', 'ivil', 'vili', 'mu'] 
    subverse_6 = ['bohu', 'divi', 'ivil', 'vili', 'mu']
                
            

N-gramovaný verš je následně převeden na vektor, který zaznamenává počet výskytů jednotlivých n-gramů v podverši. N-gramy jsou tedy nahrazeny čísly a postupně vzniká slovník, který zachovává přiřazení n-gramů k jednotlivým číslům. Pro tyto účely byl využit Python balíček gensim.

                
    subverse_1 = ((10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (21, 1), (22, 1), (23, 1), (24, 1))
    subverse_2 = ((0, 1), (1, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), (18, 1), (19, 1))
    subverse_3 = ((0, 1), (1, 1), (15, 2), (16, 2), (17, 1), (18, 1), (19, 1), (20, 1))
    subverse_4 = ((0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (15, 1), (16, 1), (20, 1))
    subverse_5 = ([(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1))
    subverse_6 = ((5, 1), (6, 1), (7, 1), (8, 1), (9, 1))
                
            

Uvedeným postupem je vytvořen kompletní dataset, který zachovává přiřazení označení verše (např. L 20:25/Mk 12:17) ke všem vektorům, které odpovídají jednotlivým podveršům napříč překlady.

Hledání v tisku

Jakmile máme vytvořen biblický dataset, můžeme se pustit do vyhledávání na libovolných datech, v našem případě na prvorepublikovém tisku. Každý dokument, který máme k dispozici, nejdříve rozdělíme na menší části. Experimentálně jsme došli k dělení dokumentů na části po šesti větách, vždy s překryvem alespoň jedné věty (pro případ, že by hledaný podverš obsahoval dvě věty a vyskytoval se na rozhraní částí prohledávaného dokumentu).

Každá z těchto menších částí dokumentu je pak rozdělena na n-gramy a vektorizována za použití stejného slovníku, který vznikl v rámci tvorby biblického datasetu. Takto získaný vektor je následně porovnán s vektory jednotlivých podveršů. Pokud se n-gramy některého podverše ve sledované pasáži objevují alespoň ze 70 %, je předběžně zaznamenána shoda.

                
    """ Ukázka úryvku z tisku, který obsahuje biblický citát. """
    journal_passage = 'Věrnost církvi, věrnost vlasti, věrnost národa. Sám Kristus řekl určitě a jasné: Dávejte co jest císařovo císaři a co jest Božího Bohu. Jiný apoštolský výrok: Není mocnosti leč od Boha a které jsou, od Boha zřízeny jsou. Stát bez Boba byí by na chybném podkladu.'

    """ vektorizovaná část úryvku obsahující biblický citát """
    vectorized_passage = ((0, 2), (1, 2), (2, 1), (3, 1), (4, 1), (5, 1), (10, 1), (11, 1), (12, 1), (13, 1), (15, 2), (16, 2), (17, 1), (18, 1), (19, 1), (20, 1), (23, 1))

    """ porovnání podverše a úryvku: """
    subverse_text = 'Dávejte tedy co jest císařovo'
    subverse_vector = ((0, 1), (1, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), (18, 1), (19, 1))

    overlap = ((0, 2), (1, 2), (10, 1), (11, 1), (12, 1), (13, 1), (15, 2), (16, 2), (17, 1), (18, 1), (19, 1))

    """ jediné slovo z podverše, které není detekováno, je "tedy" """
    unmatched = ((14, 1))

    """ Překryv je zde 91,66 %. """
    hit = 0.9166
                
            

Následně je každý takto předběžně detekovaný podverš jednotlivě kontrolován, zda se v textu skutečně vyskytuje. Vzhledem k možné problematice OCR i omezenosti překladů Bible je nastavena určitá míra tolerance, která umožňuje, aby byla nalezena shoda, i pokud se verš nevyskytuje v úplně přesném znění. Pro tyto účely byla využita metoda tzv. Levenštejnovy vzdálenosti. Ve zkratce tato „vzdálenost“ značí, kolik znaků je třeba změnit, aby dva řetězce byly stejné. Experimentálně jsme dospěli k nastavení, že shodných by mělo být minimálně 85 % znaků z celkové délky podverše. Níže můžete vidět shodu jednotlivých podveršů na ukázkové pasáži.

                
    """ ukázka měření Levenštejnovy vzdálenosti """
    from Levenshtein import distance

    subverse_string = 'davejte tedy co jest cisarovo'
    query_string = 'davejte co jest cisarovo cisa'

    tolerance = len(subverse_string)*(1-0.85)

    if distance(subverse_string, query_string) <= tolerance:
    match = True
                
            

V uvedeném případě se kvůli slovu „tedy“ o shodu nejedná. Jednak kvůli samotnému „tedy“, ale i proto, že jeho přítomnost prodloužila porovnávanou pasáž o řetězec „cisa“. Celkově je tedy třeba upravit 10 znaků, aby porovnávané řetězce byly stejné. Shoda je v tomto případě tedy pouhých 65,5 %. V případě porovnávaného verše se však v prohledávané pasáži plně objevují podverše „co jest císařovo císaři“ a „císaři a co jest Božího“.

Na této ukázce je patrná i problematika dělení veršů na podverše. Toto rozdělení v mnoha případech nedává valný smysl, nicméně v praxi se ukazuje jako poměrně funkční. „Inteligentnější“ dělení veršů by vyžadovalo složitější přístup. Pro více informací o způsobu, jakým je dělení veršů prováděno, se můžete podívat na Jupyter Notebook popisující proces prohledávání.

Čištění výsledků

Citáty nalezené za pomoci výše popsaného postupu jsou z principu nedokonalé. Nastavené tolerance, které umožňují nalézat citace i ve špatně rozpoznaném textu, vedou k mnoha falešně pozitivním výsledkům. Navíc bylo detekováno mnoho veršů a podveršů, které sice svým textem odpovídají, ale o skutečné biblické citáty se nejedná. Předběžné výsledky je tedy nutné ještě vyčistit. Celý proces čištění výsledků, který obsahuje i předběžné vyhodnocení celkové shody, je možné prozkoumat v Jupyter Notebooku popisujícím evaluaci. Kromě filtrace duplicitních výsledků jsou nejdůležitější následující dva kroky:

  1. Filtrace osamocených „stop-podveršů“. Z detekovaných výsledků jsou vytipovány ty podverše, které samy o sobě nemají žádnou jasnou biblickou relevanci. Může se jednat například o citáty zemědělské/pastevecké povahy, např. Nu 32:4 „máme velmi mnoho dobytka“, o zmínky o právu a spravedlnosti, např. Žd 11:33 „vykonali spravedlnost“, či o další verše všeobecné povahy. Při výběru je nicméně dobré pamatovat na to, že některé verše, které vypadají obyčejně, mohou jako být ve skutečnosti biblickými citáty, a tedy při této filtraci samozřejmě dochází ke ztrátám. Mezi stop-podverše však mohou být zařazeny i ty podverše, které sice mají jasnou biblickou konotaci, samy o sobě však nejsou biblickým citátem, nýbrž běžným slovním spojením v rámci křesťanského prostředí - např. „a Pána Ježíše Krista“. Celkem bylo vytipováno 2692 stop-podveršů
    Kromě samotných stop-podveršů bylo také vytipováno několik veršů, u kterých je vyžadována 100 % shoda, aby byly uznány za výsledek. Tolerance překlepů u veršů typu „Nezabiješ“ vede k přílišnému množství falešně pozitivních výsledků.
  2. Vypořádání se s vícečetnými atribucemi. Jak bylo zmíněno výše, některé verše se navzájem duplikují či jsou si svým obsahem velice podobné. Všeobecně je citace připsána tomu verši, který má lepší shodu. V případech, kdy je shoda stejná, je citace označena za duplicitní, ale ponechána je více veršům.

Výsledky, které jsou takto vyfiltrované, mohou být dále podrobeny ruční kontrole, případně dalším filtrům. Je například možné vybrat pouze ty citáty, které obsahují celý verš a u kterých je tedy vysoce pravděpodobné, že jsou skutečnými citáty (na grafu níže "sure" citations zastoupené fialovou barvou). Tím sice podstatně redukujeme počet falešně pozitivních citací, ale samozřejmě mnohé méně jasné citace ztrácíme.

Na následujícím grafu můžete vidět vývoj celkového počtu citací v letech po jednotlivých krocích čištění. Data, která jsou prezentována v grafech napříč tímto projektem, vycházejí z filtered multiple attributions znázorněných oranžovou barvou. Tyto výsledky mohou stále obsahovat určité množství falešně pozitivních výsledků, nicméně zároveň z výsledků neeliminují zbytečné množství těch falešně negativních.

Kompletní výsledky naleznete zde, zejména pak v tomto CSV souboru.

Limity

Celý postup je navržen tak, aby badatelé mohli nastavit různé míry tolerance dle vlastního uvážení a šité na míru prohledávanému korpusu. Zde navržené řešení je zatím značně nedokonalé a může sloužit pouze jako předvýběr pasáží, na které se badatel může následně detailně zaměřit. Statistické výstupy je třeba brát pouze jako orientační.

Možná zlepšení

Vzhledem k nedokonalosti navrženého řešení je samozřejmě možné dále pracovat na jeho vylepšování. První oblast vývoje může být zaměřena na rychlost procesu. Níže můžete vidět přehled o času, který je k vyhledávání potřeba. V průběhu vytváření workflow již došlo ke značnému zlepšení, které ovlivnily například následující faktory:

Zrychlení je ale možné dosáhnout i dalšími způsoby – ať už vylepšením samotného scriptu, jeho transformací do jiného programovacího jazyka (doporučen byl např. Rust), či použitím výpočetně silnějších strojů.

Důležitější část vývoje by se však měla zaměřit na zlepšování přesnosti vyhledávání. Jednou z možných cest by bylo využití metod strojového učení (ML), které však předpokládá, že je k dispozici již čistý dataset, na jehož základě lze trénovat. Zde navržené řešení tak může poskytnout předběžná data, která po vyčištění mohou být použita jako vstup pro ML řešení.

Jednodušší metodu může představovat detekce výskytu klíčových slov v okolí nalezené citace. Pokud by se v blízkosti vyskytovala např. slova jako „Ježíš“, „Bible“ a podobně, zásadně to zvyšuje šanci, že se jedná o biblický citát. Tento přístup má však samozřejmě pouze omezenou výpovědní hodnotu a je také omezen současným stavem OCR prohledávaných dokumentů, viz výše.

Další cestou tedy může být snaha o vylepšení prohledávaného datasetu, v našem případě prvorepublikového tisku. Na prohledávaný dataset je možné aplikovat novější a přesnější OCR programy nebo je možné pokusit se stávající stav vylepšit za pomoci korektorů, např. LINDAT Korektor.

Časová náročnost

Tento graf zobrazuje průměrné časy (v sekundách), které byly potřeba ke zpracování jednotlivých stránek (stránkování dle periodik, nikoliv normostran). Výsledky reflektují zejména celkovou délku analyzovaných stránek (např. periodikum Venkov má nejdelší časy analýzy zejména proto, že má nejdelší stránky), ale projevuje se zde také počet předběžně vytipovaných citací – čas zpracování zásadně narůstá zejména při ověřování Levenštejnovy vzdálenosti (viz výše). V průběhu vytváření scriptu docházelo k postupnému vylepšování potřebných časů (zde vyobrazené časy se vztahují k poslední verzi zveřejněné na portálu GitHub). Celkový čas prohledávání v poslední verzi byl přibližně 220 a půl hodiny.

Další čas byl samozřejmě potřebný pro následné čištění dat, kde bylo nejvíce času věnováno (ručnímu) výběru stop-podveršů.

Tato audiovizuální mapa vznikla v rámci projektu programu na podporu aplikovaného výzkumu a vývoje národní a kulturní identity (NAKI II, Ministerstvo kultury ČR) č. DG20P02OVV002 s názvem „DL4DH – vývoj nástrojů pro efektivnější využití a vytěžování dat z digitálních knihoven k posílení výzkumu digital humanities“.
Doporučená citace: Válek, František; Vozár, Zdenko; Zbíral, David; Bežová, Michaela; Hrzinová, Jana; Novák, David; 2022 Religionistická mapa literárních významů: Citace Bible v prvorepublikovém tisku [online].