Zope

関連ページ

Contents

Linuxでの話です.

COREBlogでの検索機能を有効にしたい.そのためには,日本語を単語単位に分割する「サブルーチン」が必要.下記参考リンクによれば,いくつも方法があるようだ.

結果的にMJSplitterを採用.苦労しました^^;

2009-01-27注
http://c2search.cmscom.jp/http://zope.jp/documents/faq/splitter-choice あたりを参考にして,そろそろ新しいスプリッターに移行します.

参考リンク

いくつもあるようだが,MeCabを使うものと,ChaSenを使うものと何も使わないものの3系統に分かれる.MeCabChaSenも辞書はipadicというのを使う.

→ MJSplitter以外

MJSplitter 2005-10-05

最終的に,MJSplitterを採用.上記,参考リンクには,"MecabSplitter?"として紹介されている.

インストールの参考

  • http://ns.jk.to/zwiki/MJSplitter
    ただし,一番肝心な,MJSplitter.pysettings.pyの設定が書いてない(デフォルトで動いているのかも).

最初のトライアルは,うまくいかなかった.下記,settings.pyの修正が必要.

MeCabとipadicのインストールが必要

MeCab 0.81, IPADIC 2.6.3ではbuild時にSegmentation Fault^^; IPADIC 2.7.0もだめ.2.5.1はOK!

http://ns.jk.to/zwiki/MJSplitter の手順に従って,JapaneseCodecs1.4.11, mecab-python-0.81はOK.

文字コードをUTF-8にすると,一様動くようですが,単語リストには日本語の文字が1文字ずつ入ってます.ということで,検索には役立ちません.x86 32bit GNU/Linuxの二台のマシンでテスト.同様に失敗.

MJSplitterの設定 2005-10-06

ChaSenはUTF-8の使用に一工夫いるので,MJSplitterでもうひとあがき.

settings.pyのなかの選択肢を設定.私の環境では,

text_charset → 'utf-8'
dic_charset → 'euc-jp'

で解決.

各.pyの最初の行のエンコーディング情報を壊さないように.

重要な情報

あとづけでSplitterをインストールした場合,Recatalogボタンを押せば,インデックスが作られます.

ただし,MJSplitterの場合,本文Shift_JIS, 辞書euc_jpの組み合わせでは,微妙に文字化けして,正しい検索結果が得られません.本文utf-8, 辞書euc_jpあたりがよいようです.

懸案

lexiconの掃除 2005-10-06

必要な単語もたまるけれど,ゴミもたまる.清掃の方法が解らない.

2005-10-06
MJSplitterにしたら,あまり意味のないゴミは入らないのでとりあえず様子見.

解決 2005-10-28

特に,掃除の必要もないが,

  1. lexiconを削除
  2. ZCText Lexiconを追加
    • IDをlexiconとし
    • 適当なSplitterを選ぶ
  3. Entryで,Recatalogを押す

で,清掃可能.Splitterを変える場合も同じ手順.

その後 2008-11-06

その後,ZopeへのMJSplitterのインストールがなかなか成功しません.MeCabZopeも2004〜2005年くらいのものにしないと動かないのかも知れません.

例外ハンドリングを外して出させたエラー(Zope-2.10.6, Python 2.4.4, MeCab-0.81).

2008-11-06T13:13:13 ERROR Application Couldn't install MJSplitter
Traceback (most recent call last):
 File "/opt/zope-2.10.6/lib/python/OFS/Application.py", line 758, in install_product
   global_dict, global_dict, silly)
 File "/var/zope/Products/MJSplitter/__init__.py", line 5, in ?
   import MJSplitter
 File "/var/zope/Products/MJSplitter/MJSplitter.py", line 58, in ?
   class MJSplitter:
 File "/var/zope/Products/MJSplitter/MJSplitter.py", line 65, in MJSplitter
   mecabAdaptor = MeCabAdaptor(mecab_module, get_mecab(mecab_module))
 File "/var/zope/Products/MJSplitter/MJSplitter.py", line 21, in get_mecab
   return Tagger(mecab_arglist)
 File "/usr/lib/python2.4/site-packages/MeCab.py", line 225, in __init__
   this = _MeCab.new_Tagger(*args)
NotImplementedError: Wrong number of arguments for overloaded function 'new_Tagger'.
 Possible C/C++ prototypes are:
   MeCab::Tagger(char const *)
   MeCab::Tagger()

MeCabは,0.9xを使っても動いてくれません(エラーの内容は調査してませんが).

メモ 2008-11-07

動いているマシンを元に少しずつupdateしていく.

段階ZopePloneMeCabメモ
出発点2.8.72.1.40.81
12.8.102.1.40.81OK
22.8.102.5.50.81NG. FiveがZope-2.9.xを必要としているようだ
32.9.10-0.81Zope-2.9.xはMJSplitterを受け入れてくれない
42.8.102.1.40.97NG. MeCabも古くないとだめのよう

ということで,MJSplitterに手を加えないと,Zope-2.9.xの世界,Plone-2.5.xの世界にいけないことが判明.

しばらくはObsoleteのPlone-2.1.4を使うことにします.

解法 2008-11-07

動いているサイトから,持ってくる^^; Ploneはそのまま動きませんが,Zope+MJSplitterは動きます.

ですから,いったんPloneを消して,フレッシュなPloneをインストールします.


Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-01-27 (Tue) 20:56:16 (297d)