常见问题标记为R数据结构

我正在阅读texinfo中的R FAQ源代码 ,并认为如果它被parsing为R结构,pipe理和扩展会更容易。 有几个现有的例子与此相关:

  • 财富包

  • bibtex条目

  • Rd文件

每个都有一些理想的特征。

在我看来,常见问题在R社区中使用不足,因为他们缺乏:(1)通过R命令行(即通过R包)轻松访问; ii)强大的searchfunction; iii)交叉引用; 四)提供的软件包的扩展。 从包装的bibtexfortunes绘制想法,我们可以构想一个新的系统,其中:

  • 可以从R中search常见问题。典型的调用类似fortune()接口: faq("lattice print") ,或者faq() #surprise me!faq(51)faq(package="ggplot2")

  • 包可以提供自己的FAQ.rda ,其格式尚不清楚(见下文)

  • Sweave / knitr驱动程序可以输出格式良好的Markdown / LaTeX等。

但是我不确定什么是最好的input格式。 无论是转换现有的常见问题,或添加新的条目。

使用R语法与嵌套列表树(或特殊的S3 / S4 / ref classstructure

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

Rd文档,尽pipe本身不是R结构(它更像是LaTeX的一个子集,拥有自己的parsing器),也许可以提供更具吸引力的input格式示例。 它也有一套工具来parsing R中的结构 。然而,其目的是相当具体和不同的,面向R函数的一般文档而不是FAQ条目。 它的语法也不是很理想,我认为更现代的标记,比如markdown,会更具可读性。

有没有其他的东西,也许是R分解降价文件的例子? Rd文件偏离其预期目的的一个例子?

总结

我想拿出来:

1 – 一个R结构(可能是类)的好devise,可以将fortune包扩展到常见的条目,如常见问题解答项目

2-更方便的格式来input新的常见问题(而不是当前的texinfo格式)

3-一个parsing器,用R或其他语言(野牛?)将现有的FAQ转换成新的结构(1),和/或将新的input格式(2)转换成R结构。

更新2:在赏金时期的最后两天,我得到了两个有趣但又完全不同的答案。 因为这个问题是相当广泛的(可以说是不适当的),所有的答案都不能提供完整的解决scheme,所以我现在不会(现在也不会)接受答案。 至于赏金,我会把它归因于在赏金到期之前最新的答案,希望有一种更平等的分配方式。

(这个地址点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 

并手动parsing结果。

 doc <- readLines("R-FAQ.txt") # Split the document into questions # ie, 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文件等)转换成一些标准格式(我强调)一些隐含的统一结构和语义是很容易的。
因为如果你不能把它们全部映射到一个单一的结构,你将不得不为每种types或者每个单独的文档编写单独的R工具,然后转换后的工具将会压倒优势。

2)R是写这种文件处理工具的正确语言; 怀疑你有点偏向于R,因为你在R工作,不想考虑“离开”开发环境,以获得有关与R更好地工作的信息。 我不是一个R专家,但我认为R主要是一种数字语言,并没有提供任何string处理,模式识别,自然语言分析或推理的特别帮助,所有这些我都希望扮演重要angular色从主要包含自然语言的转换文档中提取信息。 我并不是build议使用特定的替代语言(Prolog ??),但是如果成功转换为正常forms(任务1),则可能会更好,仔细select目标语言进行处理。

3)你实际上可以从这些结构中提取有用的信息。 图书馆学是二十世纪试图推行的; 现在我们全部进入“信息检索”和“数据融合”的方法。 但事实上,对非正式文件的推理已经挫败了大部分的尝试。 没有明显的系统来组织原始文本并从中提取深层次的价值(IBM的威胁获胜的沃森系统是明显的例外,但即使在那里也不清楚沃森“知道”什么,你想让沃森回答这个问题:外科医生应该用一把刀打开你吗?“不pipe你给了多less原始文本)问题是你可能成功地转换数据,但是不清楚你能用它成功地做些什么。

尽pipe如此,文本上的大多数标记系统都有标记结构和原始文本。 人们可以把这些东西“parsing”为树状结构(如果您认为某些东西是可靠的交叉引用,那么texinfo肯定有这些结构)。 XML作为这种parsing结构的载体被广泛推广,并且能够代表任意的树或graphics,就好…用于捕获这样的树或graphics。 然后,人们推送RDF或OWL或其他一些使用XML的知识编码系统,但这不会改变问题; 你select一个独立于R的规范目标]。 所以你真正想要的是读取各种标记结构(texinfo,RD文件),并吐出XML或等效的树/图。 在这里,我认为你注定要build立单独的O(N)parsing器来覆盖所有N个标记样式; 一个工具怎么会知道什么价值标记(因此parsing)是? (你可以想象一个系统在给出标记的描述时可以读取标记的文档,但是即使这样也是O(N):有人仍然需要描述标记)。 一个parsing就是这个统一的表示法,然后你可以使用一个容易构build的Rparsing器来读取XML(假设一个不存在),或者如果R不是正确的答案,就用任何正确的答案parsing。

有些工具可以帮助您为任意语言(甚至是从parsing树到其他表格的翻译)构buildparsing器和parsing树。 ANTLR是一个; 它被足够的人使用,所以你甚至可能意外地find一个texinfo分析器已经build立的人。 我们的DMS软件再造工具包是另一个; parsing后的DMS将直接导出一个带有分析树的XML文档(但不一定是您想要的统一表示forms)。 这些工具可能会使读取标记相对容易,并用XML表示。

但是我认为你真正的问题是决定你想要提取/做什么,然后find一个方法来做到这一点。 除非你对如何做后者有一个清晰的认识,否则做所有的前面的parsing器就好像很多工作一样不清楚收益。 也许你有一个更简单的目标(“pipe理和扩展”,但这些词可以隐藏很多),这是更可行的。