<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>The words separation in old Cyrillic texts with fuzzy search method</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>M N Mokrousov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Kalashnikov Izhevsk State Technical University</institution>
          ,
          <addr-line>Studencheskaya str., 7, Izhevsk, Russia, 426069</addr-line>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2019</year>
      </pub-date>
      <fpage>140</fpage>
      <lpage>148</lpage>
      <abstract>
        <p>The article describes a solution to the problem of word separation in old Cyrillic texts after the stage of graphic character recognition on scanned documents. The article proposes an algorithm for fuzzy text search using the grammatical dictionary of the Old Russian language, with the completeness and accuracy of search results evaluate. To assess the relevance and ranking of the search results, a method for calculating the rank of the symbol recognition variant based on the TF-IDF metric is developed. The article also presents a software system of automated word search, presents the results of experiments that prove the effectiveness of the developed algorithms and programs.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>The urgency of the task of translating ancient Cyrillic manuscripts from graphic representation into
text form is due to their exceptional value for historical and linguistic research, which is most effective
using the methods of automatic text analysis and recognition of electronic-graphic representation of
manuscripts. For maximum process digitization automation of ancient texts requires the involvement
pattern recognition methods. A relatively small publications count on recognition systems of
handwritten and old-printed Cyrillic texts of the X–XVIII centuries suggests the need to improve
methods and technologies to solve this problem.</p>
      <p>
        Almost all researches on the problem of historical documents recognition, says that the existing
commercial OCR-system (Optical Character Recognition) do not cope well with the recognition of
ancient texts. Researchers from Macedonia [
        <xref ref-type="bibr" rid="ref1 ref2">1-2</xref>
        ] proposed two ways of recognizing old-printed
Cyrillic symbols: on the basis of decision trees and by fuzzy classification. Both methods operate with
statistical and simple structural features of symbols. The experimental system recognizes symbols in
each method with an average accuracy and completeness of 70-80%. The reducing issue of the
recognition result based on information about neighboring characters (the use of a dictionary, etc.) in
the work is not affected. In [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] the optical recognition of historical texts is made by whole words, not
by individual symbols. At the same time, the recognition process is adaptive; during the work it
adjusts itself to the processed historical document. The book of the XVIII century, written in the old
German Gothic script, the developed software system correctly recognized 86.6%, which is 4.1%
higher than the traditional OCR-system. In [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] the search system in text images produces a
preselection of words in the archival texts, using such parameters as the minimum possible row height,
margins, relative threshold of the brightness of the background in a separate line, etc. Search in the
text based on comparison of the sample image with all images words or symbols that are pre-allocated
by the system. The estimation of word images similarity is based on the calculation of the modified
Hausdorff distance [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. It is indicated that the search process takes a long time due to the high
computational complexity of the comparison based on the Hausdorff distance.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] describes the automatic text recognition capabilities of neural network models specifically
trained to recognize different styles of Church Slavonic handwriting within the software platform
Transkribus. Computed character error rates of the models are in the range of 3 to 4 percent; real-life
performance shows that specifically trained models, basically, recognize simple (non-superscript)
characters correctly most of the time. Error rate is higher with superscript letters, abbreviations, and
word separation.
      </p>
      <p>In our opinion, the approaches of word recognition are poorly applicable to Cyrillic texts, because
in these texts words are not separated from each other, and there is a relatively large distance between
the letters. The individual words selection in such texts is not an easy task. To automatically solve this
problem, it is necessary to recognize individual characters, conduct lexical and syntactic analysis of
the document.</p>
      <p>
        This paper describes the stage of "Clarify with a dictionary" after graphic recognition of individual
characters stage, described in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. This step involves the use of fuzzy algorithm to search the
dictionary of different combinations of characters variants and the subsequent automated words and
symbols selection.
      </p>
      <p>
        One of the most suitable search methods in this case is the pattern search algorithms, which belong
to the group of search methods for substring in a string. For example [
        <xref ref-type="bibr" rid="ref8 ref9">8-9</xref>
        ] describes and includes
implementations the most famous of them: Knuth–Morris–Pratt (KMP) algorithm, Boyer–Moore
string-search algorithm, Rabin–Karp algorithm and etc. The use of regular expressions allows
expanding the capabilities of the standard text search. In [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] presents two new techniques for regular
expression searching, which permit fast searching for regular expressions than any existing algorithm.
In this paper the main focus is on the speed of search but not quality.
      </p>
      <p>
        Almost all fuzzy search algorithms have software implementations in different programming
languages. For example, this site [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] provides fuzzy string search tools in text and dictionary written
in Java. It contains the most commonly used algorithms and auxiliary utilities for fuzzy string search
in large dictionaries. The site includes implementations for Levenshtein Distance,
DamerauLevenshtein Distance, Extension (Spell-checker) Method, N-Gram Method, Signature Hash Method,
Bitap, Burkhard-Keller (BK) Trees, Skip algorithm.
      </p>
      <p>However, full borrowing of software solutions to solve the problem is difficult for several reasons,
which were identified by the author personally as the analysis result scanned manuscripts on the
project Manuscripts.ru [21].</p>
      <p>First, old-printed Cyrillic texts do not have delimiters (punctuation marks), which complicates the
process of singling out individual words in the source text. The maximum length of a word in the
dictionary is 26 characters, the minimum is 1 character, which can mean a number. The number of
variants for each symbol after graphic recognition can be in the range from 1 to 6. Taking into account
the maximum length of the word, the number of possible characters chains, taking into account the
maximum length of 26 characters, is determined by the combinatory product rule of probability
theory. In this case, the maximum number of search queries for one potentially long word only will be
626, which is unnecessarily much.</p>
      <p>Secondly, after graphic recognition process of low quality images, with various spots, scuffs, page
breaks, followed by gluing, the consequences of printed documents restoration, the result of
recognition may have the following errors:
1) one character is recognized as two or three;
2) two or three consecutive characters are recognized as one;
3) omission of characters when the recognition program could not pick up the options; most often this
case occurs in the presence of a dark spot or scratches;
4) there is no correct variant in the sequence of character recognition probabilities;
5) the word is not in the dictionary.</p>
      <p>At the moment, these "noise" problems can be solved only with the use of manual editing the
graphic recognition results.</p>
      <p>Thirdly In Slavonic-Russian manuscripts simple or alphabetic titles abbreviations are used and such
abbreviations are difficult for analysis and search. Such abbreviations were most often used to refer to
words related to God and the Church (God, Amen, Trinity, etc.), as well as to other words (maiden,
wisdom, memory, etc.).</p>
      <p>Fourth, it is necessary to take into account the morphological rules of character conversion and
replacement. These are different rules for equating individual letters and their variants or letter
combinations at the end of the word form, after certain vowels, consonants or taking into account the
position of the characters in the text.</p>
      <p>Fifth, a separate item that makes it difficult to fully automate the character recognition process is
the presence of a drop cap (initial) – the first capital letter of the text or Chapter, depicted as the
miniature.</p>
      <p>Author decided to use a recursive search method based on regular expressions, which would take
into account the symbol position in the word when evaluating the search relevance. Such fuzzy
positional search will allow to abstract from possible graphic recognition errors and give more
freedom to the expert who manages the search.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Fuzzy "positional" dictionary search algorithm</title>
      <p>
        To reduce the number of symbols variants obtained after the graphic recognition stage, it is necessary
to search for words in the grammatical dictionary of the Old Russian language created within the
framework of the project Manuscripts.ru [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. For this purpose, a recursive search algorithm based on
regular expressions is used.
      </p>
      <sec id="sec-2-1">
        <title>2.1. Pre-processing of the input text</title>
        <p>The input text is a sequence of characters with variants after graphical recognition. Each character is
represented by the following structure:</p>
        <p>&lt;Symbol&gt;::=‘[’[&lt;Coordinates&gt;’,’{&lt;Value Variant&gt;’;’}]’]’
&lt;Coordinates&gt;::=&lt;X&gt;’,’&lt;Y&gt;’,’&lt;Width&gt;’,’&lt;Height&gt; &lt;Variant</p>
        <p>Value&gt;::=&lt;Value&gt;’,’&lt;Relevance&gt;[’,’&lt;Number_diactric&gt;],
where &lt;Coordinates&gt; are the coordinates of the rectangular area in which the symbol is enclosed in
the original image; &lt;X&gt;,&lt;Y&gt; are the upper left corner coordinates of the symbol rectangular area in
the image; &lt;Width&gt;,&lt;Height&gt; are the width and height of the rectangular area of the symbol in the
image; &lt;variant Value&gt; is the variant of the symbol value; &lt;Value&gt; is the percentage of the variant
relevance after the graphic recognition stage; &lt;Number_diactrika&gt; is the number of previous
characters, which is covered by the diactric symbol.</p>
        <p>Example:
As you can see, the text may contain diactric symbol:</p>
        <p>In this case, after the relevancy percentage indicates how much the previous characters covered by
this accented character. Also, there may be omissions of characters that could not be determined after
graphic recognition stage.</p>
        <p>The source text is converted to a table form, where each table column contains variants of the
symbol value. The columns number is equal to the characters number.
2.2. Generation of regular expressions and a recursive search in the dictionary
The next is the regular expressions generation and recursive search in the dictionary. This step
analyzes variant characters combinations from 1 to 10 (configured in the search options). Each
combination is a regular expression that is inserted into the SQL-query:</p>
        <p>The result of the query is a words set found by this expression. If the words count is greater than
the threshold value (the default is 100), this result is not considered.</p>
        <p>The input to the search algorithm
$Table is an characters variants array after the graphic recognition that are received from the
original text;
|$Table| is the number of characters in the input text.
$maxWordLength is the maximum length of the considered symbols combinations.
$maxWordCount is the maximum words count in the query result.</p>
        <p>The output
$Result is the resulting array with words sets for each character.</p>
        <p>The main dictionary search cycle
$b ← 0
$e ← 0
Repeat
{</p>
      </sec>
      <sec id="sec-2-2">
        <title>RecognizeNextWord( $b, output $e);</title>
        <p>$b ← $e;
} While ($b &lt; |$Table|);</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Recursive search function</title>
      <p>RecognizeNextWord( $b, output $e)
{
$d ← $e – $b + 1;
While (($d &lt;= $maxWordLength) AND ($e &lt; |$Table|))
{
$reg ← GenerateRegularExpression($b, $e);
$symbol ← $Table[$b];
if (IsQueryResultAlreadyExists($reg, $symbol) = FALSE)
{
$res ← ExecuteQuery($reg, $symbol);
SaveWordSet($res)
$Result ← $Result ∪ $res;
if (|$res| &gt; 0) AND (|$res| &lt;= $MaxWordCount))
{
$e2 ← $e +1;</p>
      <p>RecognizeNextWord($e + 1, output $e2);
}
}
$e++;
$d ← $e - $b + 1;
}
where
}
$b is the character index from which the scan starts;
$e is the character index that ends the scan;
$d is the current length of the scanned character combination;
$reg is the regular expression for the current character combination;
$symbol is the first character of the current combination;
$res is the words set of the current symbols combinations;</p>
      <p>GenerateRegularExpression($b, $e) is a function that returns a regular expression for the
current character combination;</p>
      <p>IsQueryResultAlreadyExists ($reg, $symbol) is a function that returns True if for the regular
expression $reg and the symbol $symbol already exists a words set, and False otherwise;</p>
      <p>ExecuteQuery($reg, $symbol) is a function that searches words in the dictionary by the
regular expression $reg and the first character $symbol and returns a words set;</p>
      <p>SaveWordSet($res) is a function that saves a words set $res in working memory.</p>
      <p>After executing the main algorithm, an array with sets of words for each character combination not
exceeding the set threshold will be formed.</p>
      <p>Thus, the fuzzy search algorithm consists of two main steps:
1) the original text transformation into table form;
2) the recursive search in the dictionary for character variants combinations using regular
expressions.</p>
    </sec>
    <sec id="sec-4">
      <title>3. Reducing the number of character recognition options based on the fuzzy search algorithm</title>
      <p>The variants number reducing method after graphic character recognition based on the fuzzy search
algorithm results is to assess the relevance of the symbols variants by calculating the weights of each
symbol variant on such data as:
− frequency of the symbol occurrence in the fuzzy dictionary search results;
− frequency of the symbol occurrence in the fuzzy dictionary search results, taking into account the
position in the word and the length of the word;
− frequency of the symbol occurrence in the dictionary;
− frequency of the symbol occurrence in the dictionary, taking into account the position in the word
and the length of the word.</p>
      <p>
        The metric TF-IDF [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] adapted for this task is used to calculate the weight of the variant. It was
proposed to use a symbol variant (hereinafter the symbol) as a word in this metric, and sets of words
as documents. Thus, SF (symbol frequency) – the symbol importance, in the context of the word sets
in which the symbol participated, is estimated by the formula:
(s ∈ w )
SF (s,W ) = i ,
      </p>
      <p>W
IDF (s, D) = log
,
where |s∈ wi | is the occurrences count of a character s in a set of words derived from regular
expressions involving this character; |W| is the total words count in the sets obtained from regular
expressions involving this character. IDF (inverse dictionary frequency – inverse frequency of the
dictionary) is the inversion of the frequency which some character s occurs in the dictionary D. There
is only one IDF value for each character within the dictionary:</p>
      <p>D
(s ∈ di )
where |D| is the words count in the dictionary (1846721); |s∈ di | is the dictionary words count in
which the symbol s occurs.</p>
      <p>In order to take into account the position p of the symbol s and the length of the words l in the sets
W, in which the symbol in question is present, the calculation formulas SF and IDF can be written as
follows:</p>
      <p>SF (s,W , l, p) =
(wi (l, p, s) ∈W )
(wi ( p, s) ∈W )
where wi(l,p,s) is the i-th word in sets W of length l at position p of which stands the symbol s;
wi(l,p,s)∈ W is the words count wi(l,p,s) in the sets W; wi(p,s) is the i-th word in sets W at position p of
which stands the symbol s; wi(p,s)∈ W is the words count wi(p,s) in the sets W.</p>
      <p>(di (s, p) ∈ D)
IDF (s, D, l, p) = log
(di (s, p, l) ∈ D)
where di(s,p) the i-th word of the dictionary D at position p of which stands the symbol s; |di(s,p)∈D| is
the words count di(s,p) in the dictionary D; di(s,p,l) is the i-th word of the dictionary D of length l at
position p of which stands the symbol s; |di(s,p,l)∈D| is the words count di(s,p,l) in the dictionary D.</p>
      <p>Thus, the weight (relevance) of a symbol is estimated in two ways:
1) based on the character occurrences count in word sets derived from regular expressions involving
that character:</p>
      <p>Weight(s) = SF (s,W ) * IDF (s, D)
2) taking into account the symbol position and the words length in the sets in which the analyzed
symbol is present:</p>
      <p>Weight(s, l, p) = IDF (s, D, l, p) * SF (s,W , l, p)</p>
      <p>So, in word sets W, the symbol s can occur at different positions p in words of different lengths l,
the total weight of the symbol, taking into account these parameters, is calculated as the sum of the
weights:
n
WeightSum(s, l, p) = ∑Weighti (s, l, p) ,
i=1
where n is the number of weights of the symbol s, taking into account the different positions and the
word length in the word sets in which the symbol participates.</p>
      <p>The total symbol variant weight is calculated as the sum of the weights, taking into account the
symbol occurrences count in the word sets and taking into account the position and length of words:</p>
      <p>WeightTotal(s) = Weight(s) + WeightSum(s, l, p)</p>
      <p>The next, the Rank(si) of each si variant of the symbol s is calculated as the ordinal number in the
variant weights array sorted in descending order. For each symbol variant, there are tree ranks
calculated for each weight: Rank(Weight(si)), Rank(WeightSum(si,l,p)), Rank(WeightTotal(si)). Total
rank RankTotal for the symbol variant is computed as the harmonic mean of the character variant
ranks. Each character variant is ranked by accounting RankTotal. As the rank was calculated by the
variant symbol position in the sorted weight arrays, the lower the rank, the higher the relevance.</p>
    </sec>
    <sec id="sec-5">
      <title>4. Experiment description</title>
      <p>The graphic recognition variants reduction of the text "Ostromir gospel" was carried out by the
following method:
1) selected fragment of the text;
2) a fuzzy dictionary search was performed for the selected text fragment;
3) calculated weight and the symbols variants ranking on the basis of search results;
4) correct the characters variants were set by manual word confirmation found from the dictionary
search results;
5) Precision, Recall and completeness were calculated and recorded in the table.</p>
      <p>
        The words searching result in the dictionary after graphic recognized text (9-10 lines of "Ostromir
gospel" [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], Figure 1), followed by confirmation of the words is shown in Figure 2.
      </p>
      <p>The symbol variant rank is indicated in the lower right corner of the cell with the symbol variant,
the variant occurrence frequency in the search results is shown in the lower left corner, and the graphic
recognition relevance percentage is shown in the upper left corner. If the symbol variant does not
occur in the found word sets, it is crossed out (frequency of occurrence – 0).</p>
      <p>In the lower part of the table the words confirmed by the expert are highlighted in green. The
number in the upper left corner of the word shows how many words were found in the dictionary by
the combination of options (the words count in the set).</p>
      <p>Figure 3 shows the process of assembling a sentence from words obtained by searching the
dictionary and then confirming the correct word from the search results set. Each symbol and each
word in the process of the software system operation can be viewed on the original image. During the
sentence assemble the expert can manually add the missing characters and words.</p>
      <p>The Precision and Recall of the reduction results were evaluated for the highest ranked options (1
and 2).</p>
      <p>Let S be a set of options of characters from the input text; S+ ⊂ S is a subset of the symbols that
have the highest rank; S+⊂ S is a subset of the symbols that were used in the formation of words sets
(not the strikethrough options); SE ⊂ S is a subset of the characters that have been confirmed by the
expert (highlighted in green); S' is a lot of characters in the input text (number of columns). In addition
to Precision and Recall, the percentage of Reduction the number of symbol variants that did not
participate in search queries was estimated.</p>
      <p>Precision =</p>
      <p>, Re call =
S + ∩ S E</p>
      <p>S '</p>
      <p>S + ∩ S E</p>
      <p>S E
, Re duction =</p>
      <p>S − S Σ</p>
      <p>S</p>
    </sec>
    <sec id="sec-6">
      <title>5. Conclusion</title>
      <p>The experiments conducted to reduce the symbols variants count based on the fuzzy search algorithm
show that the proposed variants reducing method to one variant gives an accuracy rate of 52%, and
completeness – 63%, to two variants – 72% and 86%, respectively. Given that one of the symbol
variants was graphically recognized correctly, the completeness of reducing variants method in
combination with graphic recognition results tends to 100%.</p>
      <p>In the future, it is planned to conduct experiments with the use of N-grams, built according to the
Old Russian dictionary and the results of expert search using the algorithm described in this article.
Author hopes to obtain statistical data about frequency of the letter combinations in old Cyrillic texts,
to obtain regularities of language models for old Cyrillic texts, which will improve the efficiency of
words search and words selection in such texts.</p>
    </sec>
    <sec id="sec-7">
      <title>Acknowledgments</title>
      <p>The author expresses gratitude to the Department of the information processing system staff from
Kalashnikov Izhevsk State Technical University: Kasimov Denis Rashidovich, Kuchuganov
Alexander Valerievich, Kuchuganov Valeriy Nikonorovich for valuable advice and recommendations,
and preparation of experimental data.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Klekovska</surname>
            <given-names>M</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Martinovska</surname>
            <given-names>C</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nedelkovski</surname>
            <given-names>I</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kaevski</surname>
            <given-names>D 2012</given-names>
          </string-name>
          <article-title>Comparison of Models for Recognition of Old Slavic Letters ICT Innovations 129-139</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Bande</surname>
            <given-names>C M</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Klekovska</surname>
            <given-names>M</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nedelkovski</surname>
            <given-names>I</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kaevski D 2014 Feature</surname>
          </string-name>
          <article-title>Selection for Classification of Old Slavic Letters Control Engineering</article-title>
          and Applied Informatics
          <volume>16</volume>
          (
          <issue>4</issue>
          )
          <fpage>81</fpage>
          -
          <lpage>90</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Kluzner</surname>
            <given-names>V</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tzadok</surname>
            <given-names>A</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shimony</surname>
            <given-names>Y</given-names>
          </string-name>
          and
          <string-name>
            <surname>Walach</surname>
            <given-names>E 2009</given-names>
          </string-name>
          <string-name>
            <surname>Antonacopoulos.</surname>
          </string-name>
          Word-Based
          <source>Adaptive OCR for Historical Books Proceedings of the 10th International Conference on Document Analysis and Recognition 501-505</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Kirov</surname>
            <given-names>N 2008</given-names>
          </string-name>
          <article-title>A software tool for searching in binary text images</article-title>
          <source>Pregled NCD</source>
          <volume>13</volume>
          <fpage>9</fpage>
          -
          <lpage>16</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Dubuisson</surname>
            <given-names>M-P</given-names>
          </string-name>
          ,
          <article-title>Jain A 1994 A Modified Hausdorff Distance for Object</article-title>
          <source>Matching Proc. 12th Int. Conf. Pattern Recognition 566-568</source>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <article-title>[6] Rabus A Recognizing handwritten text in Slavic manuscripts: A neural-network approach using Transkribus URL : https://www</article-title>
          .academia.
          <source>edu/38835297</source>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Kuchuganov</surname>
            <given-names>A V</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kasimov D R 2016</surname>
          </string-name>
          <article-title>Automation of recognition of old-printed characters with the help of descriptive logic Rašytinis palikimas ir skaitmeninės technologijos: VI tarptautinė mokslinė konferencija</article-title>
          (Vilnius; Iževskas)
          <fpage>104</fpage>
          -
          <lpage>109</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Borivoj</surname>
            <given-names>M</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Holub</surname>
            <given-names>J</given-names>
          </string-name>
          and
          <string-name>
            <surname>Polcar J 2005 Text Searching</surname>
          </string-name>
          <article-title>Algorithms</article-title>
          . Volume I:
          <article-title>Forward String Matching 1(2</article-title>
          ) URL: http://stringology.org/athens/TextSearchingAlgorithms
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <article-title>[9] Introduction to Pattern Searching Algorithms Tutorialspoint</article-title>
          . The Biggest Online Tutorials Library URL : https://www.tutorialspoint.com/introduction-to
          <article-title>-pattern-searching-algorithms</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Navarro</surname>
            <given-names>G</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Raffinot</surname>
            <given-names>M</given-names>
          </string-name>
          <source>2005 New Techniques for Regular Expression Searching Algorithmica</source>
          <volume>41</volume>
          (
          <issue>2</issue>
          )
          <fpage>89</fpage>
          -
          <lpage>116</lpage>
          DOI: 10.1007/s00453-004-1120-3
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <article-title>Fuzzy search tools Google code archive URL: https</article-title>
          ://code.google.com/archive/p/fuzzy-searchtools/
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <article-title>The Portal "Manuscript" URL: http://manuscripts</article-title>
          .ru/
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Jurafsky</surname>
            <given-names>D</given-names>
          </string-name>
          and
          <string-name>
            <surname>Martin J 2000 Speech and Language Processing</surname>
          </string-name>
          :
          <article-title>An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition (New Jersey: Prentice Hall</article-title>
          ) p
          <fpage>934</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <article-title>Ostromir gospel</article-title>
          .
          <source>Manuscript sheets Russian national library URL</source>
          : http:// www.nlr.ru/exib/Gospel/ostr/ill.html
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>