Извлечение информации из простого текста и запись в XML с использованием DOM - PullRequest
5 голосов
/ 07 июля 2011

В настоящее время я разрабатываю некоторые инструменты для преобразования форматов в области гликобиологии.Преобразование формата включает переход от текстового файла к XML-файлу, который является стандартным в данной области.В большинстве случаев получаемые нами данные содержат интересующую вас информацию в виде простого текстового файла, как показано ниже.Фактический файл имеет все это в одной строке.Чтение и разделение этого текста для получения информации тривиально (возможно, не интуитивно понятно), но проблема в XML.

[][b-D-GlcpNAc]
    {[(4+1)][b-D-GlcpNAc]
        {[(4+1)][b-D-Manp]
            {[(3+1)][a-D-Manp]
                {[(2+1)][a-D-Manp]{}
            }
        [(6+1)][a-D-Manp]
            {[(3+1)][a-D-Manp]{}
            [(6+1)][a-D-Manp]{}
        }
    }
}

Как это интерпретировать:

  1. Все изФорма WW-W + является сахаром, который связан с другим.Связь показана вьющимися {.
  2. 4 + 1, 3 + 1 и т. Д. Указывают, какие углеродные связи на одном сахаре связаны с другим.Таким образом, 4-й углерод на предыдущем связан с 1-м углеродом на последующем.
  3. {} Это означает, что никаких дополнительных сахаров, связанных с этим сахаром
  4. }, просто закройте этот уровень.

Вы, вероятно, можете прочитать XML и выяснить, каксвязи работают.Но если вы, ребята, предпочли бы более подробное объяснение, просто спросите.

Как должен выглядеть XML, показано ниже.

<?xml version="1.0" encoding="UTF-8"?>
<GlydeII>
    <molecule subtype="glycan" id="From_GlycoCT_Translation">
            <residue subtype="base_type" partid="1" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=b-dglc-HEX-1:5" />
            <residue subtype="substituent" partid="2" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=n-acetyl" />
            <residue subtype="base_type" partid="3" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=b-dglc-HEX-1:5" />
            <residue subtype="substituent" partid="4" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=n-acetyl" />
            <residue subtype="base_type" partid="5" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=b-dman-HEX-1:5" />
            <residue subtype="base_type" partid="6" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" />
            <residue subtype="base_type" partid="7" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" />
            <residue subtype="base_type" partid="8" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" />
            <residue subtype="base_type" partid="9" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" />
            <residue subtype="base_type" partid="10" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" />
            <residue_link from="2" to="1">
                <atom_link from="N1H" to="C2" to_replace="O2" bond_order="1" />
            </residue_link>
            <residue_link from="3" to="1">
                <atom_link from="C1" to="O4" from_replace="O1" bond_order="1" />
            </residue_link>
            <residue_link from="4" to="3">
                <atom_link from="N1H" to="C2" to_replace="O2" bond_order="1" />
            </residue_link>
            <residue_link from="5" to="3">
                <atom_link from="C1" to="O4" from_replace="O1" bond_order="1" />
            </residue_link>
            <residue_link from="6" to="5">
                <atom_link from="C1" to="O3" from_replace="O1" bond_order="1" />
            </residue_link>
            <residue_link from="7" to="6">
                <atom_link from="C1" to="O2" from_replace="O1" bond_order="1" />
            </residue_link>
            <residue_link from="8" to="5">
                <atom_link from="C1" to="O6" from_replace="O1" bond_order="1" />
            </residue_link>
            <residue_link from="9" to="8">
                <atom_link from="C1" to="O3" from_replace="O1" bond_order="1" />
            </residue_link>
            <residue_link from="10" to="8">
                <atom_link from="C1" to="O6" from_replace="O1" bond_order="1" />
            </residue_link>
    </molecule>
</GlydeII>

До сих пор я был тривиально в состоянии получить все поля остатков и записать их в XML.Но у меня возникают проблемы даже с написанием псевдокода для полей Остаток_ссылки.Даже если бы я мог просто получить помощь и идеи о том, как добавить информацию о связях в XML, я был бы признателен.

1 Ответ

1 голос
/ 08 июля 2011

Хорошо! Крутая проблема, это вредит моему мозгу.

Во-первых ... для здравого смысла я добавил ваши необработанные данные так, чтобы это имело смысл:

[][b-D-GlcpNAc] {
    [(4+1)][b-D-GlcpNAc] {
        [(4+1)][b-D-Manp] {
            [(3+1)][a-D-Manp] {
                [(2+1)][a-D-Manp] { }
            }
            [(6+1)][a-D-Manp] {
                [(3+1)][a-D-Manp] { }
                [(6+1)][a-D-Manp] { }   
            }
        }
    }

Я думаю, что ключом к этому является выяснение, что такое пары, и вы хотите программно выяснить, на каком уровне вы находитесь.

псевдокод:

hierarchy = 0
nextChar = getNextChar()
while (Parsing):
    if (nextChar = "{"):
        hierarchy += 1
    elif (nextChar = "}"):
        hierarchy -= 1
    if (nextChar = "["):
        storeSugar(hierarchy)

Вы также хотели бы отследить, какой сахар является предыдущим «родительским» сахаром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...