N-gram 解説記事を展開しました

GitHub にはすでにサンプルを上げてありますが、N-gram 解説記事を新たに展開しました。

使い古されてあまり顧みられなくなった感のある N-gram ですが、実装が簡単な割には厳密な検索が可能なので、個人的には重宝しています。

解説記事はネットに多数掲載されていますが、他の検索エンジン技術と比較するときに対象記事があったほうが便利なので書いてみました。

振り返ってみると、あまり万人向けの解説になっていませんね..。

GitHub に検索エンジンソースを追加

GitHub.com に検索エンジンのソースコードを追加しました。

まだ N-gram ベースのプログラムしかありませんが、おいおい他のテクノロジーベースのエンジンも収録していきたいと思っています。

詳細はそのうちホームページに記述したいと思いますが、プログラムは以下のような構成になっています。

  • scayping.py: トップページを指定するとその下にある全てのページを取得し、検索用の3つのファイルを作ります。(ただし、ブログは収録しないようになっています。)
  • search.php: 検索エンジンのラッパーで、UI を与えるためのプログラムです。
  • search_engine.php: 検索エンジンの本体で、bi-gram による検索を実行します。

なお、前の記事にも書いたとおり、まだ And/Or 検索条件が書けません。

検索エンジン追加

N-gram ベースの検索エンジンが動くようになりました。結局、索引ファイルの作成は python3 で、検索エンジンは php で組んでみました。

索引ファイルはここでは作成できないので、別のマシンで随時作成したものをアップロードします(ちょっとださい)。

なお、検索対象はホームページ側の記事のみで、ブログ記事は検索されません。ブログを検索したい場合はブログの中で検索をかけてください。

And/Or 検索も実装されていませんが、そのうち実装したいと思います。

しかし、たったこれだけ実装するのに1日かかるとは、コーディングの実力が落ちたもんだ。。。

検索エンジン(2)

今更クローラを C で組みたくないな、と思い始めた。

XML と違って HTML は独特の書き方をするサイトもあるので、結構クローリングは大変なのである。N-gram を収容するファイルのフォーマットは大体決まったので、python か何かのクローリングライブラリを使おうかと思う。

N-gram ファイルの概要

明日は仕事が休みらしいので、ヒマがあれば片付けてしまおう。

検索エンジンどうしようか

しばらく前から Google のサイト内検索を使うサイトばかりになって、自力で検索エンジンを組み立てることがなくなった。

しかし、Google だと正確な and/or 検索をさせることができなくってしまったので、自前のエンジンが欲しいことがある。

どうせヒマになるし、また作ってみることにした。今度は転置行列は C で記述するが、検索は PHP で行うことを目標とする。(このサイトがユーザコマンドの実行を許していないようだという事情もある。)

ちょっとまだるっこしいが、ページが増える度に外からクローリングしてページを収集し、転置行列を生成して戻すというやり方でやってみることにする。

BOMのワナ

ホームページの、先頭の数ページを作成した。

フォーム問い合わせで SecurImage を使おうとしたら start_session() が warning を出して止まってしまった。原因は encoding で BOM つきの UTF-8 を使っていたことにあった。

BOM は大概のエディタでは目に見えないので、エンコードを確認するしかないのだが、どうもいつも失敗している気がする。

技術ページをいくつか作ったらまた Amazon に申請してみますか。

Amazon の審査に落ちた

単に書籍紹介時にリンクを張りたいというだけの理由で、Amazon のアフィリエイトに応募したが、あえなく落選してしまった。

理由はこのサイトに載っているコンテンツが少なすぎるので、もう少し拡充してから登録してください、というものだった。

とは言え、どこまで拡充すればよしとするのか審査基準が書いてない。

まあ、確かにトップページとこのブログしか置いていないようなシンプルすぎるサイトなので、目的が分からないというのは分からないでもないですが。

トップサイトを拡充したらもう1度挑戦してみることにしよう。

ベイズ統計を勉強中

ベイズ統計の基礎を学ぼうと思って、本を買ってきた。

[amazon_link asins=’4254122128′ template=’ProductCarousel’ store=’teqstock-22′ marketplace=’JP’ link_id=’46bacb08-9c9b-11e7-82a5-3987ea029436′]

ベイズ統計はベイズの定理

p(B|A) = \frac{p(A|B) p(B)}{p(A)}

に尽きるが、p(B)p(A) をどう設定するか任意性があるところが若干引っかかる点です。

後は独立な事象が来たらベイズ更新で p(B|A) を更新していくと p(B), p(A) の記憶が薄らいでいくというのが、肝かなと思いました。

後は Stan/R, NumPy を使って演習問題を解けばよいのだが、これがなかなか大変。

高騰するPC

スマホシフトによって、pc用のDRAMが高騰していると言う。

確かに、パソコン販売サイトを見ても、徐々に価格が上がってきている感じだ。

cpuやgpuは高機能化、高価格化の方向だから、組み上げた時の値段が上がってしまうのだろう。

どこかに書いたが、私が実行しようとしているシミュレーションはメインメモリが1TB程度必要だ。

5年後には手が届く価格になるかと思ったが、ムーアの法則も成り立たなくなりそうだし、年金生活に突入したらますます遠のいてしまうのだろうか。

残念。

 

最近プログラム書いてない…

引っ越してこの方、まともなプログラムを書いていない。

仕事で疲れ切って、趣味のコーディングまで手が回らないためなのだが。

でも本は買いまくっているので、家に溢れる一方。大枚をはたいて買ったメインメモリ 128GB 10コア PC はほこりをかぶるだけ。(今なら GB110 が欲しいところですな)

うーむ、何とかせねば。腕が鈍ってしまうぞ。