Vine Lunuxを一つ、3.2から4.0にアップグレードしてみた。インストール用のCD-ROMを用意して、アップグレード・インストール。ただ、「次へ」とクリックしていくだけ。完了後、再起動の後、
# apt-get update # apt-get -f dist-upgradeを忘れるなということだったので、ちゃんと忘れずに実行する。少しだけ試してみて気づいたこと:
1. 4.0では「SCIM + Anthy を標準日本語入力システムとして採用」しているのだが、アップグレードではVJEのままである。どうすればSCIMに変更できるのかよく判らない。
2. geditで日本語を入力しようとすると動かなくなる。
3. VNCの設定を変更しなければならなかった。日本語入力は、「GTK_IM_MODULE=scim」「export GTK_IM_MODULE」をxtartupに追加したところ、エラーが出たようだが入力自体は可能になった。もう少し様子を見てみる。vjeを有効にする方法は判らない(いろいろ試してみたけれども、駄目だった)。
4. emacsでまたVNC越しに日本語が使えなくなっていた。どうすればいいんだったか。
やはり新規インストールの方がいい。
なんとLinuxWorldが1月号で休刊になっていた。記念に最終号を買っておこうか。
![]() |
Amazon.co.jp Linux WORLD 2007年 1月号 アイ・ディ・ジー・ジャパン ¥ 1,580 (税込) 在庫あり。 |
Vine Linux 4.0がようやく出た。さっそくアップグレードしようかと思ったが、「なにかおこった時に自分で対処できる場合以外はAPTによ るアップグレードはお薦めしません。」なんて書いてある(Vine Linux 4.x Tips集)ものだから、躊躇してしまう。ダウンロードしてCDに焼くのも面倒くさい(怠けもなのだ、私は)。日経Linux 2007年1月号は《特集2》が「待望の「Vine Linux 4.0」を使いこなす」ということで、とうぜん附録ディスクを利用してインストールもできるだろうから、それを待とうか。いや、しかし附録がDVD-ROMだったらどうしよう。そろそろLinux機にもDVD-ROMドライブを導入しようか。
統計だけでなくさまざまな計算や処理ができるRをMacOSXにインストールした。普通に使うぶんには、MacOSX用のアプリケーションをダウンロードするだけでいいのだが、PHPで制御してブラウザ画面に結果を表示させようと思ったら、MacOSXの.app形式だとちょっと困る。そこで、sourceからコンパイルしてインストールしようと試みた。
まずg77をEasyPackageを使ってインストール。続いてconfigure→make→make installで済むはずだったのだが、エラーが出てしまった。Xcodeを最新版にしないとまずいらしい。そこで、2.4.1をApple Developer Connectionからダウンロード。900MB以上もあるのでダウンロードも大変である。それからおもむろにコンパイルを開始したのだが、
/usr/bin/libtool: internal link edit command failed
make[3]: *** [libR.dylib] Error 1
というエラーが出てしまう。./configureの前に
sudo gcc_select 3.3という呪文を唱えればいいという情報を見つけ、さっそく実行してみたらうまくいった。
X11で立ち上げてみれば、ちゃんと結果を表示するではないか。大成功だと思ったが、ブラウザ画面にはどうしても図を表示できない。何がいけないのだろうか。MacOSXでは無理なのか。
手元に一冊あったら便利かなと思って買った本。もっと字を詰め込んでくれてもよかったのだが。
![]() |
Amazon.co.jp PHP逆引きクイックリファレンス 毎日コミュニケーションズ (2006/11) ¥ 2,940 (税込) 在庫あり |
毎日買った本の記録をつけている。日本語の場合には行頭に●印、洋書の場合には○印をつけている。MySQLに情報は入っているので、文章中から丸印の数を集計すれば、買った本の数が判るというわけだ。本文中で丸印は使わないように気をつけているので、関係ない丸印は数えないはずだ。自分が毎月どれくらい本を買っているのかを知っておくべきだと思ったので、月別に集計して表示してくれるグラフをPHPとGnuplotで作ることにした。
まず、MySQLから情報を取得して丸印を集計するスクリプトを書く。
#!/usr/local/bin/php
<?php
(データベースへの接続は省略)
$sql = "select year,month from diary group by year,month order by year,month";
if(!$res=mysql_query($sql)){
echo "SQL失敗<BR />";
exit;
}
$array=array();
$out="";
// 年月の情報だけをまずは並べる
while($row=mysql_fetch_array($res)){
array_push($array, $row);
}
// 逆順に並べかえ、出力用の配列など用意
$rev_array=array_reverse($array);
$out_wa=array();
$out_you=array();
$xarray=array();
$i=0;
// X軸目盛用に0611、0610というような文字列を用意する
foreach ($rev_array as $rval){
$yr=substr($rval['year'],2,2);
$mo=$rval['month'];
$n=strlen($mo);
if ($n<2){
$mo="0".$mo;
}
$x = $yr.$mo;
$bodies = "";
// 月ごとに本文を取得。一月分の本文を一つの文字列にまとめてしまう
$sel="select body from diary where year = ".$rval['year'] .
" and month = ".$rval['month'];
$re=mysql_query($sel);
while($ro=mysql_fetch_row($re)){
$bodies .= $ro[0];
}
// 丸印の数を数え、18ヶ月分数えたらやめる
$black = substr_count($bodies,"●");
$white = substr_count($bodies,"○");
array_push($out_wa,array($x,$i,$black));
array_push($out_you,array($x,$i,$white));
array_push($xarray,$x);
$i++;
if ($i==18){
break;
}
}
// 古い順に並べる
sort($xarray);
sort($out_wa);
sort($out_you);
// 出力の一行目にX軸目盛情報を書く
$out .= "# ";
foreach($xarray as $xtics){
$out .= $xtics.",";
}
$out .= "\n";
$out = ereg_replace(",\n","\n",$out);
// 和書情報を並べ、2行空けて洋書情報を並べる
foreach($out_wa as $data_wa){
$out .= 18-$data_wa[1]."\t".$data_wa[2]."\n";
}
$out .= "\n\n";
foreach($out_you as $data_you){
$out .= 18-$data_you[1]."\t".$data_you[2]."\n";
}
// 結果の確認とファイルへの書き込み
print_r($out);
file_put_contents("plotdata.txt",$out);
// 結果セットの開放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
保存された結果はこんな感じ。
# 0506,0507,……0610,0611 1 27 2 22 : 17 14 18 10 1 10 2 32 : 17 5 18 5これをcronに登録して毎月1日の朝にでも実行すれば、前月までの毎月の集計値が自動的に保存されるといふ訳である。このデータをもとにグラフを描くのは次のようにしてみた。
<?php
define('GPLOT', '/usr/local/bin/gnuplot');
// gnuplot の初期化
$dspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // stderr
);
// Gnuplot の起動
// $pipes[0] - gnuplot へコマンドの送信
// $pipes[1] - gnuplot から画像の出力
// $pipes[2] - gnuplot からの標準エラー出力
$gnuplot = proc_open(GPLOT, $dspec, $pipes);
if ( ! is_resource($gnuplot) ) {
print "proc_open error\n";
exit(1);
}
// 初期設定
fwrite($pipes[0], "set term png\n");
header("Content-type: image/png");
// X軸の目盛設定
$xtics=array();
$file=file_get_contents("plotdata.txt");
$lines=explode("\n",$file);
$xtics=explode(",",substr($lines[0],2));
$last=count($xtics);
$i=0;
fwrite($pipes[0], "set xtics (");
foreach ($xtics as $xvalue){
$i++;
if($i < $last){
$xvalue = "'".$xvalue."' ".$i.", ";
}else{
$xvalue = "'".$xvalue."' ".$i;
}
fwrite($pipes[0],$xvalue);
}
fwrite($pipes[0], ")\n");
// 本の冊数をプロット
$plot = "plot 'plotdata.txt' index 0 with linespoints title 'Japanese books', \
'plotdata.txt' index 1 with linespoints title 'Foreign books'";
fwrite($pipes[0], $plot);
fclose($pipes[0]);
// グラフ出力
fpassthru($pipes[1]);
fclose($pipes[1]);
// エラー出力
if (!empty($pipes[2])) {
error_log($pipes[2], 0);
}
fclose($pipes[2]);
proc_close($gnuplot);
?>
前にも書いたように、PHPでグラフを作ろう!を大いに参考にさせていただいた。このサイトを見つけなければ多分私はPHPでgnuplotを操作することはできなかっただろう。ここだけではなく、他にも参照したところはもちろんたくさんある。PHP Design Patternsという本が届きました。喜んでページを開いたのですが、いきなりオブジェクト指向でした。もう隅から隅までオブジェクト。私の苦手なオブジェクト指向ですよ。日本語でもよく判らないのに、ドイツ語ですからさっぱり判りません。それでも懲りずに今度はPHP PEARという本を註文。確かにPEARに関する本は欲しかったのですが、これもドイツ語。判る訳ないのに。
![]() |
Amazon.co.jp PHP PEAR. Anwendung und Entwicklung Galileo Press GmbH (2005/06) ¥ 7,341より 出品者から通常2営業日以内に発送 |
Rを使う練習を始めた。今回は簡単な、点数分布解析を試みてみた。点数を改行、タブあるいはコンマで区切って一気に入力してヒストグラムと、最低点、中央値、平均点、最高点、分散、標準偏差を示すというものである。先ず、
<?php
$score = $_POST['score'];
if ($score==""){
echo "改行、タブ、あるいはコンマで区切った整数を入力してください。";
}else{
//入力をコンマ区切りの数字の列に変換する。
$score=ereg_replace("\x0D\x0A|\x0D|\x0A","\n",$score);
$score = ereg_replace ("\n",",",$score);
$score = ereg_replace ("\t",",",$score);
//ヒストグラム用のRのプログラムを書く。
$rfile = "a <- c(".$score;
$rfile .= ")\nbitmap(file = \"%stdout\", type=\"png256\")";
$rfile = ereg_replace (",)",")",$rfile);
$rfile .= "\nhist(a)";
file_put_contents("test.r",$rfile);
//各種統計値出力用のRのプログラムを書く。
$rfile2 = "a <- c(".$score;
$rfile2 .= ")\nprint(summary(a))\nprint(var(a))\nprint(sd(a))";
file_put_contents("test2.r",$rfile2);
//画像表示用のPHPスクリプトを画像情報として取り込む
echo "<img src='test.php'>";
//統計値を計算する。
$cmd2 = "echo 'source(\"test2.r\")' | " .
"/usr/bin/R --vanilla --slave";
$handle2 = popen($cmd2, "r");
$ret2 = "";
do{
$data2 = fread($handle2,8192);
if(strlen($data2) == 0){
break;
}
$ret2 .= $data2;
}
while(true);
pclose($handle2);
//得られた結果を整形する。
$results=split("\n",$ret2);
$res = split(" ",$results[1]);
$var = preg_replace("/\[1\] /","",$results[2]);
$sd = preg_replace("/\[1\] /","",$results[3]);
echo "<table border='1'>";
echo "<tr><td>最 低 点</td><td>中 央 値</td><td>平 均 点</td>
<td>最 高 点</td><td> 分 散 </td><td> 標準偏差 </td></tr>";
echo "<tr><td>".$res[0]."</td><td>".$res[2]."</td><td>".$res[3]."</td>
<td>".$res[5]."</td><td>".round($var,2).
"</td><td>".round($sd,2)."</td></tr>";
echo "</table>";
}
?>
うまくRへとプログラムを送り込めないので、ファイルで保存して読込むのだ。かなりみっともないやり方なので真似しない方がいいかも知れません。ヒストグラムを描く部分はこんなかんじ。
<?php
$cmd = "echo 'source(\"test.r\")' | " .
"/usr/bin/R --vanilla --slave";
$handle = popen($cmd, "r");
$ret = "";
do{
$data = fread($handle,8192);
if(strlen($data) == 0){
break;
}
$ret .= $data;
}
while(true);
pclose($handle);
header("Content-type:image/png");
echo $ret;
?>
別ファイルにして画像ファイルとして取り込まないとエラーになる。このindex.phpと同じフォルダ(ディレクトリ)にtest.rというのとtest2.rというファイルを作って、利用者に書き込み権限を与えておく。できあがったのは、こんな感じ。→点数分布解析目的は、点数解析ではない。が、もっと手際よくRへと指示を送り込みたいものだ。これではちょっとみっともないな。
bible-kjvといふのを見つけたので、試しにインストールしてみたら、ターミナルからKing James Version of the Bibleを検索するものだった。コマンドで操作できるということを何かに利用できないだろうか。検索する対称は他のテキストにもできるらしい。ちょっと使いづらいので、あまり利点はないかも。
BibShelfという蔵書管理ソフトを見つけた。"A book organizer integrating well with the GNOME desktop environment"である。ISBNが判れば自動的に埋めてくれるという機能はついている。今どきはこれくらいついていないと誰も利用しないだろう。
初めてRをPHPから操作して結果をWWWブラウザに表示させることに成功した。嬉しい。やはりドイツ語のRの本を買ったからだろうか。これからはドイツ語の本も購入の検討対象に入れようか。小説はとても読めないが、この手のものなら何とかなるかも知れない。
他にも何かあったような気がするけど、忘れてしまった。
![]() |
Amazon.co.jp Programmieren mit R Springer-Verlag GmbH (2006/10) ¥ 4,246より 出品者から通常2営業日以内に発送 |
今日は仕事で使ってゐるubuntuの6.10へのアップグレードに挑戦しようかと思ったが、いやいやまだ早いと私には珍しく慎重な態度で、予備機の方で再度練習をすることに決めた。VNCで隣の部屋のubuntuにログインして、アップグレード作業を始める。あれ? Synapticを二つ開くなとかいう警告が出るが、一つはこちら側、もう一つは隣の部屋ではないのか。どうして、二つ開くななんていう警告がでるのだろうかと思いながら、こちら側のを閉じて作業再開。ここで、もっとよく考えるべきだったのだ。
作業が終わって再起動。ん? 再起動を促す印がこちら側のメニューバーに出現するのはなぜだ。なんだか、いつの間にかアイコンが変わっていたりするのはなぜだ。画面操作は全部vncviewerの中の隣の部屋の予備機の画面だったのに、どういう訳かこちら側のubuntuがアップグレードされてしまったようだ。なぜなんだ。VNCといはそういうものなのか。やってしまったものは仕方がない。再起動だ。
あああっ、起動できない。hdb1に問題ありと云っているのか。どうやって修復すればいいのか。ふとした弾みで/etc/fstabを見たら、ドライブ名が何だか見慣れないUUIDなんとかいうのに変わっている。そこを触ったら本当に起動できなくなってしまった。ようやくReadOnlyモードでマウントして修復して、fstabをpre-UUID fstabという名に変わって保存されている古い設定と入れ替えて、起動だけはできるようになった。あまりにも慌てたものだから、自分が何をどうしたのかも覚えていない。
起動できるようにはなったが、モニターが一枚しか使えない。
sudo aticonfig --initial=dual-head Found fglrx primary device section Found fglrx secondary device sectionとかやってみても駄目。前は、4行目にNothingなんとかいう行があったような気がするが、それが出ない。再起動しても一枚モニタ。
$ fglrxinfo Xlib: extension "XFree86-DRI" missing on display ":0.0". display: :0.0 screen: 0 OpenGL vendor string: Mesa project: www.mesa3d.org OpenGL renderer string: Mesa GLX Indirect OpenGL version string: 1.2 (1.5 Mesa 6.5.1)とはどういうことだ。なぜ? 一枚のグラフィックカードのアナログ出力の方は問題ないのだが、デジタル出力の方が認識できない。そんなことってあるのか。
sudo dpkg-reconfigure xserver-xorgで再設定してみたり、
sudo ln -s /usr/lib/dri /usr/lib/xorg/modules/driなんてことをしてみたり、xorg.conf.に
Section "Extensions"
Option "Composite" "disable"
EndSection
などという三行を追加してみたりしたが、どれも効果なし……どころか、アプリケーションを開くと画面が反応しなくなるようになった。6.10にアップグレードしたら、Xlib: extension "XFree86-DRI" missing on display ":0.0".という状況に陥ってどうにも正常化できないという報告がいくつも見られるので、私にはどうにもできない6.10固有の問題なのかも。ああ、一日損した。しばらく一枚モニタで仕事をしなければならないのか。
『新潮文庫の100冊』の方も使えるようにしておこう。一つずつファイルを処理していたら遅くて苛々することは昨日思い知ったので、いつものようにHyperEstraierの助けを借りることにする。今度は歴史的仮名遣いの文章はないと思うので、並べ替えもできるようにしてみよう。これももうスクリプトは前に作ってあるのを使えばいいから簡単である。検索ページは三つ用意した。一つは、並べ替えなし。PHPで書いていて、ファイルを一つずつ開いては一行ずつ処理していくので実に遅い。動いていないんじゃないかと思うくらい遅い。サーバーに負担がかかるからこんなものを置いておくのはやめようかと思うくらい遅い。ただ、取りこぼしが少ないという利点はある。気の長い人向け。二つ目は、Rubyで書いていて、並べ替えはなしなので形態素解析とかMySQLへの保存などがなく、すぐに結果を見せてくれるもの。もう一つはRubyで書いていて、並べ替え可能だけれども少し遅い。Ruby版は原因不明のInternal Server Errorとかアクセス禁止とかいう表示を出されてしまうことがある。それから、PHPの一行ずつ処理して得られたものよりも、表示される結果の数が少ない。どれも、右の緑のタイトルをクリックすると該当個所数行分が表示できる。もちろん、全文は読めない。問題は、こちらの方では著者名が入っていないので、誰の作品だか覚えていないものはよく判らないこと、さらにひどいときは第弐章なんて書いてあって、作品名すら判らない場合もある。昨日記したサイトで、ファイル名と作品との対応表を入手できるので、それさえあれば確認できるが実に面倒くさい。対応表を使って表示させる仕組みを作ることは可能だとはいえ、怠け者なのでこのまま放置しそうな予感がしている。
●新潮文庫の100冊検索:PHP版並べ替え機能なし(遅い!)あ、制御文字が残っているファイルがあるではないか! そのうち何とかしよう。今日はもう休みます。
しかし、自分でも何を対象にどんな検索ができるのか判らなくなってきた。今度整理しなくては。
![]() |
Amazon.co.jp 新潮文庫 明治の文豪 新潮社/NECインターチャネル (1997/1) 新品/ユーズド価格: ¥ 7,350より 出品者から通常2営業日以内に発送 |
なんだ、オンラインでアップグレードできるじゃないか。ここの下の方に書いてある指示に従って、さっそくアップグレードである。しかし、毎日仕事で使うものでいきなり実行するのは怖いので、静かにデータ収集をしているFMV6550CL4eで試してみる。なるほど、ALT-F2を押して、gksu "update-manager -c"を実行するだけではないか。簡単だ。実行すると、「アップグレードには数時間かかり、今後一切キャンセルできない」旨の警告が出る。もちろん、それくらいは覚悟しているので、迷わず実行。作業はなかなか順調に進んで2時間もかからずに終わるんじゃないかと期待していたそのとき!
This upgrade requires that the /usr/X11R6/bin directory be removed and replaced with a symlink. An attempt was made to do so, but it failed, most likely because the directory is not yet empty. You must move the files that are currently in the directory out of the way so that the installation can complete. If you like, you may move them back after the symlink is in place. This package installation will now fail and exit so that you can do this. Please re-run your upgrade procedure after you have cleaned out the directory.というエラーが出たのだった。え? /usr/X11R6/binを一旦削除しなければならないと云いたいのか。と思って空っぽにしてやって作業を続けようと思ったのだが、終了してしまった。どうしよう……
不安を抱きつつ、再度「gksu "update-manager -c"」を行なうと、
何らかのソフトウェアがインストールないし削除できません。 "Synaptic" パッケージマネージャを使用するか、 まずこの問題を解決するために "sudo apt-get install -f" コマンドをターミナルで実行してください。云われたとおりに、sudo apt-get install -fをターミナルで実行すると、X11-commonがインストールされるようだ。しかし、
続行しますか [Y/n]? Y パッケージを事前設定しています ... (データベースを読み込んでいます... 現在 110097 個のファイルとディレクトリがイン ストールされています。) x11-common 7.0.0-0ubuntu45 を(.../x11-common_1%3a7.1.1ubuntu6_i386.deb で)置換するための準備をしています... x11-common を展開し、置換しています... dpkg: /var/cache/apt/archives/x11-common_1%3a7.1.1ubuntu6_i386.deb の読み込みエ ラーです(--unpack): `/usr/X11R6/bin'を上書きしようとしています。これはパッケージ kterm にも 含まれています。 以下のパッケージの処理中にエラーが発生しました: /var/cache/apt/archives/x11-common_1%3a7.1.1ubuntu6_i386.deb E: Sub-process /usr/bin/dpkg returned an error code (1)ネットの助けを借りて、こういうときは、
sudo dpkg -i --force-overwrite /var/cache/apt/archives/x11-common_1 %3a7.1.1ubuntu6_i386.debとしてやれば、先に進むようになるらしい(本当は一行で入力する)。そして、再度sudo apt-get install -fを実行。続いて、gksu "update-manager -c"で、アップグレードするが、以下のものが残ってしまう。
すべてのアップデートをインストールすることができません ほかのソフトを削除しなければならないアップデートがあります。 完全にアップグレードするためにはパッケージマネージャ "Synaptic" の "すべてのアップグレードににマーク"機能を使うか。 端末から "sudo apt-get dist-upgrade" を実行してください。というので、ここは云われたとおりに sudo apt-get dist-upgrade を実行。そして、もう一回6.10へのアップグレード作業を最初に戻って行う(といっても、ダウンロード作業など、最初にエラーがでたところまでは終了している)。ようやく作業が完了し、再起動。これで4時間以上かかってしまった。
再起動したら、vncが使えなくなった。許可がないとかで拒否されるのだ。これは困った。これに繋いであるモニタは壊れていて、ほとんどの作業はvncで行なっているのに。ssh -Xはどうなんだろうと思ってBluefishを動かそうとしてみると、
$ bluefish connect localhost port 6000: Connection refused The application 'bluefish' lost its connection to the display localhost:10.0; most likely the X server was shut down or you killed/destroyedとなってしまうのだ。私にはもう判らない。nfsによる共有は最初は調子が悪かったが、ディレクトリの所有者とか閲覧権限を修正したら戻ったようだ。よく判らない。壊れたモニタで何とか判読した限りでは、少なくとも「サービスの設定」はちゃんと使えるようになっていた。
そういうときは、ここを参考にすると昔から決まっている(と思う)。
#!/usr/local/bin/perl -ni.bak
{
print ~$_;
}
というファイルを作って、shincho.plとでも名付けてテキストファイルと同じフォルダ(ディレクトリ)に保存し、実行権を附与。そうそう、ファイル名の末尾が81番以降は解説なので、私は使わなかった。00番も不要。拡張子にtxtとTXTがあるのが面倒くさい。フォルダを探してテキストファイルを集めて、拡張子を小文字に揃えるスクリプトを書いてファイルを集めたけれども、今回はそれは省略。
perl shincho.pl *.txtとすれば、一気に全部テキスト化できる。簡単である。しかし、これでできたファイルには制御文字がたくさん入っているのだ。フォント指定とか、脚注、訳註、ルビなどである。これを整理するスクリプトは、私はPHPで書いた。こんな感じ。
<?php
foreach (glob("*.txt") as $filename){
echo "Filename:".$filename."\n";
$content=file_get_contents($filename);
$content=mb_convert_encoding($content,"UTF-8","SJIS");
$content=ereg_replace("\x0D\x0A|\x0D|\x0A","\n",$content);
$content=preg_replace("/<.*?>/","",$content);
$content=preg_replace("/^Tr.*?^Qr/","",$content);
$content=preg_replace("/^QR/","",$content);
$content=preg_replace("/^Tafootnote.*?a/","",$content);
$content=ereg_replace("^Q^R","",$content);
$content=ereg_replace("^R^Q","",$content);
$content=ereg_replace("^Q","",$content);
$content=ereg_replace("^L","",$content);
$content=ereg_replace("A","",$content);
$content=ereg_replace("^Z給\?\?\?\?\?","",$content);
file_put_contents(ereg_replace("txt","utf8",$filename),$content);
}
?>
よく判らないけど、これでUTF8になってすっきりしたテキストファイルができたみたいだ。597個のファイルになったようだ。100冊だけど、長い作品は幾つかに分割されているし、短篇集は各作品毎に1ファイルになっているから。で、例によってKWIC検索。前に作ったファイルがあったので、開いてみた。これは今の私なら絶対に書かないような手順である。前の方がよく判っていたのかと思えて、悲しくなってきた。
<?php
$key = $_POST['word'];
if ($key==""){
echo "検索語を入力してください。";
}else{
foreach (glob("*.utf8") as $filename) {
$contents = file_get_contents ($filename);
$title = substr ($contents, 0, 15);
$contents = str_replace("\n", " ", $contents);
$offset = 0;
$result = 0;
do {
$result = mb_strpos ($contents, $key, $offset);
if ($result === FALSE) {
break;
} else {
echo "<li>";
$sentence=mb_strimwidth($contents, $result-20, 96);
$sentence = str_replace("…", "・", $sentence);
$sentence = str_replace("―", "ー", $sentence);
$sentence=str_replace($key, "<em>".$key."</em>", $sentence);
echo $sentence;
echo "<a href='", $filename, "' target='_blank'>", $title, "</a>|";
echo "<a href='show.php?position=", $result, "&key=",
$key, "&filename=", $filename, "' target='_blank'>#</a></li>";
$offset = $result + 1;
}
} while ($result == TRUE) ;
}
}
?>
前に青空文庫で検索してみた「たらたら」を検索するとこんな感じ。右の緑の文字をクリックすると該当作品が表示される。私には全部見えるが、これを公開すると法律違反だ。しかし、思いの外おそい! 595個のファイルを順に処理していくと遅いのだろうか。ここでは、改行を空白に変更しているけれども、改行は改行にしておいたいいのではないだろうか。少し作りかえてから使おうか。
![]() |
Amazon.co.jp シェイクスピア大全 CD-ROM版 新潮社/NECインターチャネル (2003/4) ¥ 28,140 (税込) 在庫あり |
今日はGraphvizを試してみた。さっき見つけたばかりなのだが。実は、こういうグラフはどうやって描けばいいのだろうと前から気になっていたのだ。今後、何かと役立つかも知れない。まずはMacOSXの方から。sourceをダウンロードして、configure→make→make installで簡単にインストールできた。そこで、
digraph jsample {
node [color=Red,fontname=HeiseiMincho]
edge [color=Blue]
"VP" -> "NP1";
"VP" -> "V'";
"V'" -> "NP2";
"V'" -> "V";
"子供が" [shape=box,color=Black];
"枝を" [shape=box,color=Black];
"折った" [shape=box,color=Black];
"NP1" -> "子供が" [dir=none,color=Black];
"NP2" -> "枝を" [dir=none,color=Black];
"V" -> "折った" [dir=none,color=Black];
}
というテキストファイルを作ってjsample.dotとして保存。
dot -Tpng jsample.dot -o jsample.pngとやってみると、こんなになってしまった。Error: Could not find/open font : HeiseiMinchoというエラーが出ている。フォントが判らないようだ。困った。
しかし、MacOSXには専用のgraphvizがあるのだ。早速ダウンロードして、そこからファイルを「開く」とやってみると、こういう結果に。日本語フォントもちゃんと表示できている。しかし、これではPHPやRubyからコマンドを送って操作することはできない。どうしようか。
では、続けてVine Linuxでやってみよう。Linuxなら問題なくできるだろうと思ったら、エラーが出てしまった。どうしようと思っていたら、Vineにはもうパッケージが用意されていた。そこで、Synapticでインストール。でも、v1.12だ。ちょっと古いんじゃないか。いや、MacOSX版も1.12だからいいか。ああっ、フォントの認識がやはりできない。どうすれがいいのだ。Courierだけは指定できたのだが、もちろん日本語は表示できない。
Graphvizは、実はRについて調べていたときにたまたま見つけたのだった。PHPからRを操作したいのだが、まだうまくできない。で、こんな本を買ってみた。なるほど、こんなふうに使えるのかと感心しながら読んでしまったが、今探していることは見つからなかった。
![]() |
Amazon.co.jp はじめてのS‐PLUS/R言語プログラミング オーム社 (2005/11) ¥ 2,940 (税込) 在庫あり |