2015-08-12 1 views
0

У меня есть набор md документов, написанных группой людей. Каждый файл md является характеристикой/описанием объекта и имеет идентичную структуру (разделы, каждая секция с одинаковым названием). Вы можете думать об этом как о форме, написанной в Markdown.Извлечь уценку структуры документа (с pandoc?)

Каждый файл выглядит примерно так:

# Object "foobar" 

## Color 

The object is red with pink dots.  

## Shape 

Square-like  

## Texture 

Smooth like a glass. 

и, скажем, snafoo.md:

# Object "snafoo" 

## Color 

The object is green with black stripes.  

## Shape 

Ball-like 

## Texture 

Rough. A bit like sandpaper. 

и так далее ...

Я хотел бы автоматически "сливать" эти файлы так что содержимое совпадающих разделов конкатенируется. На основе этих двух файлов выше я хотел бы получить выход вроде:

# Color 

The object is red with pink dots.  

The object is green with black stripes.  

# Shape 

Square-like 

Ball-like 

# Texture 

Smooth like a glass. 

Rough. A bit like sandpaper. 

То, что я нашел, чтобы быть полезным является использование pandoc для преобразования md файл в формате docbook, который, по существу, формат XML-подобный поэтому легко разобрать его и получить структуру с использованием существующих инструментов XML. Выход OPML тоже кажется хорошим кандидатом.

Я думаю, что либо docbook, либо OPML были бы приемлемыми. Я бы написал сценарий, который объединяет соответствующие разделы (добавляет их содержимое из разных документов).

Однако pandoc переводит все специальные символы в HTML-коды, такие как ", &amp и так далее. Я хотел бы иметь возможность извлекать, скажем, определенные подразделы в иерархии, но иметь текст (например, тело подраздела) точно так же, как в исходном файле md. Как бы вы конвертировали HTML-коды (" и т. Д.) Обратно в ASCII, чтобы все можно было преобразовать в PDF/DOC/... с pandoc?

+0

В каждом XML , который имеет вложенные теги, некоторые символы (особенно '>' и '<') должны быть экранированы. Может быть, вы должны рассказать нам больше о вашем случае использования ... – mb21

+0

Я немного разработал и добавил пример. –

ответ

1

Pandoc написан в Haskell и использует структуру данных Haskell в качестве промежуточного формата для преобразования документов. Вы можете выбрать native в качестве выходного формата для получения этой структуры данных. Структуры данных Haskell очень легко разбираются. Вы также можете использовать Haskell и read структуру данных, используя типы из пакета pandoc, или использовать функции чтения документов непосредственно из pandoc.

+0

Спасибо. JSON и 'native' выглядят слишком грязными для меня для этой цели. Но все равно хорошо знать. –

1

Два других кандидатов для выходных форматов, чтобы проверить, может быть

  • JSON, используйте один из многих JSON зрителей
  • OPML (Outline Processor Markup Language) формат XML
+0

Действительно. Я пробовал OPML, и он близок к docboox для моей цели. Как вы собираетесь конвертировать HTML-коды в оригинальный ASCII? –

+0

Не могли бы вы немного разобраться? Лучший способ сделать это, чтобы добавить заголовок «Изменить» к исходному вопросу и расширить свой вопрос. Что вы подразумеваете под преобразованием HTML в исходный ASCII? –

+0

Я добавил несколько примеров.Под «преобразованием» я имел в виду, что после использования 'pandoc' для преобразования' md' в 'docbook' я получаю, скажем,' & 'вместо' & 'и так далее. Затем я могу написать скрипт, который объединяет разделы, извлеченные из формата 'docbook'. Затем я хотел бы взять эту объединенную 'docbook' и снова преобразовать ее в' md'. Надеюсь, теперь это станет более ясным. –