43

texinfo でR FAQ ソースを読んでいて、R 構造として解析した方が管理と拡張が容易になると考えています。これに関連する既存の例がいくつかあります。

  • 運命のパッケージ

  • bibtex エントリ

  • Rd ファイル

それぞれにいくつかの望ましい機能があります。

私の意見では、FAQ は R コミュニティで十分に活用されていません。ii) 強力な検索機能; iii) 相互参照; iv) 寄贈されたパッケージの拡張。パッケージbibtexとからアイデアを引き出すとfortunes、次のような新しいシステムを考えることができます。

  • FAQ は R から検索できます。典型的な呼び出しは、fortune()インターフェイスに似ています: 、faq("lattice print")またはfaq() #surprise me!、。faq(51)faq(package="ggplot2")

  • パッケージは独自の を提供できますがFAQ.rda、その形式はまだ明確ではありません (以下を参照)。

  • Sweave/knitr適切にフォーマットされた Markdown/LaTeX などを出力するためのドライバーが提供されます。

質問

ただし、最適な入力形式が何であるかはわかりません。既存の FAQ を変換するため、または新しいエントリを追加するため。

ネストされたリストのツリー (またはアドホックな S3/S4/refclassまたは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の構造を解析するためのツールのセットもあります。ただし、現在の目的はかなり具体的で異なり、FAQ エントリではなく、R 関数の一般的なドキュメントに向けられています。その構文も理想的ではありません。マークダウンのような、より現代的なマークアップの方が読みやすいと思います。

マークダウンファイルをR構造に解析する例など、他に何かありますか? Rd ファイルを意図した目的から逸脱させる例はありますか?

要約すると

私は思いつきたい:

fortune1-パッケージをFAQアイテムなどのより一般的なエントリに拡張するR構造(おそらくクラス)の優れた設計

2- 新しい FAQ を入力するためのより便利な形式 (現在の texinfo 形式よりも)

3- 既存の FAQ を新しい構造 (1) に、および/または新しい入力形式 (2) を R 構造に変換する、R または他の言語 (bison?) で記述されたパーサー。

更新 2: 報奨金期間の最後の 2 日間で、私は 2 つの回答を得ました。どちらも興味深いが、まったく異なるものでした。質問は非常に広大であるため(おそらく不適切な設定)、完全な解決策を提供する回答はありません。したがって、私は(とにかく今のところ)回答を受け入れません. 賞金については、賞金が期限切れになる前に最も賛成票を投じられた回答に帰属させます。もっと均等に分割する方法があればいいのにと思います。

4

2 に答える 2

8

(これはポイント 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")
于 2012-06-02T10:30:00.127 に答える
6

私はあなたの目標が少しわかりません。おそらく、R ルーチンを記述してドキュメントから情報をより適切に抽出できるように、R 関連のすべてのドキュメントを R が操作できる形式に変換する必要があるようです。

ここには 3 つの仮定があるようです。

1) これらの異なるドキュメント形式 (texinfo、RD ファイルなど) を、いくつかの暗黙の統一構造とセマンティクスを持つ (私が強調する) 標準形式に簡単に変換できること。
それらすべてを 1 つの構造にマップできない場合は、タイプごと、おそらく個々のドキュメントごとに個別の R ツールを作成する必要があり、変換後のツールの作業がメリットを圧倒してしまうからです。

2) R は、そのような文書処理ツールを作成するのに適した言語であること。あなたは R で働いていて、R をよりよく扱うための情報を得るために開発環境を「離れる」ことを考えたくないので、R に少し偏っていると思われます。私は R の専門家ではありませんが、R は主に数値言語であり、文字列の処理、パターン認識、自然言語の解析または推論について特別な支援を提供していないと思います。これらすべてが重要な役割を果たすと期待しています。大部分が自然言語を含む変換されたドキュメントから情報を抽出する際に。特定の代替言語 (Prolog??) を提案しているわけではありませんが、通常の形式への変換 (タスク 1) に成功した場合は、処理対象の言語を慎重に選択することをお勧めします。

3) それらの構造から有用な情報を実際に抽出できること。図書館学は 20 世紀が推し進めようとしたものでした。今、私たちは皆、「情報検索」と「データ融合」の方法に夢中になっています。しかし、実際には、非公式文書についての推論は、それを行う試みのほとんどを打ち負かしてきました. 生のテキストを整理し、そこから深い価値を抽出する明白なシステムはありません (IBM の Jeopardy 賞を受賞した Watson システムは明らかな例外ですが、それでも Watson が何を「知っている」かは明確ではありません。Watson に質問に答えてもらいたいですか?」外科医はあなたをナイフで開けるべきですか?" どれだけ生のテキストを渡したとしても) ポイントは、データの変換に成功する可能性があるということですが、データを使って何ができるかは明らかではありません。

とはいえ、テキストに関するほとんどのマークアップ システムには、マークアップ構造と生のテキストがあります。それらをツリーのような構造 (または、特定のものが信頼できる相互参照であると仮定する場合はグラフのような構造; texinfo には確かにこれらがあります) にそれらを「解析」できます。XML は、そのような解析済み構造のキャリアとして広くプッシュされており、任意のツリーまたはグラフを表すことができるため、... OK ... そのようなツリーまたはグラフをキャプチャすることができます。[その後、人々は RDF や OWL、または XML を使用する他のナレッジ エンコーディング システムをプッシュしますが、これによって問題が変わるわけではありません。R とは無関係に正規のターゲットを選択します]。したがって、本当に必要なのは、さまざまなマークアップされた構造 (texinfo、RD ファイル) を読み取り、XML または同等のツリー/グラフを吐き出すものです。ここで、N 個のマークアップ スタイルすべてをカバーするために個別の O(N) パーサーを構築する運命にあると思います。そうでなければ、ツールは値のマークアップ (したがって解析) が何であるかをどのように知るのでしょうか? (マークアップの説明が与えられたときにマークアップされたドキュメントを読み取ることができるシステムを想像できますが、これでも O(N) です: 誰かがまだマークアップを説明する必要があります)。この構文解析はこの統一された表記法に対するものであり、簡単に構築された R パーサーを使用して XML を読み取ることができます (まだ存在しない場合)。R が正しい答えでない場合は、正しい答えが何であれこれを解析します。 .

任意の言語のパーサーと解析ツリー (さらには解析ツリーから他の形式へのトランスレーター) を構築するのに役立つツールがあります。 ANTLRは1つです。それは十分な数の人々によって使用されているため、誰かがすでに構築した texinfo パーサーを偶然見つけることさえあるかもしれません. 私たちのDMS ソフトウェア リエンジニアリング ツールキットは別のものです。解析後の DMS は、解析ツリーを含む XML ドキュメントを直接エクスポートします (ただし、理想的には、必ずしも均一な表現になるとは限りません)。これらのツールを使用すると、マークアップの読み取りと XML での表現が比較的簡単になります。

しかし、あなたの本当の問題は、何を抽出/実行したいかを決定し、それを行う方法を見つけることだと思います。後者の方法について明確な考えがない限り、事前にすべてのパーサーを実行することは、見返りが不明確な多くの作業のように思えます。より単純な目標 (「管理と拡張」ですが、これらの言葉は多くを隠すことができます) を持っているかもしれません。

于 2012-06-02T02:21:30.687 に答える