連休に入った今日,プーシキン作品コンコーダンス・プログラム試作品に取り組んだ。共有メモリ上にコーパス(全作品テキストデータ),作品名 DB(コーパス ID から作品名を引き当てるデータベース),出現する単語を見出語形式で保持する二分木データベースを構築するのに,おそろしく時間を要したけれども,やっとプロトタイプにこぎ着けた。コーパス,作品名 DB,単語二分木のローダーと,これらのデータを用いてユーザ指定条件に合致する KWIC コンコーダンス表を生成する C++ アプリ。
現行版コンコーダンス・プログラム Опыт динамического составления конкордации к текстам А. С. Пушкина に対し,今回の改良点は以下の通り。
- 見出語ベース(UTF-8 ロシア語 Lemmatizer 形態素解析に基づく)
- 正規表現による柔軟な対象語指定が可能
- 近接隣接演算のサポート
- 単語出現位置情報から作品名が参照可能
- 単語出現位置情報から作品 Web ページの該当部分にリンクが可能
- ほぼメモリ上のみでデータ処理を行うので比較的高速
近接隣接演算というのは,ある語と何行以内,何語以内の範囲に出現するという条件指定でのコンコーダンス対象語検索である。例えば,「A<W10>B」 という検索式で,語 B と 10 語以内で共起する語 A の KWIC コンコーダンスを生成する。"W" が "L" だと行単位で同じ計算を行う。作品内の語,行の位置情報を単語に付加して管理するので,こうした計算が可能なのである。
プロトタイプなのでまだコンソールアプリである。これを近々 Web で使えるようにしたいと考えている。『エヴゲーニイ・オネーギン』全編のみをコーパスとしてロードし,近接隣接演算を試してみた。.*УКА$<W5>.*УКА$ という条件。.*УКА$ マッチ語と5 語範囲内で共起する .*УКА$ マッチ語について KWIC を生成する指定である。.*УКА$ という正規表現は,任意の文字ではじまり語末尾が УКА である条件に適合する語を示す。
結果は以下の通り。最初の出力は,МУКА が 1 件ヒットしたことを示す。コンテキスト中の該当行・単語を強調表示タグ装飾してある。4 語前に порукой (見出語 порука) という語があるので,近接隣接条件に合致する。03:0836:002129 は位置情報(『エヴゲーニイ・オネーギン』の 2129 行目)である。あとに,作品名と,Web ページの該当行へのリンクが続く。
Expression: .*УКА$<W5>.*УКА$ МУКА 1 1 Поверьте (совесть в том порукой), <span class="hitl">Супружество нам будет <em>мукой</em>.</span> Я, сколько ни любил бы вас, 03:0836:002129 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#002272 НАУКА 3 2 И лучше выдумать не мог. <span class="hitl">Его пример другим <em>наука</em>;</span> Но, боже мой, какая скука 03:0836:000025 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#000022 3 Хоть и ему иные штуки <span class="hitl">Не проходили без <em>науки</em>,</span> Хоть иногда и сам впросак 03:0836:003294 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#003516 4 И не входила глубоко <span class="hitl">В сердца мятежная <em>наука</em>,</span> Все это было только скука, 03:0836:005763 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#006098 ПОРУКА 1 5 Их вовсе недостоин я. <span class="hitl">Поверьте (совесть в том <em>порукой</em>),</span> Супружество нам будет мукой. 03:0836:002128 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#002271 РУКА 4 6 Они сидят в потемках двое; <span class="hitl">Они в саду, <em>рука</em> с рукой,</span> Гуляют утренней порой; 03:0836:002284 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#002438 7 Они сидят в потемках двое; <span class="hitl">Они в саду, рука с <em>рукой</em>,</span> Гуляют утренней порой; 03:0836:002284 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#002438 8 Но кушать подали. Четой <span class="hitl">Идут за стол <em>рука</em> с рукой.</span> Теснятся барышни к Татьяне; 03:0836:003017 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#003221 9 Но кушать подали. Четой <span class="hitl">Идут за стол рука с <em>рукой</em>.</span> Теснятся барышни к Татьяне; 03:0836:003017 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#003221 СКУКА 2 10 Его пример другим наука; <span class="hitl">Но, боже мой, какая <em>скука</em></span> С больным сидеть и день и ночь, 03:0836:000026 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#000023 11 В сердца мятежная наука, <span class="hitl">Все это было только <em>скука</em>,</span> Безделье молодых умов, 03:0836:005764 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#006099 ШТУКА 1 12 Иль явно, иль исподтишка, <span class="hitl">Хоть и ему иные <em>штуки</em></span> Не проходили без науки, 03:0836:003293 Роман в стихах. "Евгений Онегин" http://yasuda.homeip.net/pushkin/web/0836.html#003515