Единое окно доступа к образовательным ресурсам

Десятая конференция разработчиков свободных программ: Тезисы докладов

Голосов: 0

В книге собраны тезисы докладов, одобренных Программным комитетом десятой конференции разработчиков свободных программ, которая прошла в городе Калуге 20-22 сентября 2013 года.

Приведенный ниже текст получен путем автоматического извлечения из оригинального PDF-документа и предназначен для предварительного просмотра.
Изображения (картинки, формулы, графики) отсутствуют.
                                                                       71


   • Solve stoichiometric equation (http://sciencesoft.at/equation/)
   Не менее многочисленно и семейство GUI программ обладающих
теми же возможностями, но в разной степени. В первую очередь, для
GNU Linux это Kalzium (http://edu.kde.org/kalzium/).
   В другом мире для OC Windows известными являются:
   • Chemical Equation Expert (http://www.educationsoft.net ),
   • ChemEquations (http://heilzhive.mylivepage.ru ),
   • PL TABLE (http://www.chemtable.com/ru/PLTable.htm)
   • Химический калькулятор (http://heilzhive.mylivepage.ru/wiki/
     118/823),
   • Intelli Balancer (http://www.intellibalancer.com ),
   • Ural Chemical Calculator (http://urchmclc.chat.ru/ ),
   • ChemBalance Wizard и др.
Следует отметить, что далеко не все из них распространяются для
свободного и/или бесплатного использования. При этом, как это ни
странно, программной реализации на языке Perl мне обнаружить не
удалось.
    Наиболее близкой к рассматриваемой здесь п/п stoichiometry
Perl-модуля Chemistry::Harmonia является CLI программа, написан-
ная на Java: Chemical Equation Balancer (http://www.berkeleychurchill.
com/software/chembal.php), также имеющая ряд ограничений в своих воз-
можностях.
    Алгоритм уравнивания в stoichiometry         многоступенчатый и
использует несколько различных способов, основным из которых яв-
ляется алгебраический. Концептуально он построен на следующих
представлениях.
    С точки зрения алгебры любое уравнение химической реакции
можно рассматривать как атомную матрицу однородной системы ли-
нейных алгебраических уравнений (СЛАУ) [6, 7], неизвестными кото-
рой являются целочисленные стехиометрические коэффициенты ис-
ходных реагентов и продуктов, а постоянные при неизвестных коли-
чества атомов химических элементов, из которых состоят участники
превращений.
    В общем случае, атомная матрица       прямоугольна, с размерно-
стью [a × s], где a количество строк (все атомы, из которых состоят


  72                                                       Вне программы


  участники превращений), s количество столбцов (все соединения
  участники превращений). Например, для уравнения реакции:
                   x1 FeS2 + x2 O2 −→ x3 Fe2 O3 + x4 SO2
                                    −                                (1)
  при условии, что исходные реагенты слева расходуются и количество
  их атомов обозначено отрицательными значениями, атомной матри-
  цей будет:
            FeS2   O2   Fe2 O3   SO2                            
                                                     −1 0    2 0
       Fe    −1     0     2       0
                                           →    A = −2 0    0 1    (2)
       S     −2     0     0       1
                                                      0 −2   3 2
       O     0     −2     3       2
     Здесь a = 3 соответствует числу алгебраических уравнений СЛАУ,
  s = 4 числу искомых стехиометрических коэффициентов.
     Порядок чередования строк и столбцов в матрице (2) не суще-
  ственен. Кроме этого, разделение всех соединений на две категории:
  исходные реагенты и продукты, также не строго обязательно. Вполне
  достаточно точно указать один исходный реагент. В процессе решения
  противоположный знак найденных стехиометрических коэффициен-
  тов по отношению к обозначенному исходному реагенту подскажет
  какие из соединений должны относиться к противоположной катего-
  рии, нежели указанной для них первоначально.
     Такой подход позволяет оперировать всеми соединениями в целом
  как смесью и рассматривать весь спектр возможных уравнений реак-
  ций.
     Не вызывает сомнения, что размерность атомной матрицы огра-
  ничена снизу минимальным числом атомов и соединений равным 2:
                                  {a, s}   2,                        (3)
   поскольку любое химическое превращение предполагает минимум два
   участника    исходный реагент и продукт и, как следствие, на каж-
   дый атом должно приходится два или более, включающих его в свой
   состав соединений.
      В зависимости от числа атомов a и соединений s, можно выделить
   следующие три типа атомных матриц, т. е. уравнений реакций:
(a < s) недоопределённые     число атомов меньше числа соединений.
        Это наиболее распространённый тип, представленный уравне-
        нием (1);


                                                                         73


(a = s) определённые равенство числа атомов соединениям. По встре-
        чаемости занимает второе место, с большим отрывом от первого.
        Например:

                   (SCN)2 + H2 O −→ HCNS + H2 SO4 + HCN
                                 −

       здесь a = s = 5.
(a > s) переопределённые    число атомов превосходит число соедине-
        ний. Это наименее встречаемый тип уравнений. Например:

                    Na3 PO4 + AgNO3 −→ Ag3 PO4 + NaNO3
                                     −

        здесь a = 5, s = 4.
     Первый и третий случай предполагает прямоугольные атомные
  матрицы. Второй, с квадратной матрицей,       охватывает две катего-
  рии тривиально и нетривиально совместных уравнений.
     Поскольку рассматриваемые СЛАУ являются однородными, то
  для тривиально совместных уравнений существует только один набор
  стехиометрических коэффициентов, в котором все они равны нулю.
     Доказательством тривиальной совместимости является отличие от
  нуля определителя (∆ = 0) квадратной атомной матрицы или равен-
  ство ранга её размерности (r = s = a). Такая ситуация является след-
  ствием неправильно составленного уравнения химической реакции
  недопустимого или неполного сочетания участников превращений.
     У нетривиально совместных существует фундаментальный на-
  бор стехиометрических коэффициентов1 , среди которых все или толь-
  ко часть из них не равны нулю. Очевидно, что участники превращений
  с нулевыми коэффициентами являются лишними в уравнении реак-
  ции.
     Поиск стехиометрических коэффициентов из прямоугольной атом-
  ной матрицы сопряжен с решением СЛАУ и представлением её в виде
  неоднородной системы, с помощью таких свойств, как ранг матрицы
  r > 0, ограничиваемый её размерностью [a × s] и количеством соеди-
  нений s     определяющих число искомых стехиометрических коэф-
  фициентов.
     Для перечисленных выше трёх типов атомной матрицы, между
  рангом r и числом соединений s возможны следующие соотношения:
     1 Фундаментальный набор содержит не кратные друг другу (линейно незави-

  симые) целочисленные коэффициенты.


74                                                    Вне программы


(r = s) случай однородной определённой тривиально совместной
      СЛАУ. Все стехиометрические коэффициенты будут равны
      только нулю, т.е. уравнение реакции составлено неправильно
      и искомого решения нет.
(r = s − 1) нетривиально совместная матрица. Может быть получено
      только одно фундаментальное решение, т.е. один набор искомых
      ненулевых полностью стехиометрических коэффициентов. Это
      случай правильно составленного уравнения реакции.
(r = s − 2) также нетривиально совместная атомная матрица, одна-
      ко, с двумя фундаментальными линейно независимыми решени-
      ями. Если это окислительно-восстановительная реакция (ОВР)
      с числом пар окислитель-восстановитель (e), то для отыскания
      из множества единственно возможного решения, потребуются
      дополнительные уравнения электронного баланса между окис-
      лителями и восстановителями. Иначе заданное уравнение яв-
      ляется некорректным и может быть множеством, как минимум
      2-х алгебраически независимых реакций.
(r < s − 2) подобно предыдущему случаю, но заданное уравнение
      множество как минимум (s − r) алгебраически независимых ре-
      акций.
   Таким образом, в основе критерия правильно составленного урав-
нения химической реакции2 лежит определённый баланс между чис-
лом соединений s и рангом атомной матрицы r. С учётом (3) для пра-
вильно составленного уравнения реакции должен выполняться следу-
ющий набор условий:       
                          
                              {a, s} 2
                            s−a−e<2                            (4)
                          
                            0<s−r <2
                          

     Из (4) следует, что ранг атомной матрицы r для определённых
(a = s) и переопределённых (a > s) уравнений реакций, всегда должен
быть меньше числа соединений s. Для недоопределённых уравнений
(a < s)     ранг может, но не всегда, соответствовать числу атомов,
т. е. r a.
     Некорректно записанные уравнения ОВР с числом сочетаний пар
окислитель-восстановитель e      2 могут не подчиняться последнему
   2 С точки зрения возможности сбалансировать фундаментальным набором

стехиометрических коэффициентов.


                                                                75


из условий (4). Здесь ограничение в правой части будет выше 2, на
величину количества избыточных сочетаний пар.
    Ранг атомной матрицы рассчитывается подпрограммой Rank из
Perl-модуля Math::Assistant. Возвращаясь к примеру (1), ранг его
атомной матрицы r = 3. Полученный результат удовлетворяет усло-
виям (4), поэтому для уравнения (1) существует только один фунда-
ментальный набор стехиометрических коэффициентов.
    В общем случае, для недоопределённых уравнений реакций (a <
s), которые правильно составлены (выполняется условие s − r = 1)
одному из искомых коэффициентов можно первоначально присвоить
любое минимальное целое число (например, 1), а соответствующее
ему соединение (столбец) исключить из атомной матрицы, тем самым,
сделав её квадратной.
    В stoichiometry значения стехиометрических коэффициентов на-
ходят через определители методом Барейса [8], который реализован
подпрограммой Det Perl-модуля Math::Assistant.
    Несколько иначе выглядит ситуация с определёнными (a = s) и пе-
реопределёнными (a > s) уравнениями реакций, для которых также
должны выполнятся условия (4). Здесь, чтобы воспользоваться опи-
санной выше процедурой поиска стехиометрических коэффициентов,
надо исключить из атомной матрицы (a − r) строк     алгебраически
линейно зависимых химических элементов.
    Как было отмечено выше, уравнения реакций с условием (s−r 2)
являются составными. Разделить такую смесь соединений на отдель-
ные реакции с фундаментальными наборами стехиометрических ко-
эффициентов можно перебором сочетаний соответствующих соеди-
нений. В этой категории особым случаем являются уравнения ОВР.
Например, реакцию:
     KMnO4 + H2 O2 + H2 SO4 −→ K2 SO4 + MnSO4 + H2 O + O2
                             −                                  (5)
с s = 7, a = r = 5 можно рассматривать в виде следующих уравнений:
   2 KMnO4 + 2 H2 O + 3 H2 SO4 −→ K2 SO4 + 2 MnSO4 + 5 H2 O2
                               −                                (6)
    4 KMnO4 + 6 H2 SO4 −→ 2 K2 SO4 + 4 MnSO4 + 6 H2 O + 5 O2
                        −                                       (7)
       2 KMnO4 + 3 H2 SO4 −→ K2 SO4 + 2 MnSO4 + 3 H2 O2 + O2
                           −                                    (8)
                      2 H2 O2 −→ 2 H2 O + O2
                               −                                (9)
среди которых только два будут алгебраически линейно независимы-
ми.


76                                                       Вне программы


   Общеизвестно, что в реакции (5) обмен электронами проходит в
основном между окислителем KMnO4 и восстановителем H2 O2 по схе-
ме электронного баланса:

                                   −
                        Mn +7 + 5 e −→ Mn +2
                                     −
                            2−     −   0
                           O2 −2 e −→ O2
                                    −

   С учётом этих представлений атомную матрицу можно дополнить
6-й строкой обмена электронами между KMnO4 и H2 O2 :

          KMnO4   H2 O2   H2 SO4    K2 SO4   MnSO4     H2 O     O2
     K     −1       0        0         2       0        0       0
     Mn    −1       0        0         0       1        0       0
     O     −4      −2      −4          4       4        1       2    (10)
     H      0      −2      −2          0       0        2       0
      S     0       0      −1          1       1        0       0
     −
     e      5      −2        0         0        0        0      0

и после её решения получить ожидаемые стехиометрические коэффи-
циенты:

 2 KMnO4 + 5 H2 O2 + 3 H2 SO4 −→ K2 SO4 + 2 MnSO4 + 8 H2 O + 5 O2
                               −

   В подпрограмме stoichiometry обмен электронами между окис-
лителем и восстановителем и электронный баланс определяются с по-
мощью уникального алгоритма во вспомогательных подпрограммах
oxidation_state и redox_test. Эта принципиальная особенность ал-
горитма обеспечивает получение химически правильных решений в
случаях ОВР, которые невозможно получить во всех других подоб-
ных программах.
   Интерфейс stoichiometry в качестве основного аргумента ожи-
дает строку, в которой разделителями реагентов и продуктов могут
быть последовательности символов: равно (=) и/или минус (-), иду-
щие совместно с одним или несколькими символами (или без него)
больше (>). Например:

           =, ==, =>, ==>, ==>>, -, --, ->, -->, ->>> и т. д.


                                                                              77


        Пробельные символы вокруг разделителя не имеют никакого зна-
    чения. В случае, когда разделитель отсутствует (химическая смесь),
    формула последнего вещества рассматривается в качестве продукта3 .
        Кроме разделителя реагентов и продуктов, в анализируемой стро-
    ке stoichiometry ожидает найти химические формулы веществ, ко-
    торые должны быть разделены одним из символов: плюс (+), запятая
    (,), точка с запятой (;) и/или пробельными символами. Некоторые
    вещества могут быть заданы со стехиометрическими коэффициента-
    ми.
                         Интерфейс stoichiometry
1   use Chemistry::Harmonia qw( stoichiometry );
2   use Data::Dumper;
3   my $ce = ’KMnO4 + H2O2 + H2SO4 --> K2SO4 + MnSO4 + H2O + O2’;
4   print Dumper stoichiometry( $ce );

                                    OUTPUT
    ’5   H2O2 + 3 H2SO4 + 2 KMnO4 == 8 H2O + 5 O2 + 1 K2SO4 + 2 MnSO4’,
    ’2   H2O + 3 H2SO4 + 2 KMnO4 == 5 H2O2 + 1 K2SO4 + 2 MnSO4’,
    ’6   H2SO4 + 4 KMnO4 == 6 H2O + 5 O2 + 2 K2SO4 + 4 MnSO4’,
    ’2   H2O2 == 2 H2O + 1 O2’,
    ’3   H2SO4 + 2 KMnO4 == 3 H2O2 + 1 O2 + 1 K2SO4 + 2 MnSO4’

                   Уравнение с огромными коэффициентами
1   print Dumper stoichiometry( ’[Cr(CO(NH2)2)6]4[Cr(CN)6]3, KMnO4,
2        H2SO4, K2Cr2O7, KNO3, CO2, K2SO4, MnSO4, H2O’ );
3
4   1399 H2SO4 +10 [Cr(CO(NH2)2)6]4[Cr(CN)6]3 +1176 KMnO4 == 1879 H2O
5    + 660 KNO3 + 35 K2Cr2O7 + 420 CO2 + 1176 MnSO4 + 223 K2SO4

                     Эксперимент с безумной смесью
1   print Dumper stoichiometry( ’H2 Ca(CN)2 NaAlF4 FeSO4 MgSiO3 KI
2    H3PO4 PbCrO4 BrCl CF2Cl2 SO2 PbBr2 CrCl3 MgCO3 KAl(OH)4
3    Fe(SCN)3 PI3 NaSiO3 CaF2 H2O’ );
4
5   24 BrCl + 6 CF2Cl2 + 6 NaAlF4 + 119 H2 + 2 H3PO4 + 6 KI +
6    6 MgSiO3 + 18 Ca(CN)2 + 12 PbCrO4 + 12 FeSO4 + 24 SO2 ==
7    12 PbBr2 + 12 CrCl3 + 18 CaF2 + 110 H2O + 6 KAl(OH)4 +
8    6 MgCO3 + 6 NaSiO3 + 2 PI3 + 12 Fe(SCN)3’

        3 Следует отметить, что присутствие такого разделителя не является обяза-

    тельным    это может быть просто список веществ из которых будут составлены
    все возможные уравнения реакций.


78                                                            Вне программы


   Возможность stoichiometry уравнивать реакции была проверена
автором более чем на 24700 уникальных уравнениях, собранных из
отечественных и доступных зарубежных печатных изданий по химии.

Литература
[1] Bottomley, J. Note on a method for determining the coefficients in chemical
    equations / J. Bottomley // J. Chem. News. 1878. Vol. 37. Pp. 110–
    111.

[2] Способы подбора коэффициентов в химических уравнениях / Л. Г. Берг,
    С. Д. Громаков, И. В. Зороацкая, И. Н. Аверко-Антонович. Казань:
    Изд-во Казанского ун-та, 1959. 148 с.

[3] Harjadi, W. A simpler method of chemical reaction balancing / W. Harja-
    di // J. Chem. Educ. 1986. Vol. 63. Pp. 978–979.

[4] Herndon, J. A. On balancing chemical equations: Past and present /
    J. A. Herndon // J. Chem. Educ. 1997. Vol. 74. Pp. 1359–1362.

[5] DeKock, R. L. Balancing redox equations / R. L. DeKock, B. M. Brand-
    sen // J. Chem. Educ. 2010. Vol. 87, no. 5. Pp. 476–477.

[6] Степанов, Н. Ф. Методы линейной алгебры в физической химии /
    Н. Ф. Степанов, М. Е. Ерлыкина, Г. Г. Филиппов. М.: Изд-во МГУ,
    1976. 362 с.

[7] Missen, R. W. Chemical Reaction Stoichiometry (CRS): A Tutorial /
    R. W. Missen, W. R. Smith. 1998. 48 pp.

[8] Bareiss, E. H. Sylvestr’s identity and multistep integer-preserving gaussian
    elimination / E. H. Bareiss // Math. Comp. 1968. Vol. 22. Pp. 565–
    578.


                                                                       79


Резцов Яков Евгеньевич
Ставрополь, администратор форума поддержки пользователей открытых
офисных пакетов forumooo.ru
Проект: LanguageTool    свободное программное обеспечение для проверки
грамматики и стиля. http://languagetool.org/ru/

Реализация модуля проверки русской грамматики на
         основе программы LanguageTool


                               Аннотация
      В докладе рассматривается принцип реализации проверки грамма-
   тики, реализованный в программе LanguageTool. Рассмотрены особен-
   ности реализации проверки грамматики для русского языка. Рассмат-
   ривается структура XML-правил, описывающих грамматику.
     LanguageTool   это свободное программное обеспечение для про-
верки грамматики и стиля. С его помощью можно обнаружить ошиб-
ки, которые не могут быть обнаружены с помощью программного
обеспечения для проверки орфографии по словарю. Программой про-
веряются взаимосвязи слов в предложении, а не только отдельные
слова.
     Проверку грамматики возможно реализовать либо на основе пра-
вил, либо на основе статистических методов (машино-обучаемая про-
верка). Анализ текста в Languagetool основан на правилах. Правила
могут быть описаны на основе XML, либо в виде программных моду-
лей Java.
     LanguageTool был изначально создан Daniel Naber на Python в ка-
честве его дипломной работы [1], а затем был портирован на Java. Сей-
час ядро программы разрабатывается Daniel Naber и Marcin Milkowski
[2]. Программа для каждого языка имеет отдельный языковой модуль.
У каждого модуля есть свой автор, полный список поддерживаемых
языков доступен на страничке http://languagetool.org/languages/
     Программа имеет интеграцию с Openoffice.org и LibreOffice, но мо-
жет использоваться и отдельно. В независимой версии реализован
графический интерфейс, консольное приложение и web-сервер.
     Большинство грамматических правил описано на основе XML.
Текст перед обработкой правилами предварительно разбивается на
   ∗   an.gorohovski@gmail.com


80                                                         Вне программы


предложения. Это действие выполняет модуль на библиотеке SRX
segment library [3]. В рамках Languagetool был создан специальный
SRX файл (segment.srx ) с описанием правил деления текста, в том
числе и для русского языка. Этот файл может быть использован и в
других системах обработки текста, например в системах автоматиза-
ции перевода.
   Затем предложения разделяются на слова и знаки препинания.
Далее идёт проверка частей предложения по словарю, и каждому
слову сопоставляется часть речи (POS tag). Если слово не найдено,
то ему сопоставляется тег UNKNOWN. Например, тег ADV означает
наречие. Знакам препинания сопоставляются соответствующие теги.
   При создании словаря для русского модуля программы автором
доклада был использован русский семантический словарь рабочей
группы AOT.ru (http:\www.aot.ru), который распространяется на
основе лицензии LGPL. В этом словаре используются двубуквенные
обозначения частей речи. Но такой формат плохо подходит для описа-
ния в правилах, поэтому был создан специальный набор обозначений.
   Таблица преобразования присутствует в файле https://github.com/
languagetool-org/languagetool/blob/master/languagetool-language-modules/ru/
src/main/resources/org/languagetool/resource/ru/russian_tags.txt.
   Автором была выполнена конвертация словаря в формат fsa, ко-
торый использован в LanguageTool.
   В файле russian_tags.txt подробно описаны все варианты частей
речи, которые используются в программе. Для описания форм слов
используются только один тег, поэтому для обозначения некоторых
частей речи теги разделены на логические поля знаком двоеточия.
Например NN:Masc:PL:Nom означает существительное мужского ро-
да множественного числа в именительном падеже. При создании
правил используются регулярные выражения, что позволяет очень
просто отобрать слова в необходимой форме, например выражение
NN:.*:.*:Nom позволяет найти существительные в именительном па-
деже.
   Анализ русского текста представляет сложную задачу. Вот основ-
ные особенности:
   • богатая морфология
   • возможен различный порядок слов
   Рассмотрим пример XML-правила. Данное правило ищет в тексте
слова оба, обоих, обоим или обоими и следующие за ними существи-



    
Яндекс цитирования Яндекс.Метрика