Разбор или автоматический формат арабского словаря статей - PullRequest
0 голосов
/ 07 декабря 2018

Я работаю на арабско-русском словаре.И у меня есть не очень хорошо организованный текст статей, который я хочу разделить на отдельные поля.Я написал код, который сделал это, и теперь я хочу улучшить его.Вот как это работает сейчас.Когда я нажимаю «авторедактирование», он разрезает простой текст на разумные части: переводы и примеры.

enter image description here

Вот код, который это делает:

      function parseArticle(text, word) {
        var newTranslations = [];

        translations0 = text.split(/\d+\s*?\)/g); //raw array with translations

        var match = "";
        //\u0621-\u064A - arabic symbols
        var example_pattern = /;([\s]+?[\!\?\*\~\u0621-\u064A]+?[\s\S]+?)(;|$)/gi;

        translations0.forEach(function(elem, index) {
          if (elem.trim()) {
            var examples = [];
            var translation = "";
            var examplesBeginnigIndex = elem.search(example_pattern);
            if (examplesBeginnigIndex > -1) translation = elem.substring(0, examplesBeginnigIndex);
            else translation = elem.trim();
            while ((match = example_pattern.exec(elem))) {
              var exampleString = match[1];
              //\u0400-\u04FF - cyrillic symbols
              translationBeginningIndex = exampleString.search(/\(?[\u0400-\u04FF]/);
              var example = exampleString.substring(0, translationBeginningIndex).trim();
              example = reverseAndReplaceTilda(example, word);
              var exTranslation = exampleString.substring(translationBeginningIndex).trim();
              examples.push({ example, translation: exTranslation });
              example_pattern.lastIndex--;
            }
            newTranslations.push({ translation, examples });
          }
        });
        return newTranslations;
      }

Проблема в том, что мой код убивает иногда ценные данные.Я хочу переписать это.Просто предварительно отформатируйте текст, добавив новые строки "\ n" перед каждым новым переводом и примером ... Я хочу использовать articleText.search(regexOfTranslation or regexOfExample) (который дает мне индекс соответствия), а затем просто поставить линейный тормоз для каждого найденного индекса,Но search дает только первый индекс совпадения.И мой regexPattern содержит символы до и после поиска шаблона.И когда я нахожу его один раз, следующий не совпадает (потому что предыдущая часть «съела» следующей, например, ;(my_pattern);, - «;» в конце шаблона съедена, но она мне нужна для поиска следующего соответствия... В exec есть lastIndex, который я могу уменьшить. Но как это сделать с search. Или как мне лучше достичь своей цели? Вы можете увидеть в коде, что я использовал search,match, exec, но все это работает по-разному, и я застрял.

Если кто-то хочет проверить, вот ввод и желаемый вывод:

<textarea class="inputData">
1) входить; 2) проникать (куда فى ); 3) вступать (куда вин.п. или فى ); быть составной часть (чего), быть включенным (куда فى); الجامعة ~ поступить в университет; الجمعيّة ~ вступить в члены общества; على عامه العاشر ~ ему пошёл десятый год; معه فى مفاوضات ~ вступить с кем-л. переговоры. 4) заходить, приходить (к кому على); 5) вводить (кого ب ); * ـه الشكّ ~ у него закралось сомнение; فى عقله ~ страд. у него помутился рассудок; على زوجته ~ вступить в супружеские права; ( قيد الخدمة ( العمل ~ войти в строй ( напр. о заводе)
</textarea>
<textarea class="outputData">
1) входить; 

2) проникать (куда فى );  

3) вступать (куда вин.п. или فى );  быть составной часть (чего), быть включенным (куда فى);   
الجامعة ~ поступить в университет; 
الجمعيّة ~ вступить в члены общества;  
على عامه العاشر ~  ему пошёл десятый год;  
معه فى مفاوضات ~ вступить с кем-л. переговоры.    

4) заходить, приходить (к кому على);    
 
5) вводить (кого ب );  
 ـه الشكّ ~  у него закралось сомнение;  
فى عقله ~  страд. у него помутился рассудок;  
على زوجته ~   вступить в супружеские права; 
( قيد الخدمة ( العمل ~   войти в строй ( напр. о заводе)                       
</textarea>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...