- 前の記事:Sphinx日本語検索対応の1.0版
Sphinxの検索インデックス作成処理をハックして、日本語を通すようにしよう!というのを以前からちょこちょこっとやっているのですが、いろいろ忙しくしている間に、いろいろ不具合とか見つけてくれたりしてくれる人がいたり(http://d.hatena.ne.jp/hokorobi/20101030/1288419035)、ありがたい流れになってきています。というか放置状態ですみません。今、Sphinx翻訳ハッカソン中なので、時間をとっていろいろコード修正とかをしました。また、言語を追加できるAPIとして整備して、本家に提案してみたところです。ほんとはドイツ語のステマーでも実装してサンプルにしてみると意義がわかりやすくはなるんでしょうけど、ドイツ語(一応大学でちょっとやったが)のステマーを実装するのは大変なので・・・誰かやってくれると助かる感じ。というかPython実装とかどっかにありそうなんだけどね。
APIの使い方のイメージはこんな感じになっています。例えば、フランス語(コードfr)の場合です。
from sphinx.search_languages import SearchLanguage
class SearchFrench(SearchLanguage):
lang = 'fr'
def init(self):
self.stopwords = set([ストップワードこれはJavaScript側にもコピーされます])
self.js_stemmer_stemmer = """JavaScript側で動く、ステマーのプログラム"""
def split(self, sentence):
"""ここで、スプリッターを実装します。デフォルトはスペース区切り。"""
def stem(self, word):
"""ここでPythonのステミング処理を実装します。"""
def word_filter(self, stemmedword):
"""ここでインデックスに登録するかどうかの判定をします。"""
def setup(app):
app.add_search_language(SearchFrench)
ちなみに、リポジトリはここ(https://bitbucket.org/shibu/sphinx/overviewです。
hokorobiさん、いろいろ指摘していただいてありがとうございます。