Преобразовать HTML-список в дерево с R - PullRequest
0 голосов
/ 22 мая 2018

Мне нужно преобразовать HTML-список в иерархическую структуру в R (скажем, в дереве).Я пытался использовать пакет data.tree вместе с пакетом XML, но с плохими результатами я бы сказал ...

Полный html для таблицы доступен здесь: https://biocyc.org/META/class-subs-instances?object=Pathways, itочень большой, поэтому я бы не стал публиковать полный код.

Мне нужно сохранить ту же структуру списка, но преобразовать ее в иерархический объект, такой как дерево.Я думал о пакете data.tree, так как в нем есть очень удобная функция, называемая ToDataFrameTypeCol, для непосредственного преобразования иерархического объекта в форме пути (т.е. foo / bar / что-то) в объекты дерева.

Iбыл бы признателен за любые идеи,

спасибо заранее,

ура,

Джованни

Редактирование после комментария MrFlick

Вот этопример того, что я сделал и что мне нужно сделать.Чтобы все было как можно проще, я опишу только самую первую часть таблицы, но этого должно быть достаточно:

<b><a href="/META/NEW-IMAGE?object=Activation-Inactivation-Interconversion">Activation/Inactivation/Interconversion</a></b>
<ul>
<li><b><a href="/META/NEW-IMAGE?object=Activation">Activation</a></b>
<ul>
<li><b><a href="/META/NEW-IMAGE?object=GLUCOSINOLATE-DEG">Glucosinolates Activation</a></b>
<ul>
<li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6684">aromatic  glucosinolate activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5267">glucosinolate activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWYQT-4476">indole glucosinolate activation (herbivore attack)</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWYQT-4477">indole glucosinolate activation (intact plant cell)</a>
</li></ul>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6012-1">acyl carrier protein activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-4441">DIMBOA-glucoside activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7321">ecdysteroid metabolism (arthropods)</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7895">ethionamide activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1822">indole-3-acetate activation I</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1921">indole-3-acetate activation II</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7896">isoniazid activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5143">long-chain fatty acid activation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5340">sulfate activation for sulfonation</a>
</li></ul>
</li><li><b><a href="/META/NEW-IMAGE?object=Inactivation">Inactivation</a></b>
<ul>
<li><b><a href="/META/NEW-IMAGE?object=Gibberellin-Inactivation">Gibberellin Inactivation</a></b>
<ul>
<li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-102">gibberellin inactivation I (2β-hydroxylation)</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6477">gibberellin inactivation II (methylation)</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6494">gibberellin inactivation III (epoxidation)</a>
</li></ul>
</li><li><b><a href="/META/NEW-IMAGE?object=Indole-3-Acetate-Inactivation">Indole-3-acetate Inactivation</a></b>
<ul>
<li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1961">indole-3-acetate inactivation I</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1962">indole-3-acetate inactivation II</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1981">indole-3-acetate inactivation III</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2021">indole-3-acetate inactivation IV</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5788">indole-3-acetate inactivation V</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5797">indole-3-acetate inactivation VI</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5811">indole-3-acetate inactivation VII</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5784">indole-3-acetate inactivation VIII</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6219">indole-3-acetate inactivation VIII</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1741">indole-3-acetate inactivation IX</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-1782">superpathway of indole-3-acetate conjugate biosynthesis</a>
</li></ul>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6546">brassinosteroids inactivation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7321">ecdysteroid metabolism (arthropods)</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7859">jasmonoyl-L-isoleucine inactivation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6297">tuberonate glucoside biosynthesis</a>
</li></ul>
</li><li><b><a href="/META/NEW-IMAGE?object=Interconversion">Interconversions</a></b>
<ul>
<li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5272">abscisic acid degradation by glucosylation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6012">acyl carrier protein metabolism</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5926">afrormosin conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=ARGORNPROST-PWY">arginine, ornithine and proline interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2861">biochanin A conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7057">cichoriin interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2343">daidzein conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7056">daphnin interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7949">diadinoxanthin and diatoxanthin interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2904">formononetin conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2345">genistein conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5835">geranyl acetate biosynthesis</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-801">homocysteine and cysteine interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2701">maackiain conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-2561">medicarpin conjugates interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6303">methyl indole-3-acetate interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-6972">oleandomycin activation/inactivation</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-7075">phenylethyl acetate biosynthesis</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5114">UDP-sugars interconversion</a>
</li><li><a href="/META/NEW-IMAGE?type=PATHWAY&amp;object=PWY-5945">violaxanthin, antheraxanthin and zeaxanthin interconversion</a>
</li></ul>
</li></ul>

Я пытаюсь преобразовать таблицу в иерархическую структуру с внешними элементами в видеродитель внутренних элементов.Итак, давайте возьмем элемент под названием: «инактивация гиббереллина II (метилирование)», его следует поместить под родительским узлом «инактивация гиббереллина», который, в свою очередь, следует поместить под родительский «инактивация» и, следуя той же схеме, подпоследний родитель "Активация / Инактивация / Межконверсия".Другими словами, мне нужно было бы получить строку типа «Активация / инактивация / взаимопревращение; инактивация; инактивация гиббереллина; инактивация гиббереллина II (метилирование)» для каждого узла.Просто чтобы сделать вещи немного сложнее, я должен получить «object = XXXX» от каждого «href» каждого листа дерева, поэтому полная строка должна выглядеть так: «Активация / Инактивация / Межконверсия; Инактивация; Инактивация Гиббереллина;инактивация гиббереллина II (метилирование); PWY-6477 ".

Я попытался разобрать html-файл следующим образом:

library(data.tree)
library(XML)    

html <- readLines("html_example.html")
doc <- htmlParse(html, asText = T)

html.list <- xmlToList(doc)
node <- as.Node(html.list)

Но я получил что-то, что трудно разобрать ...

Еще раз спасибо!

чао,

Джованни

...