Remark(4)mdast-util-to-nlcstとparse-latin

mdast-util-to-nlcst and parse-latin


2020/09/03
藤田昭人


前回 の調査ではmdast構文木からnlcst構文木への複製は mdast-util-to-nlcst で実装されていることがわかりました。 本稿ではmdast-util-to-nlcst と、その下位にある parse-englishparse-dutchparse-latin の関係について調べてみます。

実は日本語文のパーサーというと 「既存の形態素解析機をどのように組み込むか?」 という問題にばかり気を取られていたのですが、調べてみると 「nlcst 構文木をどのように(再)構築するか?」 の方が問題が多いことに気付かされました。 実際、英文と同様のnlcst 構文木が再現できないと、 remark としての使い勝手に影響がありますもんね。 本稿ではそのあたりの解決策を紹介します。


mdast-util-to-nlcst:mdast から nlcst に変換するためのユーティリティ

前回 説明したように mdast-util-to-nlcstremark-retext が提供する mdast 構文木からnlcst 構文木への複製を行う処理の核です。 API は次のエントリーだけ。

toNlcst(tree, file, Parser[, options])

mdast構文木 を対応する仮想ファイルを持つ nlcst に変換します。

パラメータ
tree

位置情報を持つmdast内の構文木MdastNode)。

file

仮想ファイル(VFile

parser

nlcst パーサー(Function)。 例えば、parse-englishparse-dutchparse-latin など。

options.ignore

無視する types のリスト(Array.<string>)。

`table'、'tableRow'、'tableCell' は常に無視されます。

options.source

ソースとしてマークするtypesのリスト(Array.<string>)。

`inlineCode' は常にソースとしてマークされます。

リターン

NlcstNode.

引数 tree として mdast 構文木を、 引数 file には元データ、 そして引数 Parser にパーサーコードを渡すと、 戻り値に nlcst 構文木が返ってきます。

ソースコード

mdast-util-to-nlcst のページには プレーン・テキストを unifiedプラグイン・チェインを 使わないでパースする次のサンプルコードが掲載されています (ちょこっとだけ修正しましたが)。

var toNLCST = require('mdast-util-to-nlcst')
var inspect = require('unist-util-inspect')
var English = require('parse-english')
var remark = require('remark')
var vfile = require('vfile')
var file = vfile('Someone said Hello.')
var tree = remark().parse(file)
console.log("\n# MDAST")
console.log(inspect(tree))
var nlcst = toNLCST(tree, file, English)
console.log("\n# NLCST")
console.log(inspect(nlcst))

このコードを実行すると次のようになります。

$ npm install mdast-util-to-nlcst unist-util-inspect parse-english remark vfile
 ・・・
$ node example.js

# MDAST
root[1] (1:1-1:20, 0-19)
└─0 paragraph[1] (1:1-1:20, 0-19)
    └─0 text "Someone said Hello." (1:1-1:20, 0-19)

# NLCST
RootNode[1] (1:1-1:20, 0-19)
└─0 ParagraphNode[1] (1:1-1:20, 0-19)
    └─0 SentenceNode[6] (1:1-1:20, 0-19)
        ├─0 WordNode[1] (1:1-1:8, 0-7)
        │   └─0 TextNode "Someone" (1:1-1:8, 0-7)
        ├─1 WhiteSpaceNode " " (1:8-1:9, 7-8)
        ├─2 WordNode[1] (1:9-1:13, 8-12)
        │   └─0 TextNode "said" (1:9-1:13, 8-12)
        ├─3 WhiteSpaceNode " " (1:13-1:14, 12-13)
        ├─4 WordNode[1] (1:14-1:19, 13-18)
        │   └─0 TextNode "Hello" (1:14-1:19, 13-18)
        └─5 PunctuationNode "." (1:19-1:20, 18-19)
$ 

Markdown 由来の MDAST とそれを変換した NLCST の違いに注目してください。
MDAST がパラグラフ単位の構文木であるのに対し、 NLCST はワード単位の構文木になっています。
これが Natural Language Concrete Syntax Tree と名付けられている理由なんでしょうね。


parse-latin:nlcst ノードを生成するretextのためのラテン文字言語パーサー

mdast-util-to-nlcstからコールされるパーサーは 引数で明示的に指定してやる必要があります。ドキュメントを見ると parse-englishparse-dutchparse-latin の3種類があるので、当初は何となく「我々は parse-english なのかな?」 などと安易に考えていたのですが…

実は3つとも javascript のクラスとして記述されています。 3者の関係は parse-latin が基底クラスで、 ラテン文字言語向けの汎用パーサーとして実装されています。 残る2つは parse-latin の派生クラスでして、 各々各言語固有の略号に対する例外的な処理以外は parse-latin に依存しているようです。

なので…

nlcst 構文木の(再)構築方法を調べる場合は、 parse-latin に集中して良さそうです。
API は次のとおりです。

ParseLatin#tokenize(value)

valuestring)を、文字と数字(単語)、空白、その他すべて(句読点)にトークン化します。 返されるノードは、段落や文章のないフラットなリストです。

リターン

Array.<Node> — Nodes.

ParseLatin#parse(value)

valuestring)をNLCST構文木トークン化します。 返されるノードは、段落と文を含むRootNodeです。

リターン

Node — Root node.

以上2つが公式APIなんですが…
mdast-util-to-nlcst では、 parse-latin の隠しAPIをもうひとつコールしています。

ParseLatin#tokenizeWhiteSpace(value)

valuestring)で渡される空白、空行("\n\n")などをノード化します。 返されるノードは、WhiteSpaceNodeです。

リターン

Node — WhiteSpace node.

このAPIは主に mdast で検知されたパラグラフ間に WhiteSpaceNode を差し込むためにコールされているように見えます。

どうやら 「ParseLatin#parseトークン化するテキストを渡すとNLCST構文木が返ってくる」 という単機能のパーサーではなさそうです。


parse-wrapper:パーサーの挙動を調べるためのラッパー

…という事で

次のようなパーサーのラッパーを書いて、パーサーの呼び出し順序と 引数、戻り値をチェックしてみることにしました。

まずは呼び出し順序の確認から…

var Latin = require('parse-latin');
var localParser;
var localTokenizeWhiteSpace;

var ParseWrapper = function() {
  console.log("\n### ParseWrapper()");
  localParser = new Latin();
  localTokenizeWhiteSpace = localParser.tokenizeWhiteSpace;
}

ParseWrapper.prototype.parse = function(value) {
  console.log("\n### ParseWrapper.prototype.parse");
  var ret = localParser.parse(value);
  return(ret);
}

ParseWrapper.prototype.tokenize = function(value) {
  console.log("\n### ParseWrapper.prototype.tokenize");
  var ret = localParser.tokenize(value);
  return(ret);
}

ParseWrapper.prototype.tokenizeWhiteSpace = function() {
  console.log("\n### ParseWrapper.prototype.tokenizeWhiteSpace");
  var ret = localTokenizeWhiteSpace.apply(this, arguments);
  return(ret);
}

module.exports = ParseWrapper;

テストプログラムはこんな感じ。

var toNLCST = require('mdast-util-to-nlcst');
var inspect = require('unist-util-inspect');
var English = require('./parse-wrapper');
var remark = require('remark');
var vfile = require('to-vfile');

var file = vfile.readSync('english.md',  'utf8');
var tree = remark().parse(file);
var nlcst = toNLCST(tree, file, English);

これを実行すると次のようになります*1

$ cat english.md
# Twenty Years of Berkeley Unix: Twenty Years of Berkeley Unix From AT&T-Owned to Freely Redistributable

Marshall Kirk McKusick

## Early History

Ken Thompson and Dennis Ritchie presented the first Unix paper at the Symposium on Operating Systems Principles at Purdue University in November 1973. Professor Bob Fabry, of the University of California at Berkeley, was in attendance and immediately became interested in obtaining a copy of the system to experiment with at Berkeley.
$ node example.js

### ParseWrapper()

### ParseWrapper.prototype.tokenize

### ParseWrapper.prototype.tokenizeWhiteSpace

### ParseWrapper.prototype.tokenize

### ParseWrapper.prototype.tokenizeWhiteSpace

### ParseWrapper.prototype.tokenize

### ParseWrapper.prototype.tokenizeWhiteSpace

### ParseWrapper.prototype.tokenize

### ParseWrapper.prototype.parse
$

なるほど…

なお、引数と戻り値の確認は長くなりそうなので 末尾 に掲載します。


parse-japanese に向けて

ラッパーを使って、パーサーの呼び出し順序と引数、戻り値をチェックしてみましたが、 整理すると parse-latin の振る舞いは次のようになりそうです。

  1. mdast 構文木を走査してトークン化を行う
    • ParseLatin#tokenize:プレーン・テキストをトークン列に分割
    • ParseLatin#tokenizeWhiteSpaceパラダイム間を検出したら WhiteSpaceNode を挿入
    • いずれもフラットな配列に順次格納していく
  2. 配列に格納したトークンデータをParseLatin#parse を渡しnlcst 構文木を(再)構成
    • RootNodeParagraphNodeSentenceNode を挿入

ここまで調べたところで、ふと閃いたのが 「ParseLatin#tokenizeの部分だけ、日本語の形態素解析に差し替えたら parse-japanese にならない?」 ってことでした。

そこで次回はこのアプローチで parse-japanese を試作してみます。

以上

$ node example.js
root[5] (1:1-15:1, 0-962)
├─0 heading[1] (1:1-1:105, 0-104)
│   │ depth: 1
│   └─0 text "Twenty Years of Berkeley Unix: Twenty Years of Berkeley Unix From AT&T-Owned to Freely Redistributable" (1:3-1:105, 2-104)
├─1 paragraph[1] (5:1-5:23, 108-130)
│   └─0 text "Marshall Kirk McKusick" (5:1-5:23, 108-130)
├─2 heading[1] (9:1-9:17, 134-150)
│   │ depth: 2
│   └─0 text "Early History" (9:4-9:17, 137-150)
├─3 paragraph[1] (11:1-11:335, 152-486)
│   └─0 text "Ken Thompson and Dennis Ritchie presented the first Unix paper at the Symposium on Operating Systems Principles at Purdue University in November 1973. Professor Bob Fabry, of the University of California at Berkeley, was in attendance and immediately became interested in obtaining a copy of the system to experiment with at Berkeley." (11:1-11:335, 152-486)
└─4 paragraph[1] (13:1-13:473, 488-960)
    └─0 text "At the time, Berkeley had only large mainframe computer systems doing batch processing, so the first order of business was to get a PDP-11/45 suitable for running with the then-current Version 4 of Unix. The Computer Science Department at Berkeley, together with the Mathematics Department and the Statistics Department, were able to jointly purchase a PDP-11/45. In January 1974, a Version 4 tape was delivered and Unix was installed by graduate student Keith Standiford." (13:1-13:473, 488-960)

### ParseWrapper.prototype.parse

#### in
├─0 WordNode[1] (1:3-1:9, 2-8)
│   └─0 TextNode "Twenty" (1:3-1:9, 2-8)
├─1 WhiteSpaceNode " " (1:9-1:10, 8-9)
├─2 WordNode[1] (1:10-1:15, 9-14)
│   └─0 TextNode "Years" (1:10-1:15, 9-14)
├─3 WhiteSpaceNode " " (1:15-1:16, 14-15)
├─4 WordNode[1] (1:16-1:18, 15-17)
│   └─0 TextNode "of" (1:16-1:18, 15-17)
├─5 WhiteSpaceNode " " (1:18-1:19, 17-18)
├─6 WordNode[1] (1:19-1:27, 18-26)
│   └─0 TextNode "Berkeley" (1:19-1:27, 18-26)
├─7 WhiteSpaceNode " " (1:27-1:28, 26-27)
├─8 WordNode[1] (1:28-1:32, 27-31)
│   └─0 TextNode "Unix" (1:28-1:32, 27-31)
├─9 PunctuationNode ":" (1:32-1:33, 31-32)
├─10 WhiteSpaceNode " " (1:33-1:34, 32-33)
├─11 WordNode[1] (1:34-1:40, 33-39)
│   └─0 TextNode "Twenty" (1:34-1:40, 33-39)
├─12 WhiteSpaceNode " " (1:40-1:41, 39-40)
├─13 WordNode[1] (1:41-1:46, 40-45)
│   └─0 TextNode "Years" (1:41-1:46, 40-45)
├─14 WhiteSpaceNode " " (1:46-1:47, 45-46)
├─15 WordNode[1] (1:47-1:49, 46-48)
│   └─0 TextNode "of" (1:47-1:49, 46-48)
├─16 WhiteSpaceNode " " (1:49-1:50, 48-49)
├─17 WordNode[1] (1:50-1:58, 49-57)
│   └─0 TextNode "Berkeley" (1:50-1:58, 49-57)
├─18 WhiteSpaceNode " " (1:58-1:59, 57-58)
├─19 WordNode[1] (1:59-1:63, 58-62)
│   └─0 TextNode "Unix" (1:59-1:63, 58-62)
├─20 WhiteSpaceNode " " (1:63-1:64, 62-63)
├─21 WordNode[1] (1:64-1:68, 63-67)
│   └─0 TextNode "From" (1:64-1:68, 63-67)
├─22 WhiteSpaceNode " " (1:68-1:69, 67-68)
├─23 WordNode[1] (1:69-1:71, 68-70)
│   └─0 TextNode "AT" (1:69-1:71, 68-70)
├─24 SymbolNode "&" (1:71-1:72, 70-71)
├─25 WordNode[1] (1:72-1:73, 71-72)
│   └─0 TextNode "T" (1:72-1:73, 71-72)
├─26 PunctuationNode "-" (1:73-1:74, 72-73)
├─27 WordNode[1] (1:74-1:79, 73-78)
│   └─0 TextNode "Owned" (1:74-1:79, 73-78)
├─28 WhiteSpaceNode " " (1:79-1:80, 78-79)
├─29 WordNode[1] (1:80-1:82, 79-81)
│   └─0 TextNode "to" (1:80-1:82, 79-81)
├─30 WhiteSpaceNode " " (1:82-1:83, 81-82)
├─31 WordNode[1] (1:83-1:89, 82-88)
│   └─0 TextNode "Freely" (1:83-1:89, 82-88)
├─32 WhiteSpaceNode " " (1:89-1:90, 88-89)
├─33 WordNode[1] (1:90-1:105, 89-104)
│   └─0 TextNode "Redistributable" (1:90-1:105, 89-104)
├─34 WhiteSpaceNode "\n\n\n\n" (1:105-5:1, 104-108)
├─35 WordNode[1] (5:1-5:9, 108-116)
│   └─0 TextNode "Marshall" (5:1-5:9, 108-116)
├─36 WhiteSpaceNode " " (5:9-5:10, 116-117)
├─37 WordNode[1] (5:10-5:14, 117-121)
│   └─0 TextNode "Kirk" (5:10-5:14, 117-121)
├─38 WhiteSpaceNode " " (5:14-5:15, 121-122)
├─39 WordNode[1] (5:15-5:23, 122-130)
│   └─0 TextNode "McKusick" (5:15-5:23, 122-130)
├─40 WhiteSpaceNode "\n\n\n\n" (5:23-9:1, 130-134)
├─41 WordNode[1] (9:4-9:9, 137-142)
│   └─0 TextNode "Early" (9:4-9:9, 137-142)
├─42 WhiteSpaceNode " " (9:9-9:10, 142-143)
├─43 WordNode[1] (9:10-9:17, 143-150)
│   └─0 TextNode "History" (9:10-9:17, 143-150)
├─44 WhiteSpaceNode "\n\n" (9:17-11:1, 150-152)
├─45 WordNode[1] (11:1-11:4, 152-155)
│   └─0 TextNode "Ken" (11:1-11:4, 152-155)
├─46 WhiteSpaceNode " " (11:4-11:5, 155-156)
├─47 WordNode[1] (11:5-11:13, 156-164)
│   └─0 TextNode "Thompson" (11:5-11:13, 156-164)
├─48 WhiteSpaceNode " " (11:13-11:14, 164-165)
├─49 WordNode[1] (11:14-11:17, 165-168)
│   └─0 TextNode "and" (11:14-11:17, 165-168)
├─50 WhiteSpaceNode " " (11:17-11:18, 168-169)
├─51 WordNode[1] (11:18-11:24, 169-175)
│   └─0 TextNode "Dennis" (11:18-11:24, 169-175)
├─52 WhiteSpaceNode " " (11:24-11:25, 175-176)
├─53 WordNode[1] (11:25-11:32, 176-183)
│   └─0 TextNode "Ritchie" (11:25-11:32, 176-183)
├─54 WhiteSpaceNode " " (11:32-11:33, 183-184)
├─55 WordNode[1] (11:33-11:42, 184-193)
│   └─0 TextNode "presented" (11:33-11:42, 184-193)
├─56 WhiteSpaceNode " " (11:42-11:43, 193-194)
├─57 WordNode[1] (11:43-11:46, 194-197)
│   └─0 TextNode "the" (11:43-11:46, 194-197)
├─58 WhiteSpaceNode " " (11:46-11:47, 197-198)
├─59 WordNode[1] (11:47-11:52, 198-203)
│   └─0 TextNode "first" (11:47-11:52, 198-203)
├─60 WhiteSpaceNode " " (11:52-11:53, 203-204)
├─61 WordNode[1] (11:53-11:57, 204-208)
│   └─0 TextNode "Unix" (11:53-11:57, 204-208)
├─62 WhiteSpaceNode " " (11:57-11:58, 208-209)
├─63 WordNode[1] (11:58-11:63, 209-214)
│   └─0 TextNode "paper" (11:58-11:63, 209-214)
├─64 WhiteSpaceNode " " (11:63-11:64, 214-215)
├─65 WordNode[1] (11:64-11:66, 215-217)
│   └─0 TextNode "at" (11:64-11:66, 215-217)
├─66 WhiteSpaceNode " " (11:66-11:67, 217-218)
├─67 WordNode[1] (11:67-11:70, 218-221)
│   └─0 TextNode "the" (11:67-11:70, 218-221)
├─68 WhiteSpaceNode " " (11:70-11:71, 221-222)
├─69 WordNode[1] (11:71-11:80, 222-231)
│   └─0 TextNode "Symposium" (11:71-11:80, 222-231)
├─70 WhiteSpaceNode " " (11:80-11:81, 231-232)
├─71 WordNode[1] (11:81-11:83, 232-234)
│   └─0 TextNode "on" (11:81-11:83, 232-234)
├─72 WhiteSpaceNode " " (11:83-11:84, 234-235)
├─73 WordNode[1] (11:84-11:93, 235-244)
│   └─0 TextNode "Operating" (11:84-11:93, 235-244)
├─74 WhiteSpaceNode " " (11:93-11:94, 244-245)
├─75 WordNode[1] (11:94-11:101, 245-252)
│   └─0 TextNode "Systems" (11:94-11:101, 245-252)
├─76 WhiteSpaceNode " " (11:101-11:102, 252-253)
├─77 WordNode[1] (11:102-11:112, 253-263)
│   └─0 TextNode "Principles" (11:102-11:112, 253-263)
├─78 WhiteSpaceNode " " (11:112-11:113, 263-264)
├─79 WordNode[1] (11:113-11:115, 264-266)
│   └─0 TextNode "at" (11:113-11:115, 264-266)
├─80 WhiteSpaceNode " " (11:115-11:116, 266-267)
├─81 WordNode[1] (11:116-11:122, 267-273)
│   └─0 TextNode "Purdue" (11:116-11:122, 267-273)
├─82 WhiteSpaceNode " " (11:122-11:123, 273-274)
├─83 WordNode[1] (11:123-11:133, 274-284)
│   └─0 TextNode "University" (11:123-11:133, 274-284)
├─84 WhiteSpaceNode " " (11:133-11:134, 284-285)
├─85 WordNode[1] (11:134-11:136, 285-287)
│   └─0 TextNode "in" (11:134-11:136, 285-287)
├─86 WhiteSpaceNode " " (11:136-11:137, 287-288)
├─87 WordNode[1] (11:137-11:145, 288-296)
│   └─0 TextNode "November" (11:137-11:145, 288-296)
├─88 WhiteSpaceNode " " (11:145-11:146, 296-297)
├─89 WordNode[1] (11:146-11:150, 297-301)
│   └─0 TextNode "1973" (11:146-11:150, 297-301)
├─90 PunctuationNode "." (11:150-11:151, 301-302)
├─91 WhiteSpaceNode " " (11:151-11:152, 302-303)
├─92 WordNode[1] (11:152-11:161, 303-312)
│   └─0 TextNode "Professor" (11:152-11:161, 303-312)
├─93 WhiteSpaceNode " " (11:161-11:162, 312-313)
├─94 WordNode[1] (11:162-11:165, 313-316)
│   └─0 TextNode "Bob" (11:162-11:165, 313-316)
├─95 WhiteSpaceNode " " (11:165-11:166, 316-317)
├─96 WordNode[1] (11:166-11:171, 317-322)
│   └─0 TextNode "Fabry" (11:166-11:171, 317-322)
├─97 PunctuationNode "," (11:171-11:172, 322-323)
├─98 WhiteSpaceNode " " (11:172-11:173, 323-324)
├─99 WordNode[1] (11:173-11:175, 324-326)
│   └─0 TextNode "of" (11:173-11:175, 324-326)
├─100 WhiteSpaceNode " " (11:175-11:176, 326-327)
├─101 WordNode[1] (11:176-11:179, 327-330)
│   └─0 TextNode "the" (11:176-11:179, 327-330)
├─102 WhiteSpaceNode " " (11:179-11:180, 330-331)
├─103 WordNode[1] (11:180-11:190, 331-341)
│   └─0 TextNode "University" (11:180-11:190, 331-341)
├─104 WhiteSpaceNode " " (11:190-11:191, 341-342)
├─105 WordNode[1] (11:191-11:193, 342-344)
│   └─0 TextNode "of" (11:191-11:193, 342-344)
├─106 WhiteSpaceNode " " (11:193-11:194, 344-345)
├─107 WordNode[1] (11:194-11:204, 345-355)
│   └─0 TextNode "California" (11:194-11:204, 345-355)
├─108 WhiteSpaceNode " " (11:204-11:205, 355-356)
├─109 WordNode[1] (11:205-11:207, 356-358)
│   └─0 TextNode "at" (11:205-11:207, 356-358)
├─110 WhiteSpaceNode " " (11:207-11:208, 358-359)
├─111 WordNode[1] (11:208-11:216, 359-367)
│   └─0 TextNode "Berkeley" (11:208-11:216, 359-367)
├─112 PunctuationNode "," (11:216-11:217, 367-368)
├─113 WhiteSpaceNode " " (11:217-11:218, 368-369)
├─114 WordNode[1] (11:218-11:221, 369-372)
│   └─0 TextNode "was" (11:218-11:221, 369-372)
├─115 WhiteSpaceNode " " (11:221-11:222, 372-373)
├─116 WordNode[1] (11:222-11:224, 373-375)
│   └─0 TextNode "in" (11:222-11:224, 373-375)
├─117 WhiteSpaceNode " " (11:224-11:225, 375-376)
├─118 WordNode[1] (11:225-11:235, 376-386)
│   └─0 TextNode "attendance" (11:225-11:235, 376-386)
├─119 WhiteSpaceNode " " (11:235-11:236, 386-387)
├─120 WordNode[1] (11:236-11:239, 387-390)
│   └─0 TextNode "and" (11:236-11:239, 387-390)
├─121 WhiteSpaceNode " " (11:239-11:240, 390-391)
├─122 WordNode[1] (11:240-11:251, 391-402)
│   └─0 TextNode "immediately" (11:240-11:251, 391-402)
├─123 WhiteSpaceNode " " (11:251-11:252, 402-403)
├─124 WordNode[1] (11:252-11:258, 403-409)
│   └─0 TextNode "became" (11:252-11:258, 403-409)
├─125 WhiteSpaceNode " " (11:258-11:259, 409-410)
├─126 WordNode[1] (11:259-11:269, 410-420)
│   └─0 TextNode "interested" (11:259-11:269, 410-420)
├─127 WhiteSpaceNode " " (11:269-11:270, 420-421)
├─128 WordNode[1] (11:270-11:272, 421-423)
│   └─0 TextNode "in" (11:270-11:272, 421-423)
├─129 WhiteSpaceNode " " (11:272-11:273, 423-424)
├─130 WordNode[1] (11:273-11:282, 424-433)
│   └─0 TextNode "obtaining" (11:273-11:282, 424-433)
├─131 WhiteSpaceNode " " (11:282-11:283, 433-434)
├─132 WordNode[1] (11:283-11:284, 434-435)
│   └─0 TextNode "a" (11:283-11:284, 434-435)
├─133 WhiteSpaceNode " " (11:284-11:285, 435-436)
├─134 WordNode[1] (11:285-11:289, 436-440)
│   └─0 TextNode "copy" (11:285-11:289, 436-440)
├─135 WhiteSpaceNode " " (11:289-11:290, 440-441)
├─136 WordNode[1] (11:290-11:292, 441-443)
│   └─0 TextNode "of" (11:290-11:292, 441-443)
├─137 WhiteSpaceNode " " (11:292-11:293, 443-444)
├─138 WordNode[1] (11:293-11:296, 444-447)
│   └─0 TextNode "the" (11:293-11:296, 444-447)
├─139 WhiteSpaceNode " " (11:296-11:297, 447-448)
├─140 WordNode[1] (11:297-11:303, 448-454)
│   └─0 TextNode "system" (11:297-11:303, 448-454)
├─141 WhiteSpaceNode " " (11:303-11:304, 454-455)
├─142 WordNode[1] (11:304-11:306, 455-457)
│   └─0 TextNode "to" (11:304-11:306, 455-457)
├─143 WhiteSpaceNode " " (11:306-11:307, 457-458)
├─144 WordNode[1] (11:307-11:317, 458-468)
│   └─0 TextNode "experiment" (11:307-11:317, 458-468)
├─145 WhiteSpaceNode " " (11:317-11:318, 468-469)
├─146 WordNode[1] (11:318-11:322, 469-473)
│   └─0 TextNode "with" (11:318-11:322, 469-473)
├─147 WhiteSpaceNode " " (11:322-11:323, 473-474)
├─148 WordNode[1] (11:323-11:325, 474-476)
│   └─0 TextNode "at" (11:323-11:325, 474-476)
├─149 WhiteSpaceNode " " (11:325-11:326, 476-477)
├─150 WordNode[1] (11:326-11:334, 477-485)
│   └─0 TextNode "Berkeley" (11:326-11:334, 477-485)
├─151 PunctuationNode "." (11:334-11:335, 485-486)
├─152 WhiteSpaceNode "\n\n" (11:335-13:1, 486-488)
├─153 WordNode[1] (13:1-13:3, 488-490)
│   └─0 TextNode "At" (13:1-13:3, 488-490)
├─154 WhiteSpaceNode " " (13:3-13:4, 490-491)
├─155 WordNode[1] (13:4-13:7, 491-494)
│   └─0 TextNode "the" (13:4-13:7, 491-494)
├─156 WhiteSpaceNode " " (13:7-13:8, 494-495)
├─157 WordNode[1] (13:8-13:12, 495-499)
│   └─0 TextNode "time" (13:8-13:12, 495-499)
├─158 PunctuationNode "," (13:12-13:13, 499-500)
├─159 WhiteSpaceNode " " (13:13-13:14, 500-501)
├─160 WordNode[1] (13:14-13:22, 501-509)
│   └─0 TextNode "Berkeley" (13:14-13:22, 501-509)
├─161 WhiteSpaceNode " " (13:22-13:23, 509-510)
├─162 WordNode[1] (13:23-13:26, 510-513)
│   └─0 TextNode "had" (13:23-13:26, 510-513)
├─163 WhiteSpaceNode " " (13:26-13:27, 513-514)
├─164 WordNode[1] (13:27-13:31, 514-518)
│   └─0 TextNode "only" (13:27-13:31, 514-518)
├─165 WhiteSpaceNode " " (13:31-13:32, 518-519)
├─166 WordNode[1] (13:32-13:37, 519-524)
│   └─0 TextNode "large" (13:32-13:37, 519-524)
├─167 WhiteSpaceNode " " (13:37-13:38, 524-525)
├─168 WordNode[1] (13:38-13:47, 525-534)
│   └─0 TextNode "mainframe" (13:38-13:47, 525-534)
├─169 WhiteSpaceNode " " (13:47-13:48, 534-535)
├─170 WordNode[1] (13:48-13:56, 535-543)
│   └─0 TextNode "computer" (13:48-13:56, 535-543)
├─171 WhiteSpaceNode " " (13:56-13:57, 543-544)
├─172 WordNode[1] (13:57-13:64, 544-551)
│   └─0 TextNode "systems" (13:57-13:64, 544-551)
├─173 WhiteSpaceNode " " (13:64-13:65, 551-552)
├─174 WordNode[1] (13:65-13:70, 552-557)
│   └─0 TextNode "doing" (13:65-13:70, 552-557)
├─175 WhiteSpaceNode " " (13:70-13:71, 557-558)
├─176 WordNode[1] (13:71-13:76, 558-563)
│   └─0 TextNode "batch" (13:71-13:76, 558-563)
├─177 WhiteSpaceNode " " (13:76-13:77, 563-564)
├─178 WordNode[1] (13:77-13:87, 564-574)
│   └─0 TextNode "processing" (13:77-13:87, 564-574)
├─179 PunctuationNode "," (13:87-13:88, 574-575)
├─180 WhiteSpaceNode " " (13:88-13:89, 575-576)
├─181 WordNode[1] (13:89-13:91, 576-578)
│   └─0 TextNode "so" (13:89-13:91, 576-578)
├─182 WhiteSpaceNode " " (13:91-13:92, 578-579)
├─183 WordNode[1] (13:92-13:95, 579-582)
│   └─0 TextNode "the" (13:92-13:95, 579-582)
├─184 WhiteSpaceNode " " (13:95-13:96, 582-583)
├─185 WordNode[1] (13:96-13:101, 583-588)
│   └─0 TextNode "first" (13:96-13:101, 583-588)
├─186 WhiteSpaceNode " " (13:101-13:102, 588-589)
├─187 WordNode[1] (13:102-13:107, 589-594)
│   └─0 TextNode "order" (13:102-13:107, 589-594)
├─188 WhiteSpaceNode " " (13:107-13:108, 594-595)
├─189 WordNode[1] (13:108-13:110, 595-597)
│   └─0 TextNode "of" (13:108-13:110, 595-597)
├─190 WhiteSpaceNode " " (13:110-13:111, 597-598)
├─191 WordNode[1] (13:111-13:119, 598-606)
│   └─0 TextNode "business" (13:111-13:119, 598-606)
├─192 WhiteSpaceNode " " (13:119-13:120, 606-607)
├─193 WordNode[1] (13:120-13:123, 607-610)
│   └─0 TextNode "was" (13:120-13:123, 607-610)
├─194 WhiteSpaceNode " " (13:123-13:124, 610-611)
├─195 WordNode[1] (13:124-13:126, 611-613)
│   └─0 TextNode "to" (13:124-13:126, 611-613)
├─196 WhiteSpaceNode " " (13:126-13:127, 613-614)
├─197 WordNode[1] (13:127-13:130, 614-617)
│   └─0 TextNode "get" (13:127-13:130, 614-617)
├─198 WhiteSpaceNode " " (13:130-13:131, 617-618)
├─199 WordNode[1] (13:131-13:132, 618-619)
│   └─0 TextNode "a" (13:131-13:132, 618-619)
├─200 WhiteSpaceNode " " (13:132-13:133, 619-620)
├─201 WordNode[1] (13:133-13:136, 620-623)
│   └─0 TextNode "PDP" (13:133-13:136, 620-623)
├─202 PunctuationNode "-" (13:136-13:137, 623-624)
├─203 WordNode[1] (13:137-13:139, 624-626)
│   └─0 TextNode "11" (13:137-13:139, 624-626)
├─204 PunctuationNode "/" (13:139-13:140, 626-627)
├─205 WordNode[1] (13:140-13:142, 627-629)
│   └─0 TextNode "45" (13:140-13:142, 627-629)
├─206 WhiteSpaceNode " " (13:142-13:143, 629-630)
├─207 WordNode[1] (13:143-13:151, 630-638)
│   └─0 TextNode "suitable" (13:143-13:151, 630-638)
├─208 WhiteSpaceNode " " (13:151-13:152, 638-639)
├─209 WordNode[1] (13:152-13:155, 639-642)
│   └─0 TextNode "for" (13:152-13:155, 639-642)
├─210 WhiteSpaceNode " " (13:155-13:156, 642-643)
├─211 WordNode[1] (13:156-13:163, 643-650)
│   └─0 TextNode "running" (13:156-13:163, 643-650)
├─212 WhiteSpaceNode " " (13:163-13:164, 650-651)
├─213 WordNode[1] (13:164-13:168, 651-655)
│   └─0 TextNode "with" (13:164-13:168, 651-655)
├─214 WhiteSpaceNode " " (13:168-13:169, 655-656)
├─215 WordNode[1] (13:169-13:172, 656-659)
│   └─0 TextNode "the" (13:169-13:172, 656-659)
├─216 WhiteSpaceNode " " (13:172-13:173, 659-660)
├─217 WordNode[1] (13:173-13:177, 660-664)
│   └─0 TextNode "then" (13:173-13:177, 660-664)
├─218 PunctuationNode "-" (13:177-13:178, 664-665)
├─219 WordNode[1] (13:178-13:185, 665-672)
│   └─0 TextNode "current" (13:178-13:185, 665-672)
├─220 WhiteSpaceNode " " (13:185-13:186, 672-673)
├─221 WordNode[1] (13:186-13:193, 673-680)
│   └─0 TextNode "Version" (13:186-13:193, 673-680)
├─222 WhiteSpaceNode " " (13:193-13:194, 680-681)
├─223 WordNode[1] (13:194-13:195, 681-682)
│   └─0 TextNode "4" (13:194-13:195, 681-682)
├─224 WhiteSpaceNode " " (13:195-13:196, 682-683)
├─225 WordNode[1] (13:196-13:198, 683-685)
│   └─0 TextNode "of" (13:196-13:198, 683-685)
├─226 WhiteSpaceNode " " (13:198-13:199, 685-686)
├─227 WordNode[1] (13:199-13:203, 686-690)
│   └─0 TextNode "Unix" (13:199-13:203, 686-690)
├─228 PunctuationNode "." (13:203-13:204, 690-691)
├─229 WhiteSpaceNode " " (13:204-13:205, 691-692)
├─230 WordNode[1] (13:205-13:208, 692-695)
│   └─0 TextNode "The" (13:205-13:208, 692-695)
├─231 WhiteSpaceNode " " (13:208-13:209, 695-696)
├─232 WordNode[1] (13:209-13:217, 696-704)
│   └─0 TextNode "Computer" (13:209-13:217, 696-704)
├─233 WhiteSpaceNode " " (13:217-13:218, 704-705)
├─234 WordNode[1] (13:218-13:225, 705-712)
│   └─0 TextNode "Science" (13:218-13:225, 705-712)
├─235 WhiteSpaceNode " " (13:225-13:226, 712-713)
├─236 WordNode[1] (13:226-13:236, 713-723)
│   └─0 TextNode "Department" (13:226-13:236, 713-723)
├─237 WhiteSpaceNode " " (13:236-13:237, 723-724)
├─238 WordNode[1] (13:237-13:239, 724-726)
│   └─0 TextNode "at" (13:237-13:239, 724-726)
├─239 WhiteSpaceNode " " (13:239-13:240, 726-727)
├─240 WordNode[1] (13:240-13:248, 727-735)
│   └─0 TextNode "Berkeley" (13:240-13:248, 727-735)
├─241 PunctuationNode "," (13:248-13:249, 735-736)
├─242 WhiteSpaceNode " " (13:249-13:250, 736-737)
├─243 WordNode[1] (13:250-13:258, 737-745)
│   └─0 TextNode "together" (13:250-13:258, 737-745)
├─244 WhiteSpaceNode " " (13:258-13:259, 745-746)
├─245 WordNode[1] (13:259-13:263, 746-750)
│   └─0 TextNode "with" (13:259-13:263, 746-750)
├─246 WhiteSpaceNode " " (13:263-13:264, 750-751)
├─247 WordNode[1] (13:264-13:267, 751-754)
│   └─0 TextNode "the" (13:264-13:267, 751-754)
├─248 WhiteSpaceNode " " (13:267-13:268, 754-755)
├─249 WordNode[1] (13:268-13:279, 755-766)
│   └─0 TextNode "Mathematics" (13:268-13:279, 755-766)
├─250 WhiteSpaceNode " " (13:279-13:280, 766-767)
├─251 WordNode[1] (13:280-13:290, 767-777)
│   └─0 TextNode "Department" (13:280-13:290, 767-777)
├─252 WhiteSpaceNode " " (13:290-13:291, 777-778)
├─253 WordNode[1] (13:291-13:294, 778-781)
│   └─0 TextNode "and" (13:291-13:294, 778-781)
├─254 WhiteSpaceNode " " (13:294-13:295, 781-782)
├─255 WordNode[1] (13:295-13:298, 782-785)
│   └─0 TextNode "the" (13:295-13:298, 782-785)
├─256 WhiteSpaceNode " " (13:298-13:299, 785-786)
├─257 WordNode[1] (13:299-13:309, 786-796)
│   └─0 TextNode "Statistics" (13:299-13:309, 786-796)
├─258 WhiteSpaceNode " " (13:309-13:310, 796-797)
├─259 WordNode[1] (13:310-13:320, 797-807)
│   └─0 TextNode "Department" (13:310-13:320, 797-807)
├─260 PunctuationNode "," (13:320-13:321, 807-808)
├─261 WhiteSpaceNode " " (13:321-13:322, 808-809)
├─262 WordNode[1] (13:322-13:326, 809-813)
│   └─0 TextNode "were" (13:322-13:326, 809-813)
├─263 WhiteSpaceNode " " (13:326-13:327, 813-814)
├─264 WordNode[1] (13:327-13:331, 814-818)
│   └─0 TextNode "able" (13:327-13:331, 814-818)
├─265 WhiteSpaceNode " " (13:331-13:332, 818-819)
├─266 WordNode[1] (13:332-13:334, 819-821)
│   └─0 TextNode "to" (13:332-13:334, 819-821)
├─267 WhiteSpaceNode " " (13:334-13:335, 821-822)
├─268 WordNode[1] (13:335-13:342, 822-829)
│   └─0 TextNode "jointly" (13:335-13:342, 822-829)
├─269 WhiteSpaceNode " " (13:342-13:343, 829-830)
├─270 WordNode[1] (13:343-13:351, 830-838)
│   └─0 TextNode "purchase" (13:343-13:351, 830-838)
├─271 WhiteSpaceNode " " (13:351-13:352, 838-839)
├─272 WordNode[1] (13:352-13:353, 839-840)
│   └─0 TextNode "a" (13:352-13:353, 839-840)
├─273 WhiteSpaceNode " " (13:353-13:354, 840-841)
├─274 WordNode[1] (13:354-13:357, 841-844)
│   └─0 TextNode "PDP" (13:354-13:357, 841-844)
├─275 PunctuationNode "-" (13:357-13:358, 844-845)
├─276 WordNode[1] (13:358-13:360, 845-847)
│   └─0 TextNode "11" (13:358-13:360, 845-847)
├─277 PunctuationNode "/" (13:360-13:361, 847-848)
├─278 WordNode[1] (13:361-13:363, 848-850)
│   └─0 TextNode "45" (13:361-13:363, 848-850)
├─279 PunctuationNode "." (13:363-13:364, 850-851)
├─280 WhiteSpaceNode " " (13:364-13:365, 851-852)
├─281 WordNode[1] (13:365-13:367, 852-854)
│   └─0 TextNode "In" (13:365-13:367, 852-854)
├─282 WhiteSpaceNode " " (13:367-13:368, 854-855)
├─283 WordNode[1] (13:368-13:375, 855-862)
│   └─0 TextNode "January" (13:368-13:375, 855-862)
├─284 WhiteSpaceNode " " (13:375-13:376, 862-863)
├─285 WordNode[1] (13:376-13:380, 863-867)
│   └─0 TextNode "1974" (13:376-13:380, 863-867)
├─286 PunctuationNode "," (13:380-13:381, 867-868)
├─287 WhiteSpaceNode " " (13:381-13:382, 868-869)
├─288 WordNode[1] (13:382-13:383, 869-870)
│   └─0 TextNode "a" (13:382-13:383, 869-870)
├─289 WhiteSpaceNode " " (13:383-13:384, 870-871)
├─290 WordNode[1] (13:384-13:391, 871-878)
│   └─0 TextNode "Version" (13:384-13:391, 871-878)
├─291 WhiteSpaceNode " " (13:391-13:392, 878-879)
├─292 WordNode[1] (13:392-13:393, 879-880)
│   └─0 TextNode "4" (13:392-13:393, 879-880)
├─293 WhiteSpaceNode " " (13:393-13:394, 880-881)
├─294 WordNode[1] (13:394-13:398, 881-885)
│   └─0 TextNode "tape" (13:394-13:398, 881-885)
├─295 WhiteSpaceNode " " (13:398-13:399, 885-886)
├─296 WordNode[1] (13:399-13:402, 886-889)
│   └─0 TextNode "was" (13:399-13:402, 886-889)
├─297 WhiteSpaceNode " " (13:402-13:403, 889-890)
├─298 WordNode[1] (13:403-13:412, 890-899)
│   └─0 TextNode "delivered" (13:403-13:412, 890-899)
├─299 WhiteSpaceNode " " (13:412-13:413, 899-900)
├─300 WordNode[1] (13:413-13:416, 900-903)
│   └─0 TextNode "and" (13:413-13:416, 900-903)
├─301 WhiteSpaceNode " " (13:416-13:417, 903-904)
├─302 WordNode[1] (13:417-13:421, 904-908)
│   └─0 TextNode "Unix" (13:417-13:421, 904-908)
├─303 WhiteSpaceNode " " (13:421-13:422, 908-909)
├─304 WordNode[1] (13:422-13:425, 909-912)
│   └─0 TextNode "was" (13:422-13:425, 909-912)
├─305 WhiteSpaceNode " " (13:425-13:426, 912-913)
├─306 WordNode[1] (13:426-13:435, 913-922)
│   └─0 TextNode "installed" (13:426-13:435, 913-922)
├─307 WhiteSpaceNode " " (13:435-13:436, 922-923)
├─308 WordNode[1] (13:436-13:438, 923-925)
│   └─0 TextNode "by" (13:436-13:438, 923-925)
├─309 WhiteSpaceNode " " (13:438-13:439, 925-926)
├─310 WordNode[1] (13:439-13:447, 926-934)
│   └─0 TextNode "graduate" (13:439-13:447, 926-934)
├─311 WhiteSpaceNode " " (13:447-13:448, 934-935)
├─312 WordNode[1] (13:448-13:455, 935-942)
│   └─0 TextNode "student" (13:448-13:455, 935-942)
├─313 WhiteSpaceNode " " (13:455-13:456, 942-943)
├─314 WordNode[1] (13:456-13:461, 943-948)
│   └─0 TextNode "Keith" (13:456-13:461, 943-948)
├─315 WhiteSpaceNode " " (13:461-13:462, 948-949)
├─316 WordNode[1] (13:462-13:472, 949-959)
│   └─0 TextNode "Standiford" (13:462-13:472, 949-959)
└─317 PunctuationNode "." (13:472-13:473, 959-960)

#### out
RootNode[9] (1:3-13:473, 2-960)
├─0 ParagraphNode[1] (1:3-1:105, 2-104)
│   └─0 SentenceNode[30] (1:3-1:105, 2-104)
│       ├─0 WordNode[1] (1:3-1:9, 2-8)
│       │   └─0 TextNode "Twenty" (1:3-1:9, 2-8)
│       ├─1 WhiteSpaceNode " " (1:9-1:10, 8-9)
│       ├─2 WordNode[1] (1:10-1:15, 9-14)
│       │   └─0 TextNode "Years" (1:10-1:15, 9-14)
│       ├─3 WhiteSpaceNode " " (1:15-1:16, 14-15)
│       ├─4 WordNode[1] (1:16-1:18, 15-17)
│       │   └─0 TextNode "of" (1:16-1:18, 15-17)
│       ├─5 WhiteSpaceNode " " (1:18-1:19, 17-18)
│       ├─6 WordNode[1] (1:19-1:27, 18-26)
│       │   └─0 TextNode "Berkeley" (1:19-1:27, 18-26)
│       ├─7 WhiteSpaceNode " " (1:27-1:28, 26-27)
│       ├─8 WordNode[1] (1:28-1:32, 27-31)
│       │   └─0 TextNode "Unix" (1:28-1:32, 27-31)
│       ├─9 PunctuationNode ":" (1:32-1:33, 31-32)
│       ├─10 WhiteSpaceNode " " (1:33-1:34, 32-33)
│       ├─11 WordNode[1] (1:34-1:40, 33-39)
│       │   └─0 TextNode "Twenty" (1:34-1:40, 33-39)
│       ├─12 WhiteSpaceNode " " (1:40-1:41, 39-40)
│       ├─13 WordNode[1] (1:41-1:46, 40-45)
│       │   └─0 TextNode "Years" (1:41-1:46, 40-45)
│       ├─14 WhiteSpaceNode " " (1:46-1:47, 45-46)
│       ├─15 WordNode[1] (1:47-1:49, 46-48)
│       │   └─0 TextNode "of" (1:47-1:49, 46-48)
│       ├─16 WhiteSpaceNode " " (1:49-1:50, 48-49)
│       ├─17 WordNode[1] (1:50-1:58, 49-57)
│       │   └─0 TextNode "Berkeley" (1:50-1:58, 49-57)
│       ├─18 WhiteSpaceNode " " (1:58-1:59, 57-58)
│       ├─19 WordNode[1] (1:59-1:63, 58-62)
│       │   └─0 TextNode "Unix" (1:59-1:63, 58-62)
│       ├─20 WhiteSpaceNode " " (1:63-1:64, 62-63)
│       ├─21 WordNode[1] (1:64-1:68, 63-67)
│       │   └─0 TextNode "From" (1:64-1:68, 63-67)
│       ├─22 WhiteSpaceNode " " (1:68-1:69, 67-68)
│       ├─23 WordNode[5] (1:69-1:79, 68-78)
│       │   ├─0 TextNode "AT" (1:69-1:71, 68-70)
│       │   ├─1 SymbolNode "&" (1:71-1:72, 70-71)
│       │   ├─2 TextNode "T" (1:72-1:73, 71-72)
│       │   ├─3 PunctuationNode "-" (1:73-1:74, 72-73)
│       │   └─4 TextNode "Owned" (1:74-1:79, 73-78)
│       ├─24 WhiteSpaceNode " " (1:79-1:80, 78-79)
│       ├─25 WordNode[1] (1:80-1:82, 79-81)
│       │   └─0 TextNode "to" (1:80-1:82, 79-81)
│       ├─26 WhiteSpaceNode " " (1:82-1:83, 81-82)
│       ├─27 WordNode[1] (1:83-1:89, 82-88)
│       │   └─0 TextNode "Freely" (1:83-1:89, 82-88)
│       ├─28 WhiteSpaceNode " " (1:89-1:90, 88-89)
│       └─29 WordNode[1] (1:90-1:105, 89-104)
│           └─0 TextNode "Redistributable" (1:90-1:105, 89-104)
├─1 WhiteSpaceNode "\n\n\n\n" (1:105-5:1, 104-108)
├─2 ParagraphNode[1] (5:1-5:23, 108-130)
│   └─0 SentenceNode[5] (5:1-5:23, 108-130)
│       ├─0 WordNode[1] (5:1-5:9, 108-116)
│       │   └─0 TextNode "Marshall" (5:1-5:9, 108-116)
│       ├─1 WhiteSpaceNode " " (5:9-5:10, 116-117)
│       ├─2 WordNode[1] (5:10-5:14, 117-121)
│       │   └─0 TextNode "Kirk" (5:10-5:14, 117-121)
│       ├─3 WhiteSpaceNode " " (5:14-5:15, 121-122)
│       └─4 WordNode[1] (5:15-5:23, 122-130)
│           └─0 TextNode "McKusick" (5:15-5:23, 122-130)
├─3 WhiteSpaceNode "\n\n\n\n" (5:23-9:1, 130-134)
├─4 ParagraphNode[1] (9:4-9:17, 137-150)
│   └─0 SentenceNode[3] (9:4-9:17, 137-150)
│       ├─0 WordNode[1] (9:4-9:9, 137-142)
│       │   └─0 TextNode "Early" (9:4-9:9, 137-142)
│       ├─1 WhiteSpaceNode " " (9:9-9:10, 142-143)
│       └─2 WordNode[1] (9:10-9:17, 143-150)
│           └─0 TextNode "History" (9:10-9:17, 143-150)
├─5 WhiteSpaceNode "\n\n" (9:17-11:1, 150-152)
├─6 ParagraphNode[3] (11:1-11:335, 152-486)
│   ├─0 SentenceNode[46] (11:1-11:151, 152-302)
│   │   ├─0 WordNode[1] (11:1-11:4, 152-155)
│   │   │   └─0 TextNode "Ken" (11:1-11:4, 152-155)
│   │   ├─1 WhiteSpaceNode " " (11:4-11:5, 155-156)
│   │   ├─2 WordNode[1] (11:5-11:13, 156-164)
│   │   │   └─0 TextNode "Thompson" (11:5-11:13, 156-164)
│   │   ├─3 WhiteSpaceNode " " (11:13-11:14, 164-165)
│   │   ├─4 WordNode[1] (11:14-11:17, 165-168)
│   │   │   └─0 TextNode "and" (11:14-11:17, 165-168)
│   │   ├─5 WhiteSpaceNode " " (11:17-11:18, 168-169)
│   │   ├─6 WordNode[1] (11:18-11:24, 169-175)
│   │   │   └─0 TextNode "Dennis" (11:18-11:24, 169-175)
│   │   ├─7 WhiteSpaceNode " " (11:24-11:25, 175-176)
│   │   ├─8 WordNode[1] (11:25-11:32, 176-183)
│   │   │   └─0 TextNode "Ritchie" (11:25-11:32, 176-183)
│   │   ├─9 WhiteSpaceNode " " (11:32-11:33, 183-184)
│   │   ├─10 WordNode[1] (11:33-11:42, 184-193)
│   │   │   └─0 TextNode "presented" (11:33-11:42, 184-193)
│   │   ├─11 WhiteSpaceNode " " (11:42-11:43, 193-194)
│   │   ├─12 WordNode[1] (11:43-11:46, 194-197)
│   │   │   └─0 TextNode "the" (11:43-11:46, 194-197)
│   │   ├─13 WhiteSpaceNode " " (11:46-11:47, 197-198)
│   │   ├─14 WordNode[1] (11:47-11:52, 198-203)
│   │   │   └─0 TextNode "first" (11:47-11:52, 198-203)
│   │   ├─15 WhiteSpaceNode " " (11:52-11:53, 203-204)
│   │   ├─16 WordNode[1] (11:53-11:57, 204-208)
│   │   │   └─0 TextNode "Unix" (11:53-11:57, 204-208)
│   │   ├─17 WhiteSpaceNode " " (11:57-11:58, 208-209)
│   │   ├─18 WordNode[1] (11:58-11:63, 209-214)
│   │   │   └─0 TextNode "paper" (11:58-11:63, 209-214)
│   │   ├─19 WhiteSpaceNode " " (11:63-11:64, 214-215)
│   │   ├─20 WordNode[1] (11:64-11:66, 215-217)
│   │   │   └─0 TextNode "at" (11:64-11:66, 215-217)
│   │   ├─21 WhiteSpaceNode " " (11:66-11:67, 217-218)
│   │   ├─22 WordNode[1] (11:67-11:70, 218-221)
│   │   │   └─0 TextNode "the" (11:67-11:70, 218-221)
│   │   ├─23 WhiteSpaceNode " " (11:70-11:71, 221-222)
│   │   ├─24 WordNode[1] (11:71-11:80, 222-231)
│   │   │   └─0 TextNode "Symposium" (11:71-11:80, 222-231)
│   │   ├─25 WhiteSpaceNode " " (11:80-11:81, 231-232)
│   │   ├─26 WordNode[1] (11:81-11:83, 232-234)
│   │   │   └─0 TextNode "on" (11:81-11:83, 232-234)
│   │   ├─27 WhiteSpaceNode " " (11:83-11:84, 234-235)
│   │   ├─28 WordNode[1] (11:84-11:93, 235-244)
│   │   │   └─0 TextNode "Operating" (11:84-11:93, 235-244)
│   │   ├─29 WhiteSpaceNode " " (11:93-11:94, 244-245)
│   │   ├─30 WordNode[1] (11:94-11:101, 245-252)
│   │   │   └─0 TextNode "Systems" (11:94-11:101, 245-252)
│   │   ├─31 WhiteSpaceNode " " (11:101-11:102, 252-253)
│   │   ├─32 WordNode[1] (11:102-11:112, 253-263)
│   │   │   └─0 TextNode "Principles" (11:102-11:112, 253-263)
│   │   ├─33 WhiteSpaceNode " " (11:112-11:113, 263-264)
│   │   ├─34 WordNode[1] (11:113-11:115, 264-266)
│   │   │   └─0 TextNode "at" (11:113-11:115, 264-266)
│   │   ├─35 WhiteSpaceNode " " (11:115-11:116, 266-267)
│   │   ├─36 WordNode[1] (11:116-11:122, 267-273)
│   │   │   └─0 TextNode "Purdue" (11:116-11:122, 267-273)
│   │   ├─37 WhiteSpaceNode " " (11:122-11:123, 273-274)
│   │   ├─38 WordNode[1] (11:123-11:133, 274-284)
│   │   │   └─0 TextNode "University" (11:123-11:133, 274-284)
│   │   ├─39 WhiteSpaceNode " " (11:133-11:134, 284-285)
│   │   ├─40 WordNode[1] (11:134-11:136, 285-287)
│   │   │   └─0 TextNode "in" (11:134-11:136, 285-287)
│   │   ├─41 WhiteSpaceNode " " (11:136-11:137, 287-288)
│   │   ├─42 WordNode[1] (11:137-11:145, 288-296)
│   │   │   └─0 TextNode "November" (11:137-11:145, 288-296)
│   │   ├─43 WhiteSpaceNode " " (11:145-11:146, 296-297)
│   │   ├─44 WordNode[1] (11:146-11:150, 297-301)
│   │   │   └─0 TextNode "1973" (11:146-11:150, 297-301)
│   │   └─45 PunctuationNode "." (11:150-11:151, 301-302)
│   ├─1 WhiteSpaceNode " " (11:151-11:152, 302-303)
│   └─2 SentenceNode[60] (11:152-11:335, 303-486)
│       ├─0 WordNode[1] (11:152-11:161, 303-312)
│       │   └─0 TextNode "Professor" (11:152-11:161, 303-312)
│       ├─1 WhiteSpaceNode " " (11:161-11:162, 312-313)
│       ├─2 WordNode[1] (11:162-11:165, 313-316)
│       │   └─0 TextNode "Bob" (11:162-11:165, 313-316)
│       ├─3 WhiteSpaceNode " " (11:165-11:166, 316-317)
│       ├─4 WordNode[1] (11:166-11:171, 317-322)
│       │   └─0 TextNode "Fabry" (11:166-11:171, 317-322)
│       ├─5 PunctuationNode "," (11:171-11:172, 322-323)
│       ├─6 WhiteSpaceNode " " (11:172-11:173, 323-324)
│       ├─7 WordNode[1] (11:173-11:175, 324-326)
│       │   └─0 TextNode "of" (11:173-11:175, 324-326)
│       ├─8 WhiteSpaceNode " " (11:175-11:176, 326-327)
│       ├─9 WordNode[1] (11:176-11:179, 327-330)
│       │   └─0 TextNode "the" (11:176-11:179, 327-330)
│       ├─10 WhiteSpaceNode " " (11:179-11:180, 330-331)
│       ├─11 WordNode[1] (11:180-11:190, 331-341)
│       │   └─0 TextNode "University" (11:180-11:190, 331-341)
│       ├─12 WhiteSpaceNode " " (11:190-11:191, 341-342)
│       ├─13 WordNode[1] (11:191-11:193, 342-344)
│       │   └─0 TextNode "of" (11:191-11:193, 342-344)
│       ├─14 WhiteSpaceNode " " (11:193-11:194, 344-345)
│       ├─15 WordNode[1] (11:194-11:204, 345-355)
│       │   └─0 TextNode "California" (11:194-11:204, 345-355)
│       ├─16 WhiteSpaceNode " " (11:204-11:205, 355-356)
│       ├─17 WordNode[1] (11:205-11:207, 356-358)
│       │   └─0 TextNode "at" (11:205-11:207, 356-358)
│       ├─18 WhiteSpaceNode " " (11:207-11:208, 358-359)
│       ├─19 WordNode[1] (11:208-11:216, 359-367)
│       │   └─0 TextNode "Berkeley" (11:208-11:216, 359-367)
│       ├─20 PunctuationNode "," (11:216-11:217, 367-368)
│       ├─21 WhiteSpaceNode " " (11:217-11:218, 368-369)
│       ├─22 WordNode[1] (11:218-11:221, 369-372)
│       │   └─0 TextNode "was" (11:218-11:221, 369-372)
│       ├─23 WhiteSpaceNode " " (11:221-11:222, 372-373)
│       ├─24 WordNode[1] (11:222-11:224, 373-375)
│       │   └─0 TextNode "in" (11:222-11:224, 373-375)
│       ├─25 WhiteSpaceNode " " (11:224-11:225, 375-376)
│       ├─26 WordNode[1] (11:225-11:235, 376-386)
│       │   └─0 TextNode "attendance" (11:225-11:235, 376-386)
│       ├─27 WhiteSpaceNode " " (11:235-11:236, 386-387)
│       ├─28 WordNode[1] (11:236-11:239, 387-390)
│       │   └─0 TextNode "and" (11:236-11:239, 387-390)
│       ├─29 WhiteSpaceNode " " (11:239-11:240, 390-391)
│       ├─30 WordNode[1] (11:240-11:251, 391-402)
│       │   └─0 TextNode "immediately" (11:240-11:251, 391-402)
│       ├─31 WhiteSpaceNode " " (11:251-11:252, 402-403)
│       ├─32 WordNode[1] (11:252-11:258, 403-409)
│       │   └─0 TextNode "became" (11:252-11:258, 403-409)
│       ├─33 WhiteSpaceNode " " (11:258-11:259, 409-410)
│       ├─34 WordNode[1] (11:259-11:269, 410-420)
│       │   └─0 TextNode "interested" (11:259-11:269, 410-420)
│       ├─35 WhiteSpaceNode " " (11:269-11:270, 420-421)
│       ├─36 WordNode[1] (11:270-11:272, 421-423)
│       │   └─0 TextNode "in" (11:270-11:272, 421-423)
│       ├─37 WhiteSpaceNode " " (11:272-11:273, 423-424)
│       ├─38 WordNode[1] (11:273-11:282, 424-433)
│       │   └─0 TextNode "obtaining" (11:273-11:282, 424-433)
│       ├─39 WhiteSpaceNode " " (11:282-11:283, 433-434)
│       ├─40 WordNode[1] (11:283-11:284, 434-435)
│       │   └─0 TextNode "a" (11:283-11:284, 434-435)
│       ├─41 WhiteSpaceNode " " (11:284-11:285, 435-436)
│       ├─42 WordNode[1] (11:285-11:289, 436-440)
│       │   └─0 TextNode "copy" (11:285-11:289, 436-440)
│       ├─43 WhiteSpaceNode " " (11:289-11:290, 440-441)
│       ├─44 WordNode[1] (11:290-11:292, 441-443)
│       │   └─0 TextNode "of" (11:290-11:292, 441-443)
│       ├─45 WhiteSpaceNode " " (11:292-11:293, 443-444)
│       ├─46 WordNode[1] (11:293-11:296, 444-447)
│       │   └─0 TextNode "the" (11:293-11:296, 444-447)
│       ├─47 WhiteSpaceNode " " (11:296-11:297, 447-448)
│       ├─48 WordNode[1] (11:297-11:303, 448-454)
│       │   └─0 TextNode "system" (11:297-11:303, 448-454)
│       ├─49 WhiteSpaceNode " " (11:303-11:304, 454-455)
│       ├─50 WordNode[1] (11:304-11:306, 455-457)
│       │   └─0 TextNode "to" (11:304-11:306, 455-457)
│       ├─51 WhiteSpaceNode " " (11:306-11:307, 457-458)
│       ├─52 WordNode[1] (11:307-11:317, 458-468)
│       │   └─0 TextNode "experiment" (11:307-11:317, 458-468)
│       ├─53 WhiteSpaceNode " " (11:317-11:318, 468-469)
│       ├─54 WordNode[1] (11:318-11:322, 469-473)
│       │   └─0 TextNode "with" (11:318-11:322, 469-473)
│       ├─55 WhiteSpaceNode " " (11:322-11:323, 473-474)
│       ├─56 WordNode[1] (11:323-11:325, 474-476)
│       │   └─0 TextNode "at" (11:323-11:325, 474-476)
│       ├─57 WhiteSpaceNode " " (11:325-11:326, 476-477)
│       ├─58 WordNode[1] (11:326-11:334, 477-485)
│       │   └─0 TextNode "Berkeley" (11:326-11:334, 477-485)
│       └─59 PunctuationNode "." (11:334-11:335, 485-486)
├─7 WhiteSpaceNode "\n\n" (11:335-13:1, 486-488)
└─8 ParagraphNode[3] (13:1-13:473, 488-960)
    ├─0 SentenceNode[72] (13:1-13:204, 488-691)
    │   ├─0 WordNode[1] (13:1-13:3, 488-490)
    │   │   └─0 TextNode "At" (13:1-13:3, 488-490)
    │   ├─1 WhiteSpaceNode " " (13:3-13:4, 490-491)
    │   ├─2 WordNode[1] (13:4-13:7, 491-494)
    │   │   └─0 TextNode "the" (13:4-13:7, 491-494)
    │   ├─3 WhiteSpaceNode " " (13:7-13:8, 494-495)
    │   ├─4 WordNode[1] (13:8-13:12, 495-499)
    │   │   └─0 TextNode "time" (13:8-13:12, 495-499)
    │   ├─5 PunctuationNode "," (13:12-13:13, 499-500)
    │   ├─6 WhiteSpaceNode " " (13:13-13:14, 500-501)
    │   ├─7 WordNode[1] (13:14-13:22, 501-509)
    │   │   └─0 TextNode "Berkeley" (13:14-13:22, 501-509)
    │   ├─8 WhiteSpaceNode " " (13:22-13:23, 509-510)
    │   ├─9 WordNode[1] (13:23-13:26, 510-513)
    │   │   └─0 TextNode "had" (13:23-13:26, 510-513)
    │   ├─10 WhiteSpaceNode " " (13:26-13:27, 513-514)
    │   ├─11 WordNode[1] (13:27-13:31, 514-518)
    │   │   └─0 TextNode "only" (13:27-13:31, 514-518)
    │   ├─12 WhiteSpaceNode " " (13:31-13:32, 518-519)
    │   ├─13 WordNode[1] (13:32-13:37, 519-524)
    │   │   └─0 TextNode "large" (13:32-13:37, 519-524)
    │   ├─14 WhiteSpaceNode " " (13:37-13:38, 524-525)
    │   ├─15 WordNode[1] (13:38-13:47, 525-534)
    │   │   └─0 TextNode "mainframe" (13:38-13:47, 525-534)
    │   ├─16 WhiteSpaceNode " " (13:47-13:48, 534-535)
    │   ├─17 WordNode[1] (13:48-13:56, 535-543)
    │   │   └─0 TextNode "computer" (13:48-13:56, 535-543)
    │   ├─18 WhiteSpaceNode " " (13:56-13:57, 543-544)
    │   ├─19 WordNode[1] (13:57-13:64, 544-551)
    │   │   └─0 TextNode "systems" (13:57-13:64, 544-551)
    │   ├─20 WhiteSpaceNode " " (13:64-13:65, 551-552)
    │   ├─21 WordNode[1] (13:65-13:70, 552-557)
    │   │   └─0 TextNode "doing" (13:65-13:70, 552-557)
    │   ├─22 WhiteSpaceNode " " (13:70-13:71, 557-558)
    │   ├─23 WordNode[1] (13:71-13:76, 558-563)
    │   │   └─0 TextNode "batch" (13:71-13:76, 558-563)
    │   ├─24 WhiteSpaceNode " " (13:76-13:77, 563-564)
    │   ├─25 WordNode[1] (13:77-13:87, 564-574)
    │   │   └─0 TextNode "processing" (13:77-13:87, 564-574)
    │   ├─26 PunctuationNode "," (13:87-13:88, 574-575)
    │   ├─27 WhiteSpaceNode " " (13:88-13:89, 575-576)
    │   ├─28 WordNode[1] (13:89-13:91, 576-578)
    │   │   └─0 TextNode "so" (13:89-13:91, 576-578)
    │   ├─29 WhiteSpaceNode " " (13:91-13:92, 578-579)
    │   ├─30 WordNode[1] (13:92-13:95, 579-582)
    │   │   └─0 TextNode "the" (13:92-13:95, 579-582)
    │   ├─31 WhiteSpaceNode " " (13:95-13:96, 582-583)
    │   ├─32 WordNode[1] (13:96-13:101, 583-588)
    │   │   └─0 TextNode "first" (13:96-13:101, 583-588)
    │   ├─33 WhiteSpaceNode " " (13:101-13:102, 588-589)
    │   ├─34 WordNode[1] (13:102-13:107, 589-594)
    │   │   └─0 TextNode "order" (13:102-13:107, 589-594)
    │   ├─35 WhiteSpaceNode " " (13:107-13:108, 594-595)
    │   ├─36 WordNode[1] (13:108-13:110, 595-597)
    │   │   └─0 TextNode "of" (13:108-13:110, 595-597)
    │   ├─37 WhiteSpaceNode " " (13:110-13:111, 597-598)
    │   ├─38 WordNode[1] (13:111-13:119, 598-606)
    │   │   └─0 TextNode "business" (13:111-13:119, 598-606)
    │   ├─39 WhiteSpaceNode " " (13:119-13:120, 606-607)
    │   ├─40 WordNode[1] (13:120-13:123, 607-610)
    │   │   └─0 TextNode "was" (13:120-13:123, 607-610)
    │   ├─41 WhiteSpaceNode " " (13:123-13:124, 610-611)
    │   ├─42 WordNode[1] (13:124-13:126, 611-613)
    │   │   └─0 TextNode "to" (13:124-13:126, 611-613)
    │   ├─43 WhiteSpaceNode " " (13:126-13:127, 613-614)
    │   ├─44 WordNode[1] (13:127-13:130, 614-617)
    │   │   └─0 TextNode "get" (13:127-13:130, 614-617)
    │   ├─45 WhiteSpaceNode " " (13:130-13:131, 617-618)
    │   ├─46 WordNode[1] (13:131-13:132, 618-619)
    │   │   └─0 TextNode "a" (13:131-13:132, 618-619)
    │   ├─47 WhiteSpaceNode " " (13:132-13:133, 619-620)
    │   ├─48 WordNode[3] (13:133-13:139, 620-626)
    │   │   ├─0 TextNode "PDP" (13:133-13:136, 620-623)
    │   │   ├─1 PunctuationNode "-" (13:136-13:137, 623-624)
    │   │   └─2 TextNode "11" (13:137-13:139, 624-626)
    │   ├─49 PunctuationNode "/" (13:139-13:140, 626-627)
    │   ├─50 WordNode[1] (13:140-13:142, 627-629)
    │   │   └─0 TextNode "45" (13:140-13:142, 627-629)
    │   ├─51 WhiteSpaceNode " " (13:142-13:143, 629-630)
    │   ├─52 WordNode[1] (13:143-13:151, 630-638)
    │   │   └─0 TextNode "suitable" (13:143-13:151, 630-638)
    │   ├─53 WhiteSpaceNode " " (13:151-13:152, 638-639)
    │   ├─54 WordNode[1] (13:152-13:155, 639-642)
    │   │   └─0 TextNode "for" (13:152-13:155, 639-642)
    │   ├─55 WhiteSpaceNode " " (13:155-13:156, 642-643)
    │   ├─56 WordNode[1] (13:156-13:163, 643-650)
    │   │   └─0 TextNode "running" (13:156-13:163, 643-650)
    │   ├─57 WhiteSpaceNode " " (13:163-13:164, 650-651)
    │   ├─58 WordNode[1] (13:164-13:168, 651-655)
    │   │   └─0 TextNode "with" (13:164-13:168, 651-655)
    │   ├─59 WhiteSpaceNode " " (13:168-13:169, 655-656)
    │   ├─60 WordNode[1] (13:169-13:172, 656-659)
    │   │   └─0 TextNode "the" (13:169-13:172, 656-659)
    │   ├─61 WhiteSpaceNode " " (13:172-13:173, 659-660)
    │   ├─62 WordNode[3] (13:173-13:185, 660-672)
    │   │   ├─0 TextNode "then" (13:173-13:177, 660-664)
    │   │   ├─1 PunctuationNode "-" (13:177-13:178, 664-665)
    │   │   └─2 TextNode "current" (13:178-13:185, 665-672)
    │   ├─63 WhiteSpaceNode " " (13:185-13:186, 672-673)
    │   ├─64 WordNode[1] (13:186-13:193, 673-680)
    │   │   └─0 TextNode "Version" (13:186-13:193, 673-680)
    │   ├─65 WhiteSpaceNode " " (13:193-13:194, 680-681)
    │   ├─66 WordNode[1] (13:194-13:195, 681-682)
    │   │   └─0 TextNode "4" (13:194-13:195, 681-682)
    │   ├─67 WhiteSpaceNode " " (13:195-13:196, 682-683)
    │   ├─68 WordNode[1] (13:196-13:198, 683-685)
    │   │   └─0 TextNode "of" (13:196-13:198, 683-685)
    │   ├─69 WhiteSpaceNode " " (13:198-13:199, 685-686)
    │   ├─70 WordNode[1] (13:199-13:203, 686-690)
    │   │   └─0 TextNode "Unix" (13:199-13:203, 686-690)
    │   └─71 PunctuationNode "." (13:203-13:204, 690-691)
    ├─1 WhiteSpaceNode " " (13:204-13:205, 691-692)
    └─2 SentenceNode[85] (13:205-13:473, 692-960)
        ├─0 WordNode[1] (13:205-13:208, 692-695)
        │   └─0 TextNode "The" (13:205-13:208, 692-695)
        ├─1 WhiteSpaceNode " " (13:208-13:209, 695-696)
        ├─2 WordNode[1] (13:209-13:217, 696-704)
        │   └─0 TextNode "Computer" (13:209-13:217, 696-704)
        ├─3 WhiteSpaceNode " " (13:217-13:218, 704-705)
        ├─4 WordNode[1] (13:218-13:225, 705-712)
        │   └─0 TextNode "Science" (13:218-13:225, 705-712)
        ├─5 WhiteSpaceNode " " (13:225-13:226, 712-713)
        ├─6 WordNode[1] (13:226-13:236, 713-723)
        │   └─0 TextNode "Department" (13:226-13:236, 713-723)
        ├─7 WhiteSpaceNode " " (13:236-13:237, 723-724)
        ├─8 WordNode[1] (13:237-13:239, 724-726)
        │   └─0 TextNode "at" (13:237-13:239, 724-726)
        ├─9 WhiteSpaceNode " " (13:239-13:240, 726-727)
        ├─10 WordNode[1] (13:240-13:248, 727-735)
        │   └─0 TextNode "Berkeley" (13:240-13:248, 727-735)
        ├─11 PunctuationNode "," (13:248-13:249, 735-736)
        ├─12 WhiteSpaceNode " " (13:249-13:250, 736-737)
        ├─13 WordNode[1] (13:250-13:258, 737-745)
        │   └─0 TextNode "together" (13:250-13:258, 737-745)
        ├─14 WhiteSpaceNode " " (13:258-13:259, 745-746)
        ├─15 WordNode[1] (13:259-13:263, 746-750)
        │   └─0 TextNode "with" (13:259-13:263, 746-750)
        ├─16 WhiteSpaceNode " " (13:263-13:264, 750-751)
        ├─17 WordNode[1] (13:264-13:267, 751-754)
        │   └─0 TextNode "the" (13:264-13:267, 751-754)
        ├─18 WhiteSpaceNode " " (13:267-13:268, 754-755)
        ├─19 WordNode[1] (13:268-13:279, 755-766)
        │   └─0 TextNode "Mathematics" (13:268-13:279, 755-766)
        ├─20 WhiteSpaceNode " " (13:279-13:280, 766-767)
        ├─21 WordNode[1] (13:280-13:290, 767-777)
        │   └─0 TextNode "Department" (13:280-13:290, 767-777)
        ├─22 WhiteSpaceNode " " (13:290-13:291, 777-778)
        ├─23 WordNode[1] (13:291-13:294, 778-781)
        │   └─0 TextNode "and" (13:291-13:294, 778-781)
        ├─24 WhiteSpaceNode " " (13:294-13:295, 781-782)
        ├─25 WordNode[1] (13:295-13:298, 782-785)
        │   └─0 TextNode "the" (13:295-13:298, 782-785)
        ├─26 WhiteSpaceNode " " (13:298-13:299, 785-786)
        ├─27 WordNode[1] (13:299-13:309, 786-796)
        │   └─0 TextNode "Statistics" (13:299-13:309, 786-796)
        ├─28 WhiteSpaceNode " " (13:309-13:310, 796-797)
        ├─29 WordNode[1] (13:310-13:320, 797-807)
        │   └─0 TextNode "Department" (13:310-13:320, 797-807)
        ├─30 PunctuationNode "," (13:320-13:321, 807-808)
        ├─31 WhiteSpaceNode " " (13:321-13:322, 808-809)
        ├─32 WordNode[1] (13:322-13:326, 809-813)
        │   └─0 TextNode "were" (13:322-13:326, 809-813)
        ├─33 WhiteSpaceNode " " (13:326-13:327, 813-814)
        ├─34 WordNode[1] (13:327-13:331, 814-818)
        │   └─0 TextNode "able" (13:327-13:331, 814-818)
        ├─35 WhiteSpaceNode " " (13:331-13:332, 818-819)
        ├─36 WordNode[1] (13:332-13:334, 819-821)
        │   └─0 TextNode "to" (13:332-13:334, 819-821)
        ├─37 WhiteSpaceNode " " (13:334-13:335, 821-822)
        ├─38 WordNode[1] (13:335-13:342, 822-829)
        │   └─0 TextNode "jointly" (13:335-13:342, 822-829)
        ├─39 WhiteSpaceNode " " (13:342-13:343, 829-830)
        ├─40 WordNode[1] (13:343-13:351, 830-838)
        │   └─0 TextNode "purchase" (13:343-13:351, 830-838)
        ├─41 WhiteSpaceNode " " (13:351-13:352, 838-839)
        ├─42 WordNode[1] (13:352-13:353, 839-840)
        │   └─0 TextNode "a" (13:352-13:353, 839-840)
        ├─43 WhiteSpaceNode " " (13:353-13:354, 840-841)
        ├─44 WordNode[3] (13:354-13:360, 841-847)
        │   ├─0 TextNode "PDP" (13:354-13:357, 841-844)
        │   ├─1 PunctuationNode "-" (13:357-13:358, 844-845)
        │   └─2 TextNode "11" (13:358-13:360, 845-847)
        ├─45 PunctuationNode "/" (13:360-13:361, 847-848)
        ├─46 WordNode[2] (13:361-13:364, 848-851)
        │   ├─0 TextNode "45" (13:361-13:363, 848-850)
        │   └─1 PunctuationNode "." (13:363-13:364, 850-851)
        ├─47 WhiteSpaceNode " " (13:364-13:365, 851-852)
        ├─48 WordNode[1] (13:365-13:367, 852-854)
        │   └─0 TextNode "In" (13:365-13:367, 852-854)
        ├─49 WhiteSpaceNode " " (13:367-13:368, 854-855)
        ├─50 WordNode[1] (13:368-13:375, 855-862)
        │   └─0 TextNode "January" (13:368-13:375, 855-862)
        ├─51 WhiteSpaceNode " " (13:375-13:376, 862-863)
        ├─52 WordNode[1] (13:376-13:380, 863-867)
        │   └─0 TextNode "1974" (13:376-13:380, 863-867)
        ├─53 PunctuationNode "," (13:380-13:381, 867-868)
        ├─54 WhiteSpaceNode " " (13:381-13:382, 868-869)
        ├─55 WordNode[1] (13:382-13:383, 869-870)
        │   └─0 TextNode "a" (13:382-13:383, 869-870)
        ├─56 WhiteSpaceNode " " (13:383-13:384, 870-871)
        ├─57 WordNode[1] (13:384-13:391, 871-878)
        │   └─0 TextNode "Version" (13:384-13:391, 871-878)
        ├─58 WhiteSpaceNode " " (13:391-13:392, 878-879)
        ├─59 WordNode[1] (13:392-13:393, 879-880)
        │   └─0 TextNode "4" (13:392-13:393, 879-880)
        ├─60 WhiteSpaceNode " " (13:393-13:394, 880-881)
        ├─61 WordNode[1] (13:394-13:398, 881-885)
        │   └─0 TextNode "tape" (13:394-13:398, 881-885)
        ├─62 WhiteSpaceNode " " (13:398-13:399, 885-886)
        ├─63 WordNode[1] (13:399-13:402, 886-889)
        │   └─0 TextNode "was" (13:399-13:402, 886-889)
        ├─64 WhiteSpaceNode " " (13:402-13:403, 889-890)
        ├─65 WordNode[1] (13:403-13:412, 890-899)
        │   └─0 TextNode "delivered" (13:403-13:412, 890-899)
        ├─66 WhiteSpaceNode " " (13:412-13:413, 899-900)
        ├─67 WordNode[1] (13:413-13:416, 900-903)
        │   └─0 TextNode "and" (13:413-13:416, 900-903)
        ├─68 WhiteSpaceNode " " (13:416-13:417, 903-904)
        ├─69 WordNode[1] (13:417-13:421, 904-908)
        │   └─0 TextNode "Unix" (13:417-13:421, 904-908)
        ├─70 WhiteSpaceNode " " (13:421-13:422, 908-909)
        ├─71 WordNode[1] (13:422-13:425, 909-912)
        │   └─0 TextNode "was" (13:422-13:425, 909-912)
        ├─72 WhiteSpaceNode " " (13:425-13:426, 912-913)
        ├─73 WordNode[1] (13:426-13:435, 913-922)
        │   └─0 TextNode "installed" (13:426-13:435, 913-922)
        ├─74 WhiteSpaceNode " " (13:435-13:436, 922-923)
        ├─75 WordNode[1] (13:436-13:438, 923-925)
        │   └─0 TextNode "by" (13:436-13:438, 923-925)
        ├─76 WhiteSpaceNode " " (13:438-13:439, 925-926)
        ├─77 WordNode[1] (13:439-13:447, 926-934)
        │   └─0 TextNode "graduate" (13:439-13:447, 926-934)
        ├─78 WhiteSpaceNode " " (13:447-13:448, 934-935)
        ├─79 WordNode[1] (13:448-13:455, 935-942)
        │   └─0 TextNode "student" (13:448-13:455, 935-942)
        ├─80 WhiteSpaceNode " " (13:455-13:456, 942-943)
        ├─81 WordNode[1] (13:456-13:461, 943-948)
        │   └─0 TextNode "Keith" (13:456-13:461, 943-948)
        ├─82 WhiteSpaceNode " " (13:461-13:462, 948-949)
        ├─83 WordNode[1] (13:462-13:472, 949-959)
        │   └─0 TextNode "Standiford" (13:462-13:472, 949-959)
        └─84 PunctuationNode "." (13:472-13:473, 959-960)
$

*1:お気づきの方もいらっしゃるでしょうが、 このテキスト・データはオライリーの "Open Sources: Voices from the Open Source Revolution" の第3章 "Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable" の冒頭部分です(笑)