振り返ってみて

去年の2月に着想して、提案して、1年間、C言語でN-gramベースの全文検索エンジンの実装を毎日やってた。だいぶ詳しくなりました。 なんとかできあがったので、振り返ってみる。性能って結局のところ I/Oコストの削減 CPUコストの削減 という結論に至りました…

文字列操作

NLP

こんな良書が出ていたとは知りませんでした。すぐに買いました。高速文字列解析の世界――データ圧縮・全文検索・テキストマイニング (確率と情報の科学)作者: 岡野原大輔出版社/メーカー: 岩波書店発売日: 2012/12/27メディア: 単行本購入: 11人 クリック: 29…

初詣

1/5に世界遺産の下鴨神社に初詣に行きました。下鴨神社が通称だとは知らなかった。正式名称は、「賀茂御祖神社」というらしい。http://www.shimogamo-jinja.or.jp/実は去年も行ったのですが、今年も行くことにしました。なんとなく雰囲気とかが好きです。夏…

Javaで整数列圧縮(4)

前回作成したBitBufferクラスを使って、Gamma Codeを実装します。Gamma Code自体は、すでに説明したので、そのコードを以下に示します。 /** * * <p> * Gamma Codeによる整数値圧縮を実装するクラスである。 * </p> * */ public class GammaCode { /** 圧縮対象の整…

Javaで整数列圧縮(3)

さて、JavaでGamma Codeを実装していくわけですが、ビット単位でデータの入出力を行えるクラスが必要です。まずは、そのクラスを作ります。データは、ビット単位で入力され、ビット単位で出力されることになりますが、Javaではバイト単位でしか管理できませ…

Media Goに曲を追加する方法

個人的メモ。 iTunesを使っていてMedia Goに曲を追加する場合は、Media GoでiTunesフォルダを監視対象にしておく。 iTunesでCDをインポートする。 Media Goを起動する。 これで、Media Goの起動時にiTunesにインポートした曲を参照することができる。

Javaで整数列圧縮(2)

前回説明した可変バイトコード(Variable Byte Code)は、最小でも1バイトでしか圧縮できませんでした(以下では、VBCodeと表記します)。これは、1や2のような非常に小さな数値でも1バイト必要ということです。つまり、まだ無駄な部分があるのです。例えば、2進…

いろいろあって

Twitterを始めることにしました。https://mobile.twitter.com/ryokkieええ、それだけです。

Javaで整数列圧縮(1)

整数列圧縮について、Variable Byte CodeからNew PForまで実装してみて、実験してみようと思います。整数列の圧縮はいろんなところで使われていて、身近なところでは、検索エンジンの文書IDの圧縮に使われることが多い。なぜ、圧縮が必要かと言うと、通常、i…

腹八分目

12/1に嵐山の天龍寺に紅葉を見に行った。雨が降っていたこともあって、人はまだマシというぐらいの少なさだった。それでも多かったけど。たぶん、2月ぐらいに行けば空いているのでは?と思う。天龍寺は、靴を脱いで中に入れて、畳の上から庭を鑑賞できる。か…

冬休みの目標

最近、忙しすぎて、いつぞやに公開したライブラリをまったく更新できてない。http://code.google.com/p/sbvj/ただ、更新する意思はあったので、実装すべきことの検討は、通勤時間で煮詰めた。 あとは、まとまった時間があれば一気にできると思う。 今年は、…

紅葉が見頃

最近、装備が揃ってきたので、山に行きたくてしょうがない。防水の靴とか買いました。KEEN(キーン) Pyrenees Boot(ピレネーブーツ) 1227 SYRP シロップ シロップ 28.0cmメディア: ウェア&シューズこの商品を含むブログを見る良い天気だったので、2時間ぐらい…

iTunesからMedia Go

今まで使ってたiTunesからXperiaに音楽を転送できないので、Media Goを使うことにした。ちなみに、XperiaをWindwos 7のPCに繋ぐとインストールするかどうか聞いてくるので、インストールはすぐにできる。 iTunesで管理していた曲を移すのめんどうだなぁと思…

機種変更

自分にとって最初のスマホだったMEDIAS(N-04C)からXperia AX(SO-01E)に乗り換えました。乗り換えた理由としては、 バッテリーがかなりへたってた カメラの性能がしょぼい(どうしてもデジカメで撮りたくなってしまう) 音楽を聞きずらい(iPod Classicを常に持…

Tera Termでビープ音を消す方法

個人的なメモ。以下のブログを参考にした。http://blog.livedoor.jp/handling/archives/65512584.htmlWindows7の場合、以下のパスに移動する。 C:\Program Files (x86)\teraterm「TERATERM.INI」を開く。以下の行を編集する。 編集前: ; Beep by BEL (on/off…

せんとくんってまぁまぁだよね

11/2に奈良国立博物館でやっている正倉院展に行ってきました。近鉄奈良駅では、せんとくんがお出迎えしてくれました。当時、あれだけ評判が悪かったけど、他の都市のゆるキャラを見ていたらせんとくんなんてかなりできがいいほうだと思えてきた。 こういう絵…

フェルメールは日本人に人気やね

神戸で開催しているマリッツハウス美術館展に行ってきました。 フェルメールは、別の場所でも見たけど、「真珠の耳飾りの少女」は見れなかったので、行きました。http://www.asahi.com/mauritshuis2012/土曜日の昼だったこともあって、30分待ちぐらいで、人…

大山崎山荘

ずっと行こうと思ってたけどなかなか行かなかった大山崎山荘についに行きました。建物は、神戸の異人館っぽい内装です。ステンドグラスがとても美しくて良かったです。 併設している美術館には、モネやルノワールの絵があります。 数は多くないですが、モネ…

鹿児島旅行

2泊3日で鹿児島に旅行してきた。以下のようなところを楽しんだ。 霧島神宮 霧島アートの森 黒豚しゃぶしゃぶ 指宿のたまて箱(指宿列車) 砂むし風呂 指宿のおしゃれランチ 桜島 霧島神宮 入り口。鳥居。境内までの道のり。境内。凄く手入れされた良い神社だっ…

Wikipediaからのテキスト抽出

NLP

個人レベルでいろいろテキストを解析して遊びたい時になかなか簡単に利用できるまとまったテキスト集合を入手しにくいです。 そんな時は、Wikipediaのテキストを利用しましょう。Wikipediaはかなりよくできたシステムであり、定期的に全記事をアーカイブして…

エヴァンゲリオンがさらにわかる動画

あぁ、こんな話だったなぁ。 わかりやすくまとまっている。もうじき劇場版をやるみたいだけど、前みたいに投げ出していないか気になる。

MeCabのipadic辞書への単語追加(ドメイン適応)

NLP

mecab-ipadicのCRF学習モデルが追加されたことにより、辞書に単語を追加しやすくなったようだ。http://sourceforge.jp/projects/mecab/lists/archive/users/2012-June/000456.html以前のMeCabの場合、単語追加をする場合は、追加したい単語と似ている単語の…

Nine Algorithms

夏休みの暇な時間に本を読もうと思って、タイトルに惹かれて以下の本を読んでみた。世界でもっとも強力な9のアルゴリズム作者: ジョン・マコーミック,長尾高弘出版社/メーカー: 日経BP社発売日: 2012/07/19メディア: 単行本購入: 4人 クリック: 248回この商…

JavaでWavelet Tree(7)

さて、別な形のWavelet Treeに対して、rank操作とselect操作を行ってみますが、実際の実装のWavelet Treeに変換してみようと思います。まず、今まで、見てきたWavelet Treeは、以下です。ここで、各ノードに必要なのは、簡潔ビットベクトルだけなので、Sの情…

夏野菜冷やしカレー蕎麦

夏バテ気味なので、さっぱりしたものを食べようと思い、北新地にある「そば処 とき」に行きました。http://tabelog.com/osaka/A2701/A270101/27000217/もちろん食べログで予習済みなので、行く前から狙っていた「夏野菜冷やしカレー蕎麦」を食べました。カレ…

京都散策(2)

以下のルートで京都を楽しんできました。 御幸町通りの「みます屋 おくどはん」で昼御飯を食べる。 京都国立近代美術館で「KATAGAMI展」を楽しむ。 蹴上インクラインを「グリコ遊び」をしながら歩く。 ビールを飲みながら鴨川の「京の七夕」に参加する。 先…

百魚繚乱展

海遊館の「百魚繚乱展」に行ってきた。http://www.kaiyukan.com/topics/2012/07/post.html久しぶりに海遊館に行ったがいろいろ営業努力が見えて楽しかった。 Nintendo DSを使った解説を導入していたりして、子供が楽しめるように配慮している。 エサやりタイ…

JavaでWavelet Tree(6)

懐かしいわ~。作業がかなり中断しましたが、Wavelet Treeに対するrank操作とselect操作について説明していきます。 rank操作とselect操作は、以下のような操作です。 rank(i, c) : i-1の位置までに現れるcの数を取得する。 select(i, c) : i-1番目に現れるc…

マリンショップ

去年の経験から、足首を守るために、マリンブーツを梅田で探していたけど、なかなかヨット用のものを見つけることができなかった。 ってか、ダイビング系のショップやアウトドア系のショップはあるけど、なかなかヨット用のものを置いているショップはなかっ…

JavaでWavelet Tree(5)

さて、Wavelet Treeの解説を続けます。前回までで、文字をグループ化することで、簡潔ビットベクトルで表現できることがわかりました。 このとき、文字のグループに対するrank操作とselect操作は可能ですが、文字に対するrank操作とselect操作はできません。…

GT5で頭文字Dの名シーンを再現してみた

クォリティーすげー。

JavaでWavelet Tree(4)

仕事が忙しくてなかなか更新できなかったのですが、任意の文字列に対するrank操作とselect操作を実現するWavelet Treeについて実装を進めていきます。さて、前回までは、Wavelet Treeを利用しない強引なやり方で、任意の文字列に対するrank操作とselect操作…

JavaでWavelet Tree(3)

さて、任意の文字列に対するrank操作とselect操作を簡潔ビットベクトルで実現してみます。簡潔ビットベクトルは自作のsbvjという簡潔ビットベクトルのライブラリを利用します。http://code.google.com/p/sbvj/sbvjを利用すると以下のようなコードで実現でき…

JavaでWavelet Tree(2)

さて、任意の文字列に対するrank操作とselect操作を行えるようにしていきます。これを実現するための簡単な方法の一つとして、簡潔ビットベクトルを利用するやり方があります。 ビットベクトルは、0と1がひたすら並んでいるデータ構造です。このとき、任意の…

JavaでWavelet Tree(1)

さて、JavaでWavelet Treeを構築してみようと思います。Wavelet Treeは、任意の文字列に対してrank操作とselect操作を効率良く行えるようにしたデータ構造です。 まず、Wavelet Treeの説明は、簡潔ビットベクトルの知識を前提とします。簡潔ビットベクトルに…

Backward Search

NLP

以下の論文で、Compressed Suffix Arrayについて全体を俯瞰した。 Compressed Full-Text Indexes. Navarro and Makinen, ACM Computing Surveys, 2007. http://www.cs.helsinki.fi/u/vmakinen/papers/survey.pdf 毎日の通勤の30分ぐらいで、少しずつ読み進め…

紫陽花

アジサイで有名な宇治の三室戸寺に行ってきた。 昨日が雨で、少し天気が回復したということもあり、人がかなり多かった。まだ、満開ってわけではないと思うけど、けっこうキレイに咲いていた。アジサイの花の色は、土の中の成分で決まるらしい。 土の中が酸…

コードカバレッジ

Javaでの自動テストのためにJUnit4を使ってみた。 Visual Studio 2010の自動テストは使ったことがあったので、それほど違和感なく使うことができた。一応、プロなので、コードカバレッジも知りたいと思って、やり方を調べてたら、「Eclipse + JUnit + EclEmm…

Javaで簡潔ビットベクトル(27)

クラスの使い方をざっくりと書いたJavadocをアップしました。http://code.google.com/p/sbvj/現在、JUnitによるテストを進めています。 テストが完了したら、0.0.3としてアップロードしようと思います。

カンボジア

去年ですが、カンボジアのアンコール遺跡を旅行したので、写真をアップしておきます。http://f.hatena.ne.jp/ryokkie/%E3%82%AB%E3%83%B3%E3%83%9C%E3%82%B8%E3%82%A2/一番、お気に入りの写真は、アンコール・トム遺跡を正面から撮った以下の写真です。旅行…

Javaで簡潔ビットベクトル(26)

さて、sbvjで実装している定数時間のselect操作について説明してみたいと思います。まず、rank操作とselect操作の定義を示します。 rank操作とは、ビットベクトルBとして、b=(0 or 1)がiまでに出現する数を求める操作です。 また、b=1の場合のrank操作をrank…

Javaで簡潔ビットベクトル(25)

FF6のボス戦の曲は最高です。作業をかなり妨害されたわけですが、前回の記事で性能測定した定数時間のselectをsbvjに実装したので、以下で公開します。http://code.google.com/p/sbvj/sbvj-0.0.2.jarをダウンロードして、インポートするだけで使えます。以下…

Javaで簡潔ビットベクトル(24)

定数時間のselectを実装してみようと思い、以下の論文の手法を実装してみた。Fast Computation of Rank and Select Functions for Succinct Representation. Joong Chae NA, et al., IEICE, 2009.前回の性能測定と同様の条件で、性能測定を行ってみた。 「si…

初心者セーリング教室(2日目〜3日目)

2日目〜3日目は、「2人1組 + インストラクター」の構成で、5時間/日ぐらい乗りました。2人乗りのヨットの場合、1人が前方のジブセイルという少し小さな帆を操作し、もう一人がメインセイルという中心の帆を操作しながら舵を操作します。ジブセイルを操作する…

Javaで簡潔ビットベクトル(23)

sbvjを作りながらふと今時は、64bitアーキテクチャに最適化しないといけないなぁと思って、64bitアーキテクチャに最適化した簡潔ビットベクトルがあるのかなぁと思って調べてみたら以下のような論文があった。Broadword Implementation of Rank/Select Queri…

Javaで簡潔ビットベクトル(22)

GW中に長崎〜熊本を旅行しながら新幹線での移動時間と寝る前などの空き時間に少しずつ作って、一通り動くようになったので、公開してみた。http://code.google.com/p/sbvj/jarファイルをインポートするだけで使えます。 現状の課題としては、機能落ちしてい…

初心者セーリング教室(1日目)

去年からやり始めたヨットをもうちょっと深くやってみようと思い、今年はそれなりの講習を受けてみることにした。兵庫県立海洋体育館というところで、座学が1日と実技が2日の合計3日間で教えてくれる。 一応、この講習を終えると、一人でレンタルして乗れる…

Javaで簡潔ビットベクトル(21)

さて、今年は、オープンソースとして、プロダクトを公開していくことに決めていたので、簡潔ビットベクトルのソースの整理を始めた。 そのために、SVNでバージョン管理ができる環境も整えた。ついでに、公開するための環境も必要だろうということで、Google …

SVN

Eclipseでのソース管理をやりやすくするためにSVNを導入してみた。 最近だとGitなんだろうけど、SVNに慣れているので、こっちにした。VMWare上のCentOSにSVNのサーバーを構築した。 参考にしたのは、以下のサイトです。http://d.hatena.ne.jp/bonvivant/2009…

Javaで簡潔TRIE(4)

さて、トライのイメージが掴めたところで、より実装に近いところを考えてみます。まず、前回までに作成したトライを示しておきます。キー集合Kは、以下のようなものでした。 K = { internet#, interest#, japan#, jar#, kyoto# }また、このキー集合Kから作成…