2017年9月15日金曜日

ojizoのWebクローラーは3種に分類しています

Webは常に変わり続けるため、適切な間隔でクローリングを続ける必要があります。
これが難しい。
昔は更新頻度を見て、ページを再訪する間隔を調整できました。
今は動的生成が多いので、ページの主たるコンテンツが変わっていないか判断しないとなりません。
アルゴリズムで主コンテンツを見抜くのは大変です。

ここはojizoらしく、おおよそで調整することにしました。
いろいろなクロール設定を試してきましたが、およそ3種類に分けられることが分かりました。

・大半のページは3階層目まで
・更新頻度が高いページは特製の正規表現で1階層目まで
・良質なコンテンツを多数保有するサイトは深くまで

ojizoのDefault Crawlerは、主ページから3階層目までを巡回するようにしています。
現在は3日で500万ページを巡回するため、2週間以内に全件をクロールできる設計です。
Fessでは「状態」を「有効」にしておきます。

続いて、更新頻度が高いページ。
報道なんかが該当します。
これはサイトごとに正規表現を駆使して、頻度が高い有用なページだけを巡回します。
Fessでは「状態」を「無効」にして、Webクローラーを新しく作成して対応します。

最後に深いクローラー。
これも、コンテンツに関連するページだけを巡回するよう、サイトごとに正規表現を調整します。
これも「状態」を「無効」にして、Default Crawlerと分離して管理します。

サイトの全件をくまなくクロールさせるのは困難です。
ある程度、割り切りをうまくつけてゆきたいと思います。

2017年9月13日水曜日

大公開、ojizoの作り方

ojizo(旧Nyafoo!)はオープンソースのFessを使って構築しています。
ですので、ojizoというかFessベースのWeb検索エンジンは、誰でも作れるといえば作れるサービスです。

ひとつだけ面倒臭いというか、莫迦莫迦しい所がホワイトリストを使っていることでしょう。

隠すほどの事ではないので種明かしすると、ojizoはURL正規表現の塊です。
それ以外は、全部Fessです。
5,000サイト以上を正規表現で記述しています。
ひょっとしたら1万サイトを超えているかもしれません。
僕にも正確な数がわからない状態です。

1万サイトを目視して、URLリストを作り、正規表現で巡回先を記述したのか?
正解。
技術もへったくれもありません。

莫迦だと思った人は正しいです。
そう、ojizoは莫迦莫迦しい作業を積み重ねてできています。

例えば、新聞社がありますよね。
日本に100社ぐらいあるのですが、これをひとつひとつ目視で確認して、正規表現で記述してFessに登録します。

上場企業は2,000社近くありますが、これもひとつひとつ目視します。

都道府県庁、自治体、観光協会、農協、その他。
ひとつひとつ調べ、テキストエディタにURLを保存して、正規表現で巡回先を記述して、Fessに登録します。

登録して、クローラーを巡回させて、うまく行かないところは手直しして。
これを数千回繰り返します。

Yahoo! JAPANですら、人手によるサイト登録はあきらめてしまいました。
祖業であるディレクトリを終了するそうです。

巨人から見たら、ディレクトリを作るのは割に合わないのでしょう。
でも、巨人があきらめたから生まれる市場もあると思うんですよね。
なので、自分が嫌になるまでojizoのリストを作り続けようと思います。

2017年9月12日火曜日

「当たる」検索エンジンを作るには

「当たる」検索エンジンって何でしょうか。

入力されたクエリ(キーワード)に沿ったページが出てくるもの。
これが当たる検索エンジンと言えるでしょう。

当たる検索エンジンを作る基礎が、インデックス数、形態素解析、評点(ランキング)の3つだと思います。

インデックス数は蓄積したWebページの数ですね。
インデックスに無いものは探すことができません。
ちなみに現在、ojizoのインデックスは1,400万件を超えています。
初期の商用検索エンジンぐらいの規模でしょうか。
Googleがダントツで凄かった理由の一つでもあります。
当時の検索エンジンは、Sunのワークステーションとインクトミなどの商用検索システムで構築されていました。
どっちも高価です。
対して、GoogleはGFS(Google File System)という、ホワイトボックス(組み立てパソコン)を大量にLANに接続して、大規模なインデックスを保存する仕組みを持っていました。
PageRankだけでなく、インデックスを安価に蓄積できる仕組みも持っていたんですね。

続いて、形態素解析。
普通に暮らしていたら、まず聞かない単語だと思います。
形態素解析。
これは、日本語のように単語が特定のルールで区切られない言語で必要な分野です。
英語はすべての単語がスペースで区切られるルールになっています。
すべて。100%。これはコンピュータには都合が良いルールです。
対して、日本語は明確な区切り文字がありません。
形態素を使わずに、単純に「京都」に合致する文書を「当たり」と見なすとどうなるでしょう。
「東京都」まで合致してしまいます。
このため、「京都」は京都だけど、「東京都」は京都じゃない、という処理が必要です。
これが形態素解析の概略です。
(実は僕もあまり詳しくないです)

最後に評点。クエリに対して一定のアルゴリズムで評価を加え、適合度順に並べます。
初期の検索エンジンは、単語の出現度合いや単語間の距離などで評価していました。
Google躍進のきっかけになったPageRankも評点のアルゴリズムです。
今のGoogleはPageRankの割合は低いと聞きます。
もっと複雑なアルゴリズムを使っているのでしょう。
ojizoの評価アルゴリズムは、ものすごく原始的で単純です。
ojizoでは、単純なアルゴリズムで満足のゆく結果を得るために、インデックスするコンテンツを限定する方向でサービスを組み立てています。
Googleと真逆の考え方ですね。

Fessは優れたパッケージで、すぐに検索システムを立ち上げることが可能です。
みなさんも、興味を持った分野から研究してはいかがでしょうか。

2017年9月10日日曜日

ojizoイメージイラストを公開しました

7月から準備を進めていた、ojizoのイメージイラストが完成しました。支援者限定コンテンツです。

公開サイト(Enty)
https://enty.jp/x8Yel22

「カフェちゃんとブレークタイム」など、多方面で活躍しているポルリン先生に、キャラデザインとイラストをお願いしました。

旧Nyafoo!のイメージを生かしながら、元気で知的な感じに描いてもらえたと思っています。

こんな感じの子です。

「Entyの支援金を集め、クリエイターに適正な報酬を支払って、オリジナルのコンテンツを拡充する」という、僕のもう一つのモデルが動き始めました。
これから、オリジナルのコンテンツを増やしてゆきますので、今後ともよろしくお願いいたします。