DITA-OT htmlsearchプラグインへのMeCab形態素解析エンジンの組み込み手順
ちょっと長いです。土日2日分の苦闘の記録ですので。
OS: WinXP 32bit
DITA-OT: 1.5.2 M6
MeCab: 0.98
cmecab-java: v1.7
1) 下記からMeCabをダウンロードして、インストール。
http://mecab.sourceforge.net/
2) 下記から cmecab-java-1.7-i386.zip をダウンロードして、解凍。
http://code.google.com/p/cmecab-java/downloads/list
3) 解凍してできた cmecab-java-1.7 を、%DITA-OT%demo\htmlsearch の下へ移動。
4) 環境変数PATHに、下記の2つのパスを追加。
(1) %DITA-OT%demo\htmlsearch\cmecab-java-1.7\bin
CMeCab.dll、CMeCab_protobuf.dllにアクセスするために必要。
(2) C:\Program Files\MeCab\bin
CMeCab.dllからlibmecab.dllにアクセスするために必要。
5) %DITA-OT%demo\htmlsearch\interator.xml の中で、インデクサを呼び出す際のクラスパスに cmecab-1.7.jar と protobuf-java-2.3.0.jar を追加(下記参照)。
<path id="nw-cms.jar.path"> <pathelement location="${dita.dir}${file.separator}demo${file.separator}htmlsearch${file.separator}lib${file.separator}nw-cms.jar" /> <pathelement location="${dita.dir}${file.separator}demo${file.separator}htmlsearch${file.separator}cmecab-java-1.7${file.separator}bin${file.separator}cmecab-1.7.jar" /> <pathelement location="${dita.dir}${file.separator}demo${file.separator}htmlsearch${file.separator}cmecab-java-1.7${file.separator}lib${file.separator}protobuf-java-2.3.0.jar" /> </path>
6) %DITA-OT%startcmd.bat を実行してコマンドプロンプトを開き、ant -f integrator.xml を実行。
7) %DITA-OT%demo\htmlsearch\java\com\nexwave\nquindexer\SaxHTMLIndex.java の修正。
cleanBuffer関数を下記のように書き換える。
private String cleanBuffer (StringBuffer strbf) throws Exception { String str = strbf.toString().toLowerCase(); // Taggerを構築。 // 第一引数には、MeCabの辞書の文字コードを与える。 // 第二引数には、MeCabのcreateTagger()関数に与える引数を与える。 Tagger tagger = new StandardTagger("UTF-8", ""); // tagger.parse()を呼び出して、文字列を形態素解析する。 // 返されるオブジェクトは、Iterator<String>を実装している。 Node node = tagger.parse(str); String retStr = ""; while (node.hasNext()) { String surface = node.next(); String feature = node.feature(); int posid = node.posid(); // 名詞だけ拾って、戻り値の文字列変数に追加する //System.out.println(posid); if (posid == 1) { if (retStr.length() == 0) { retStr = surface; } else { retStr = retStr + " " + surface; } } /* // 名詞だけ拾って、戻り値の文字列変数に追加する Pattern pattern = Pattern.compile("^名詞.*"); Matcher matcher = pattern.matcher(feature); if (matcher.matches()) { if (retStr.length() == 0) { retStr = surface; } else { retStr = retStr + " " + surface; } } */ } // taggerをクローズ tagger.close(); System.out.println(retStr); return retStr; }
8) MeCabの品詞IDを定義しているファイル(pos-id.def)の修正。
名詞 1 動詞 2 形容詞 3 副詞 4 助詞 5 接続詞 6 助動詞 7 連体詞 8 感動詞 9 *[MeCab] 10
9) 辞書をリコンパイル
> cd C:\Program Files\MeCab\dic\ipadic >"C:\Program Files\MeCab\bin\mecab-dict-index.exe" -t utf8 reading .\unk.def ... 40 emitting double-array: 100% |###########################################| reading .\Adj.csv ... 27210 : : done!
※ 辞書のエンコーディングの指定(-t utf8)を忘れないこと!
10) インデクサをコンパイル。
> cd %DITA-OT%demo\htmlsearch\java > javac -cp %DITA-OT%tools\ant\lib\ant.jar;%DITA-OT%demo\htmlsearch\cmecab-java-1.7\bin\cmecab-1.7.jar;%DITA-OT%demo\htmlsearch\cmecab-java-1.7\lib\protobuf-java-2.3.0.jar -sourcepath . -d .. -encoding UTF-8 com\nexwave\nquindexer\*.java 注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。 注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。
ワーニングメッセージは取りあえず無視 (^_^;)
11) jarファイルを作成。
> cd .. > jar -cvf nw-cms.jar com マニフェストが追加されました。 com/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) com/nexwave/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) com/nexwave/nquindexer/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) : :
12) %DITA-OT%demo\htmlsearch の下にできた nw-cms.jar を、%DITA-OT%demo\htmlsearch\lib の下へ移動。
●おまけ●
検索結果を表示するときに、< や > が含まれていると正しく表示されない不具合の対処。
%DITA-OT%demo\htmlsearch\basefiles\search\nwSearchFnt.js
《 修正前 》
tempPath = tempInfo.substring(0, pos1); tempTitle = tempInfo.substring(pos1+3, pos2); tempShortdesc = tempInfo.substring(pos2+3, tempInfo.length);
《修正後》
tempPath = tempInfo.substring(0, pos1); tempTitle = tempInfo.substring(pos1+3, pos2).replace(//g, '>'); tempShortdesc = tempInfo.substring(pos2+3, tempInfo.length).replace(//g, '>');