2011年2月19日土曜日

Whoosh用の日本語トークナイザ(IgoTokenizer)

Python hack-a-thon 2011.02の成果。

Igoを使って、Whoosh用のTokenizerを作りました。とりあえずですが使えます。
https://launchpad.net/igotokenizer

テストコード
# -*- coding: utf-8 -*-
import os
from whoosh.index import create_in
from whoosh.fields import *
from whoosh.qparser import QueryParser

import igo.Tagger
import IgoTokenizer

tk = IgoTokenizer.IgoTokenizer(igo.Tagger.Tagger('ipadic'))
scm = Schema(title=TEXT(stored=True, analyzer=tk), path=ID(unique=True,stored=True), content=TEXT(analyzer=tk))

def add_docs(w):
    w.add_document(title=u'その1', path=u'1', content=u'こんにちは世界')
    w.add_document(title=u'その2', path=u'2', content=u'さようなら世界')
    w.commit()

def search(s, qp, text):
    print 'search ' + text
    for r in s.search(qp.parse(text)):
        print r['path'], r['title']

if not os.path.exists("indexdir"):
    os.mkdir("indexdir")
ix = create_in('indexdir', scm)
w = ix.writer()
add_docs(w)

s = ix.searcher()
qp = QueryParser("content", schema=ix.schema)

search(s, qp, u"こんにちは世界")
search(s, qp, u"世界")
search(s, qp, u"こんにちは")
search(s, qp, u"さようなら")

実行結果
search こんにちは世界
1 その1
search 世界
1 その1
2 その2
search こんにちは
1 その1
search さようなら
2 その2

0 件のコメント:

コメントを投稿