サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
blog.chocolapod.net
ElasticSearch の全文検索での analyzer について 前回の ElasitcSearch での文書検索についての記事の中で、ElasticSearch の中核となる機能である全文検索クエリについて触れました。 ElasticSearch の全文検索クエリでは、文書を単語に分割する分かち書きという工程を経て、その単語が含まれる文書が検索されます。しかし、はたして何を単語とみなすかというのは難しい問題です。普段人間が使っている言葉の種類は国や言語、時代によって膨大な量になりますし、常に新しい言葉、失われていく言葉が存在しています。また同じ言葉でも文脈や使われる分野によって意味が変わったり、1 つの言葉なのに文字で表現しようとすると何通りも書き方があったりします。現時点ではあらゆる単語を分かち書きできるような技術は残念ながら存在していないので、全文検索を適用したい分野にあわせて
ElasticSearch でインデックス時と全文検索時で異なる analyzer を設定する 前回は ElasticSearch が全文検索クエリを処理する際の分かち書きのしくみについてふれました。ElasticSearch ではさまざまな種類の tokenizer を中心に analyzer を設計することができ、この analyzer が実際に文字列の単語分割を行ってくれます。 ElasticSearch ではインデックスに格納するドキュメントの内容(フィールドの値)と、全文検索クエリの検索キーワードに対して分かち書きが行われますが、この 2 つに対して異なる analyzer を適用することができます。今回は、インデックスにドキュメントを格納する際の転値インデックス作成時と、検索キーワードを渡した全文検索クエリでの検索時とで、異なる analyzer を利用してみたいと思います。
ElasticSearch で文書を検索をしてみる ElasticSearch で提供されている代表的な文書の検索機能には、全文検索クエリと Term ベースクエリがあります。全文検索クエリは、検索時のキーワードが含まれているるドキュメントを探し出すための検索クエリです。一方 Term ベースクエリは、検索時のキーワードが完全に一致するドキュメントを探し出すための検索クエリになります。 よくある検索エンジンのようにキーワードが含まれている WEB ページを探すというような用途では全文検索クエリが適していますが、ユニークなキー値のようなものをキーワードにして、そのキー値が割り当てられている文書を探すような用途では Term ベースクエリが適しています。全文検索クエリではあらかじめ文書が単語に分割されて、その単語に対して検索が行われますが、Term ベースクエリでは文書が単語に分割されず、キー
python の pip でインストールできる自作モジュールを作ってみる Java にはライブラリの依存性を管理するためのつーるとして Maven や Gradle がありますが、Python の世界にもパッケージ管理ツールとして pip があります。コードの規模が大きくなってくるとモジュール化は避けては通れない課題なので、今回は pip を使って、Python での自作モジュールの作成と呼び出しをしてみようと思います。 自作モジュールを用意するまずは作業をするための自作モジュールのディレクトリを作り、その中に移動します。ディレクトリはなんでもいいですが、わかりやすいようモジュール名と同じにしておきます。$ mkdir libhollow $ cd libhollow このディレクトリ内に、自作モジュールのためのファイルを用意します。 ディレクトリ内に、さらにモジュール名と同じディレクトリ
Hive を構築して Hadoop とつなげてみた 引き続き Hadoop でいろいろ試してみるシリーズです。 前回は Hadoop 本体を構築し、HDFS に配置したファイルを使って簡単なデータ分析をしてみました。取り扱ったデータが小さい上に、実際には単体構成な Pseudo-Distributed Mode だったのでアレですが、Hadoop の概要のようなものが少しずつ見えてきました。 Hadoop ではやはり HDFS という独自のファイルシステムを扱うことが特徴的で、実際に HDFS 上にファイルを配置し、処理を行うというのは、自動化を考えるとなかなか大変そうでした。この HDFS を使ったデータ処理をより手軽に行うための周辺技術として、古くから Hive というコンポーネントが使われてきました。Hive を利用することで、HDFS へのファイル配置や参照・集計といった処理を、H
svn リポジトリをローカルにコピーしてから git リポジトリに変換する 今年になって、個人的なコードを書き溜めていた svn リポジトリを徐々に git に移行しています。 私はフリープランでもプライベートリポジトリを無制限に作れることから、数年前から assembla を使っていました。しかし最近(??)になってフリープランで作れるリポジトリ数に上限が設定されたようで、新しいリポジトリが作れなくなっていました。有料プランへ乗り換えられればよかったのですが、リポジトリ数をふまえて開発予算(お小遣い)と相談した結果、やむなくお世話になった assembla から bitbucket に移住することにしました。念のため強調しておきますが、これまでながらく愛用していたことからもわかるとおり、assembla 自体に不満があるわけではありません。あくまでやんごとなき事情(お小遣い)のため、泣く
Python nose でユニットテストを書いてみた chocolablog は Python で書かれていますが、これまであまりユニットテストの整備に時間を割いてこれませんでした。しかし初期バージョンの開発から 2 年以上が経ち、その間に何度か sqlite3 をとりまく DB アクセス部分を中心に、処理を書き換えています。他のロジックはともかく、コアとなるコードはしっかり動作を担保しておくべきだなと感じ、ユニットテストの整備に着手することにしました。 Python では 2.1 移行、ユニットテストフレームワークとして unittest が組み込まれています。これは個人的に大好きな JUnit をベースに作られているそうです。ただネット上で目にした Python 系のオープンソースプロジェクトでは、この uniittest モジュールではなく nose というモジュールを使ってテストコ
Maven pom.xml のバージョン番号を Java プログラムから取得する LWJGFont ver1.1 の開発で、LWJGFont のバージョンを埋め込んだ別アーティファクト用の pom.xml を動的に生成しなければならない、という場面がありました。私は Java プロジェクトの管理に Apache Maven3 を使っているので、LWJGFont 自体のバージョン番号は LWJGFont プロジェクト自身の pom.xml に記載されています。ところがバージョン番号自体を扱いたいのは LWJGFont のロジックだったので、状況としては、Java プログラムから自身の Maven プロジェクトの pom.xml に書いてあるバージョン情報を取得する、ということになります。 開発中にいろいろ調べてみたのですが、簡単にとれるということではないにしろ、実現方法はいくつかありました。
Fedora 20 をインストールした後に行うひと通りの初期設定 月曜日にしていた Fedora 20 のインストール作業に関する記事です。 Fedora 20 の UI はまた少しずつおしゃれに進化していて、これなら職場の PC も遠くないうちにバージョンアップすることになりそうなので、Fedora のインストール後に私がいつもやる初期設定をまとめて書いておきたいと思います。 初期設定は UI 関連のことを中心にしています。私の Fedora の用途は開発環境としてなので、エンジニア的なこともそれなりに含まれていますが、java とか ant とか maven とかのインストールは割愛しています。もし同じようなことをやりたいとなった時に、参考にしていただけるものがあれば嬉しいです。 ログアウトメニューの表示以下のコマンドを実行すると、トップメニューからログアウトができるようになります。$
Linux 環境でマルチコア CPU を利用した python プログラムを書く マルチコア CPU を利用した python プログラム、と言っても、Linux 環境ではプロセス単位で CPU が割り当てられるので、つまりはマルチプロセスを意識したプログラミングになります。 java でマルチコア CPU を利用しようとするとマルチスレッドで実現することになりますが、python の場合はわかりやすく別プロセスで実現されているため、ps や top コマンドで見えて面白いです。 python ではマルチプロセス用に multiprocessing モジュールが用意されていますが、今回はひとまず古典的な fork() 関数を使い、実際に複数のプロセスがマルチコア CPU によって処理されている様子を見てみたいと思います。 どちらかというと新人さん向けのプロセスのお話になってしまいましたが、
MeCab で UniDic 辞書を使ってみる MeCab で使える形態素解析用の辞書は、IPA 辞書の他にもいくつか公開されています。そのひとつであるUniDic は、IPA 辞書よりも個々の単語を詳細に分類したもので、分割した形態素が文中で果たす役割をより精密に検出することができます。UniDic はメンテナンスが頻繁に行われているようで、最新版は 1 ヶ月ほど前の 2013/3/14 にリリースされた 2.1.2 になります。ライセンス形態は GPL、LGPL、BSD License のトリプルライセンスとなっていて、その点でも、エンジニアにとっても採用しやすい辞書となっています。 今回はこの UniDic を実際にビルドし、MeCab から使ってみることと、辞書の再学習までを試してみました。 MeCab で UniDic を使うUniDic はバイナリ辞書も配布されていますが、ここ
LWJGL で Hello world してみる(環境構築編) LWJGL や JOGL といったライブラリを使うと、Java で OpenGL を使うことができます。触ってみた感じ、両方とも OpenGL をほぼそのままの形で呼び出せるので、どっちを使うかは好みで決めてもいいくらいです。わたしの場合は最初に触ったのが LWJGL だったので、LWJGL でゲーム開発をしています。 LWJGL は正式名称を Lightweight Java Game Library といい、Java から OpenGL を呼び出すための Java 用クラスを提供しています。Java でゲームを作ろうとすると、3D 系は特に pure Java では弱い印象なので、そこを強化するためにグラフィックス描画では OpenGL を採用するのが妥当なのかな、と個人的には感じています。 ゲームライブラリと名のついてい
Linux でマザーボードの情報を調べる うちの開発用マシンは、今はなきクレバリーのショップブランド PC です。 買ったのは 2008 年 11 月。当時にしてはそれなりのスペックだったはずなのですが、4 年も経てばさすがに時代に取り残された感が拭い切れず、この度増強をすることにしました。 が、メモリを増やそうにも肝心の最大認識量がわからず。 納品書にはマザーボードのチップセットしか書かれていなかったのです。 Windows ではマザーボードを調べるフリーソフトがありますが、 Linux ではどうなんだろうと調べてみると、dmidecode コマンドを使うと表示することができるそうです。 ということで Fedora さんにて yum してみました。 実行結果はこちら。# dmidecode # dmidecode 2.11 SMBIOS 2.4 present. 38 structure
MeCab の IPA 辞書を再学習させてみる MeCab の辞書は利用する分野に応じて、新たな名詞や動詞などを追加したり、その分野の文章の解析精度を上げるよう再学習させることができます(この作業はドメイン適応と呼ばれるそうです)。 ドメイン適応の第一歩としては、未知の名詞の MeCab 辞書への登録から始めると良いです。 ただ登録作業自体は、辞書をビルドする際に、その単語を後述のフォーマット(※1)で書いた .csv ファイルを混ぜておけばいいので、それほど難しいことではありません。問題となるのはその単語がどの程度使われやすいのかを調整する必要があることです。この使われやすさを示す数値はコストと呼ばれ、単語を登録する際には自分で決め打ちしなければなりません。 コストの手動計算方法はネット上でもいくつか紹介されていますが、手動計算ではあまり複雑な計算はできないので、同じ品詞のコストが同じ値
LWJGL の座標系についてまとめてみる 今回は、三次元のモデルの座標が PC のウインドウ上の座標に変換される手順について触れながら、LWJGL(OpenGL)で扱ういくつかの座標系について、そして OpenGL 系の記事では必ず出てくるモデルビュー変換・射影変換とは何だったのかについてより知っていただければと思います。 今まで扱ってきたプログラムの裏でどのようなことが行われているのかを掘り下げたものなので、サンプルプログラムはありません。べ、別に楽しようとかじゃなi(以下略 OpenGL や Direct3D では、三次元でモデリングしたモデルを PC のアプリケーションのウインドウに配置する際に、何回か座標系を変換する処理が行われています。 突き詰めてしまえば、モデルは点、点同士を結ぶ線、線同士を結ぶ面で構成されていますが、そのひとつひとつの点がどこにあり、それをどの角度・距離から見
LWJGL で加算合成、乗算合成ほかを試してみる OpenGL のアルファブレンドによるいろいろな合成手法をまとめてみました。半透明表示の回ではアルファ値に応じて下地である元の色を強く見せる、一般的なアルファブレンド(透過表示)について扱いましたが、今回はアルファブレンドの他の合成方法について触れてみたいと思います。中でも加算合成、乗算合成はゲームのエフェクトとしてよく使われるものです。 半透明表示の回では色を塗ったポリゴンにアルファブレンドを適用しましたが、同じように、テクスチャーを貼り付けたポリゴンについてもアルファブレンドを適用することができます。今回は不透明な画像、半透明な画像、透過色を持つ透過イメージの3つを、それぞれアルファブレンドで合成してみたいと思います。 なお、私が LWJGL の glColor3f() が好きなので、説明では例にあげる RGB の値の範囲を(0f, 0
このページを最初にブックマークしてみませんか?
『blog.chocolapod.net』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く