目次
前回、naist-chasenではアルファベットが別々の単語としてanalyzeされてしまうという話をしました。
ただ、これだと、英単語が含まれた文章を形態素解析すると、英単語がアルファベット単位に区切られてしまい、 単語の意味をなさなくなってしまいます。
lucene-gosenでは、この問題に対応するための方法が提供されています。 CompositeTokenFilter(compositePOS)という機能です。
文字通り「トークン」を「合成」するための機能になります。
利用するためには以下の作業が必要です。(※Solrでのの利用方法を説明します。)
- compositePOS設定ファイル(composite_pos_ja_naist-chasen.txt)の用意
- schema.xmlのtokenizerにcompositePOS設定を追加
まずは、compositePOS設定ファイルの記述方法について説明します。 compositePOS設定ファイルには1行につき1つのcompositeの設定を記述していきます。 記述方法は次のようになります。品詞名を半角スペース区切りで記述します。
連結品詞名 構成品詞名1 構成品詞名2 ... 構成品詞名n
それぞれは次のような意味を持ちます。
- 連結品詞名:合成したあとのトークンの品詞として出力する品詞名
- 構成品詞名:合成したい品詞名(スペース区切りで複数指定可能)
TokenizerのcompositePOS機能は、構成品詞に定義されたトークンが連続して出力された場合に、 結合(合成)して1つのトークン(連結品詞名)として出力します。 また、以下のように構成品詞名が1種類で連続品詞名としても利用する場合は次のように省略した記述も可能です。
以下にcompositePOSファイルの設定例を上げます。 ※なお、現時点では#によるコメント機能はありません。ので、記述した内容がそのまま利用されます。
名詞-数
未知語 記号-アルファベット
1行目は連続した数字を1つのトークン(名詞-数)として出力する設定です。(連続品詞名=構成品詞名として省略して記述した例になります。) 2行目は連続したアルファベットを1つのトークン(未知語)として出力する設定です。
次にSolrのschema.xmlにlucene-gosenのtokenizerを利用するフィールドタイプの設定を記述します。 $SOLR_HOME/conf/schema.xmlに以下を追加します。<types>~</types>タグの間に記載します。
...
<types>
...
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.JapaneseTokenizerFactory" compositePOS="composite_pos_ja_naist-chasen.txt"/>
</analyzer>
</fieldType>
</types>
...
重要なのはtokenizerタグのcompositePOS属性になります。ここに1.で記載したファイルを指定します。指定したファイルはschema.xmlと同じディレクトリに配置します。 以上が利用するための設定です。
前回同様、「このComputerは、10回に1回の割合で起動中に青い画面が表示されます。」という文章をanalyze画面で解析した結果を示します。
とまぁ、記事を書きましたが、すでにこちらで出ている話ですね。。。
みなさん手が早くて困ってますw
ちなみに、上記の設定の場合、「100,000」や「3.14」といった文字列は「100」「,」「000」という形で出力されてしまいます。これらも数字とみなしたい場合は「名詞-数 名詞-数 記号-句点 記号-読点」という設定で1つのトークンとして出力されます。ただし、「。」も「記号-句点」なので注意が必要です。
※なお、今回はlucene-gosen-1.1.0、Solr3.2を利用した例になっています。
comments powered by Disqus
See Also by Hugo
- ソースからのビルドと構成(Jugemより移植)
- Issue32について(4096の壁)(Jugemより移植)
- Solr 3.6.0のCJKの設定とSynonymFilterFactoryの気になる点(Jugemより移植)
- compositePOS(CompositeTokenFilter)のバグ修正(Jugemより移植)
- NAIST-JDic for MeCab対応版(仮実装)(Jugemより移植)