Подтвердить что ты не робот

Частотная разметка в структуре данных 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 и т.д.

Вопрос

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

Весьма громоздко использовать синтаксис R с деревом вложенных списков (или ad hoc 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, а не на часто задаваемые вопросы записей. Его синтаксис также не идеален, я думаю, что более современная разметка, что-то вроде уценки, будет более читаемой.

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

Подводя итоги

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

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

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

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

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

4b9b3361

Ответ 1

(Это указывает точку 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")

Ответ 2

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

Здесь, по-видимому, три предположения.

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

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

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

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

Есть инструменты, которые помогут вам создавать парсеры и анализировать деревья для произвольных lanuages ​​(и даже переводчиков из деревьев синтаксического анализа в другие формы). ANTLR - один; он используется достаточным количеством людей, поэтому вы даже можете случайно найти тег-анализатор texinfo, который уже был построен. Наш DMS Software Reengineering Toolkit - это другое; DMS после разбора будет экспортировать XML-документ с деревом синтаксического анализа непосредственно (но это не обязательно будет в том едином представлении, которое вы в идеале хотите). Эти инструменты, скорее всего, облегчат чтение разметки и представляют ее в XML.

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