Orosz nyelvű szövegek mondatokra szegmentálása (Perl script)

        #perl

        use utf8;
        use Encode;
        use open ':std', ':encoding(UTF-8)';
        
        open FILE, @ARGV[0] or die $!;
        
        $abbr_dot = "^[\`\'\"\‚\/\(\\\[\{\<\§\‹\«\»\›\…\©\“\„\”\’\‘\°\´]*(A|B|C|D|E|F|G|H|I|II|III|J|K|L|M|N|O|Op|P|Q|R|S|T|U|V|W|X|Y|d|e|etc|m|n|А|Автореф|Б|В|Вопр|Г|Д|Е|Ж|З|Зам|И|Избр|К|Канд|Л|М|Матф|Моск|Н|О|Оп|П|Пер|Полн|Прим|Примеч|Р|Рис|Рос|Рус|С|СПб|Сб|Св|См|Соб|Собр|Сов|Ср|Ст|Стр|Т|У|Указ|Ф|Х|Ц|Цит|Ч|Ш|Э|Ю|Я|абс|авг|ак|англ|ар|арм|арт|б|биол|быв|в|вв|вел|веч|внутр|вод|воен|вост|вступ|вып|выс|г|гв|гв|ген|геогр|гл|гос|гр|д|дек|дес|див|дисс|докт|дол|долл|дор|др|е|ед|ж|жел|з|зав|зам|зап|и|изд|изм|им|ин|иностр|испр|ист|ит|их|к|кав|каз|канд|кар|кат|кб|кв|кн|ком|конф|коп|кр|креп|куб|л|м|мат|математич|мед|мес|мил|милл|мин|минер|мл|млн|млрд|мм|мн|мол|н|напр|нар|наст|науч|нач|неск|ниж|нов|о|об|обл|окт|опубл|отв|отд|оч|п|пед|пер|пех|пог|подп|пом|пос|посл|поч|пр|практ|пред|преп|пресв|прим|примеч|проц|проч|психол|р|ред|реш|рис|род|рт|руб|рус|с|саж|сб|св|сев|сек|сер|сл|след|см|соб|собр|сов|соц|соч|спец|ср|ст|стол|стр|т|т\.е|табл|тел|телеф|техн|тов|тыс|у|уд|ул|ум|ур|уч|ушир|ф|физ|филос|фр|франц|х|хим|хоз|хор|ц|цит|ч|чайн|чел|ш|шт|э|экз|экон|ю|юж|юр|юрид|яз)\\\.\$";
        
        $sentence = "";
        $last_word_ended = 0;
        $last_word_num = 0;
        
        while($line = )
        {
          chop($line);
          if($line ne "")
          {
            @words = split(/\s+/, $line);
            foreach(@words)
            {
              if($last_word_ended and not /^[\`\'\"\‚\/\\\[\{\<\§\‹\«\»\›\…\©\“\„\”\’\‘\°\´]*[a-ząćęłńóśźżşáâäçéëíôöřüабвгдеёжзийклмнопрстуфхцчшщэюя\,\;\:\-\–\—]/ and not ($last_word_num and /^[0-9]/))
              {
                cut(); #end of sentence
              }
        
              put($_); 
        
              if(/([\.…!?:]|[\.…!?:][})\]])[\`\'\"\‚\/\(\\\[\{\<\§\‹\«\»\›\…\©\“\„\”\’\‘\°\´]*$/)
              {
                #print "#".$_."#\n";
                if($_ !~ /$abbr_dot/)
                {
                  $last_word_ended = 1;
                  if(/^[0-9]*[0-9][\.…!?:]$/)
                  {
                    $last_word_num = 1;
                  }
                  else
                  {
                    $last_word_num = 0;
                  }
                }
                else
                {
                  $last_word_ended = 0;
                }
              }
              else
              {
                if(not /^[\-\–\—]+$/)
                {
                  $last_word_ended = 0;
                }
                  $last_word_num = 0;
              }
            }
          }
          else
          {
            cut(); #end of paragraph
          }
        }
        
        
        cut(); #end of file
        
        close(FILE);
        
        
        
        
        sub cut
        {
          my $main_sentence = "";
          my @sub_sentence = ();
          my $i = 0;
          my $main = 1;
          foreach(split('', $sentence))
          {
            if($main == 1 and $_ ne '(')
            {
              $main_sentence = $main_sentence . $_;
            }
            elsif($main == 1 and $_ eq '(')
            {
              $i = $i + 1;
              $sub_sentence[$i] = "";
              $main = 0;
            }
            elsif($main == 0 and $_ ne ')')
            {
              $sub_sentence[$i] = $sub_sentence[$i] . $_;
            }
            elsif($main == 0 and $_ eq ')')
            {
              $main = 1;
            }
          }
          if($main_sentence ne "")
          {
        print $main_sentence . "\n";
          }
          my $j = 1;
          while($j <= $i)
          {
            if($sub_sentence[$j] ne "")
            {
              print $sub_sentence[$j] . " sorvég\n";
            }
            $j = $j + 1;
          }
          $sentence = "";
        }
        
        sub put
        {
          $sentence = $sentence . $_[0] . " ";
        }