FAQ по разметке структуры данных R

Я читаю источник R FAQ в texinfo и думаю, что было бы легче управлять и расширять, если бы он был разобран как структура R. Есть несколько существующих примеров, связанных с этим:

  • пакет удачи

  • записи в bibtex

  • RD файлы

каждый с некоторыми желаемыми функциями.

На мой взгляд, часто задаваемые вопросы недооцениваются в сообществе R, потому что в них отсутствует i) легкий доступ из командной строки R (т. Е. Через пакет R); II) мощные функции поиска; iii) перекрестные ссылки; iv) расширения для добавленных пакетов. Рисование идей из пакетов bibtex а также fortunes мы могли бы создать новую систему, в которой:

  • Часто задаваемые вопросы можно найти в R. Типичные вызовы будут напоминать fortune() интерфейс: faq("lattice print"), или же faq() #surprise me!, faq(51), faq(package="ggplot2"),

  • Пакеты могут предоставить свои собственные FAQ.rda формат которого пока не ясен (см. ниже)

  • Sweave / knitr предоставляются драйверы для вывода красиво отформатированных Markdown / LaTeX и т. д.

ВОПРОС

Однако я не уверен, какой формат ввода лучше. Либо для преобразования существующих FAQ, либо для добавления новых записей.

Использовать синтаксис R с деревом вложенных списков довольно сложно (или специальный S3/S4/ref class или же structure,

\list(title = "Something to be \\escaped", entry = "long text with quotes, links and broken characters", category = c("windows", "mac", "test"))

Rd Документация, даже если сама по себе структура R не является (это скорее подмножество LaTeX с собственным анализатором), может предоставить более привлекательный пример формата ввода. У него также есть набор инструментов для анализа структуры в R. Однако его текущее назначение довольно специфично и отличается, ориентируясь на общую документацию по функциям R, а не на записи FAQ. Его синтаксис тоже не идеален, я думаю, что более современная разметка, что-то вроде уценки, будет более читабельной.

Есть ли что-то еще, может быть, примеры разбора файлов уценки в структуры R? Пример отклонения Rd-файлов от их предназначения?

Чтобы подвести итог

Я хотел бы придумать:

1- хороший дизайн для структуры R (возможно, класса), который расширил бы fortune пакет для более общих записей, таких как вопросы и ответы

2- более удобный формат для ввода новых часто задаваемых вопросов (а не текущий формат texinfo)

3- синтаксический анализатор, написанный на R или другом языке (bison?) Для преобразования существующего FAQ в новую структуру (1) и / или новый формат ввода (2) в структуру R.

Обновление 2: за последние два дня периода вознаграждения я получил два ответа, оба интересные, но совершенно разные. Поскольку вопрос довольно обширный (возможно, некорректный), ни один из ответов не дает полного решения, поэтому я (пока, во всяком случае) не приму ответ. Что касается награды, я приписываю ее ответу, получившему наибольшее количество голосов до истечения срока действия награды, желая, чтобы был способ разделить ее более равномерно.

2 ответа

(Это адрес пункта 3.)

Вы можете конвертировать файл texinfo в XML

wget http://cran.r-project.org/doc/FAQ/R-FAQ.texi
makeinfo --xml R-FAQ.texi 

и затем прочитайте это с пакетом XML.

library(XML)
doc <- xmlParse("R-FAQ.xml")
r <- xpathSApply( doc, "//node", function(u) {
  list(list(
    title    = xpathSApply(u, "nodename", xmlValue),
    contents = as(u, "character")
  ))
} )
free(doc)

Но гораздо проще преобразовать его в текст

makeinfo --plaintext R-FAQ.texi > R-FAQ.txt

и проанализировать результат вручную.

doc <- readLines("R-FAQ.txt")

# Split the document into questions
# i.e., around lines like ****** or ======.
i <- grep("[*=]{5}", doc) - 1
i <- c(1,i)
j <- rep(seq_along(i)[-length(i)], diff(i))
stopifnot(length(j) == length(doc))
faq <- split(doc, j)

# Clean the result: since the questions 
# are in the subsections, we can discard the sections.
faq <- faq[ sapply(faq, function(u) length(grep("[*]", u[2])) == 0) ]

# Use the result
cat(faq[[ sample(seq_along(faq),1) ]], sep="\n")

Я немного неясен относительно ваших целей. Похоже, вы хотите, чтобы вся относящаяся к R документация была преобразована в некоторый формат, которым R может манипулировать, предположительно, чтобы можно было написать подпрограммы R для лучшего извлечения информации из документации.

Кажется, здесь есть три предположения.

1) что будет легко преобразовать эти различные форматы документов (texinfo, файлы RD и т. Д.) В некоторую стандартную форму с (я подчеркиваю) некоторой неявной однородной структурой и семантикой.
Потому что, если вы не можете отобразить их все в одну структуру, вам придется написать отдельные инструменты R для каждого типа и, возможно, для каждого отдельного документа, и тогда работа инструмента постконвертации сократит преимущество.

2) что R является правильным языком для написания таких инструментов обработки документов; подозреваю, что вы немного предвзяты по отношению к R, потому что вы работаете в R и не хотите думать о том, чтобы "покинуть" среду разработки, чтобы получить информацию о работе с R лучше. Я не эксперт по R, но я думаю, что R в основном числовой язык, и он не предлагает никакой специальной помощи для обработки строк, распознавания образов, синтаксического анализа или вывода на естественном языке, и все это, как я ожидаю, сыграет важную роль. в извлечении информации из преобразованных документов, которые в основном содержат естественный язык. Я не предлагаю конкретный альтернативный язык (Пролог??), но вам может быть лучше, если вы преуспеете с преобразованием в обычную форму (задача 1), чтобы тщательно выбрать целевой язык для обработки.

3) что вы действительно можете извлечь полезную информацию из этих структур. Библиотечное дело было тем, что пытался подтолкнуть XX век; Теперь мы все в методах "поиска информации" и "объединения данных". Но на самом деле рассуждения о неофициальных документах потерпели поражение в большинстве попыток сделать это. Не существует очевидных систем, которые организуют необработанный текст и извлекают из него глубокую ценность (система Watson от IBM, выигравшая Jeopardy, является очевидным исключением, но даже там неясно, что "знает" Watson; вы бы хотели, чтобы Watson ответил на вопрос "" Должен ли хирург открыть вас ножом?", Независимо от того, сколько необработанного текста вы ему дали). Дело в том, что вам может быть удастся преобразовать данные, но не ясно, что вы можете с этим успешно сделать.

При этом большинство систем разметки в тексте имеют структуру разметки и необработанный текст. Можно "разобрать" их в древовидные структуры (или графоподобные структуры, если вы предполагаете, что определенные вещи являются надежными перекрестными ссылками; у texinfo они есть). XML широко используется как носитель для таких анализируемых структур, и, будучи в состоянии представлять произвольные деревья или графы, это... хорошо... для захвата таких деревьев или графов. [Люди затем нажимают RDF или OWL или какую-то другую систему кодирования знаний, которая использует XML, но это не меняет проблему; вы выбираете каноническую цель, независимую от R]. Так что вам действительно нужно что-то, что будет читать различные размеченные структуры (texinfo, RD-файлы) и выплевывать XML или эквивалентные деревья / графики. Здесь я думаю, что вы обречены на создание отдельных O(N) парсеров для покрытия всех стилей разметки N; как иначе инструмент узнает, что такое разметка значения (следовательно, parse)? (Вы можете представить себе систему, которая могла бы читать размеченные документы, когда дано описание разметки, но даже это O(N): кто-то еще должен описать разметку). Этот синтаксический анализ относится к этой унифицированной нотации, затем вы можете использовать легко создаваемый синтаксический анализатор R для чтения XML (при условии, что он еще не существует), или, если R не является правильным ответом, проанализируйте его с любым правильным ответом.,

Существуют инструменты, которые помогают вам создавать синтаксические анализаторы и разбирать деревья для произвольных языков (и даже переводчики с деревьев разбора на другие формы). АНТЛР один; он используется достаточным количеством людей, так что вы можете даже случайно найти анализатор texinfo, который кто-то уже создал. Наш инструментарий реинжиниринга программного обеспечения DMS - это еще одно; DMS после синтаксического анализа будет экспортировать XML-документ напрямую с деревом разбора (но это не обязательно будет в том унифицированном представлении, которое вы в идеале хотите). Эти инструменты, скорее всего, позволят относительно легко читать разметку и представлять ее в XML.

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

Другие вопросы по тегам