Как разделить результаты XPath с помощью разделителя? - PullRequest
3 голосов
/ 02 мая 2019

У меня есть данные XML для многих научных публикаций, и я пытаюсь проанализировать данные в KNIME, чтобы извлечь нужные мне поля. Вот один пример: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pmc&id=PMC4400176

Чтобы извлечь имена авторов, я использую следующий запрос XPath: /pmc-articleset/article/front/article-meta/contrib-group/contrib[@contrib-type="author"]

Однако, это возвращает: BorisovaSvetlana A., KimHak Joong, PuXiaotao, LiuHung-wen*

Я бы хотел, чтобы фамилии и имена разделялись неким разделителем, запятой / пробелом, а имена разных авторов разделялись точкой с запятой. Это возможно? Или есть лучший способ извлечения информации по сравнению с тем, что я сейчас делаю, который позволил бы мне достичь идеального результата:

Borisova, Svetlana A.; Kim, Hak Joong; Pu, Xiaotao; Liu, Hung-wen*

[править]

Текущий рабочий процесс KNIME:

enter image description here

Пример токового выхода:

enter image description here

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

Если я разделю имена авторов на несколько строк, это создаст несколько строк для каждой статьи, из чего я не уверен, как добраться до конечной цели для каждой статьи.

enter image description here

Конечная цель:

enter image description here

Любые идеи о том, как решить эту проблему с авторами, будут высоко оценены!

1 Ответ

5 голосов
/ 02 мая 2019

В идеале вы должны сделать это в несколько шагов.Я бы сделал это следующим образом:

  1. Извлеките все contrib элементы и верните получившиеся «Узлы» в виде строк ( не в виде строк), используя XPath узел
  2. Извлечение surname, given-names и xref с использованием другого XPath узла
  3. Объедините их вместе, например, с помощью Манипуляции строк узел
  4. Объедините все в одну строку, например, используя Объединитель столбцов или GroupBy узел

[править]Вы можете найти полностью рабочий пример рабочего процесса в моем общедоступном пространстве NodePit:

https://nodepit.com/workflow/com.nodepit.space%2Fqqilihq%2Fpublic%2FStack_Overflow%2FStack_Overflow_how-to-separate-xpath-results-by-a-delimiter_55959662.knwf

workflow

[относительно вашего редактирования] КакНасколько я понимаю, ваша задача сейчас состоит в том, чтобы ваша таблица содержала более одну публикацию, а узел GroupBy объединял их все в одну строку.Чтобы избежать этого, вы можете использовать узлы «Looping».Просто окружите логику, которую я описал выше, парой Chunk Loop Start и Loop End узла.Это позволяет обрабатывать каждую публикацию «в изоляции».

...