# Kuromoji\_readingform の意図しない出力について

**URL:** <https://discuss.elastic.co/t/kuromoji-readingform/32477>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [October 19, 2015, 10:39am UTC](https://discuss.elastic.co/t/kuromoji-readingform/32477 "2015-10-19T10:39:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![i12o](https://avatars.discourse-cdn.com/v4/letter/i/4da419/32.png) [@i12o](https://discuss.elastic.co/u/i12o)\
**Post date:** [October 19, 2015, 10:39am UTC](https://discuss.elastic.co/t/kuromoji-readingform/32477/1 "2015-10-19T10:39:00Z")

</div>

こんにちは。カタカナ、ひらがなの区別をしない検索をしたくて、次のようなカスタムアナライザを定義してみました。

elasticsearch/1.7.1 + analysis-kuromoi/2.7.0 の環境です。  
Linux + openJDK 1.8.0\_25 です。

```
PUT /test1/_settings?pretty
{
  "index": {
    "analysis": {
      "analyzer": {
        "test_hirakana": {
          "type": "custom",
          "filter": "kana_conv",
          "tokenizer": "kuromoji_tokenizer"
        }
      },
      "filter": {
        "kana_conv": {
          "type": "kuromoji_readingform",
          "use_romaji": false
        }
      }
    }
  }
}

```

アナライザを、「ひむろ きょうすけ」でテストしてみます。

```
GET /test1/_analyze?pretty&analyzer=test_hirakana&text=ひむろ きょうすけ
{
  "tokens" : [ {
    "token" : "ヒム",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "ロ",
    "start_offset" : 2,
    "end_offset" : 3,
    "type" : "word",
    "position" : 2
  }, {
    "token" : "キョウス",
    "start_offset" : 4,
    "end_offset" : 8,
    "type" : "word",
    "position" : 3
  }, {
    "token" : "ケ",
    "start_offset" : 8,
    "end_offset" : 9,
    "type" : "word",
    "position" : 4
  } ]
}

```

分割位置はともかく、すべてカタカナになりました(意図通りです)

次に「ひむろきょうすけ」を試しました。

```
GET /test1/_analyze?pretty&analyzer=test_hirakana&text=ひむろきょうすけ
{
  "tokens" : [ {
    "token" : "ヒ",
    "start_offset" : 0,
    "end_offset" : 1,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "むろきょうすけ",
    "start_offset" : 1,
    "end_offset" : 8,
    "type" : "word",
    "position" : 2
  } ]
}

```

なぜか、「むろきょうすけ」がそのままひらがなで出力されます。  
カタカナに変換さえしてくれれば問題ないのですが。

いろいろと試してみたところ、「むろ」で始まる語に分割された場合、readingform フィルタが変換を行なわないらしい事がわかりました。  
use\_romaji オプションの真偽は、この動作に関係ないようです。

こむろ → 「コム ロ」  
ここむろ → 「ココ むろ」  
ひむろき → 「ヒ むろき」

```
GET /test1/_analyze?pretty&analyzer=test_hirakana&text=ひむろき
{
  "tokens" : [ {
    "token" : "ヒ",
    "start_offset" : 0,
    "end_offset" : 1,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "むろき",
    "start_offset" : 1,
    "end_offset" : 4,
    "type" : "word",
    "position" : 2
  } ]
}

```

他にもこのようになるパターンがあるのか見付けてはいないのですが、これは analysis-kuromoji 側の不具合でしょうか。

icu\_transform で、"id": "Hiragana-Katakana" のフィルタをかませればひらがなカタカナ変換ができるようですが、kuromoji\_readingform だけでどうにかならないものでしょうか。

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [October 19, 2015, 11:44am UTC](https://discuss.elastic.co/t/kuromoji-readingform/32477/2 "2015-10-19T11:44:05Z")

</div>

johtaniです。報告ありがとうございます。

Luceneのプログラム（バージョンは5.3.0）を書いて確認してみたところ、同じように、ひらがながそのまま出力されますね。  
辞書データまではまだ、見ていないのですが、Kuromojiが付与している単語の情報（品詞とか読みとか）を見たところ、  
データが存在しないようです。  
Kuromojiが利用している辞書をチェックしてみる必要がありそうです。

~~Lucene側にチケットを追加するので、追加が終わったら、こちらにURLを追記します。~~  
Kuromojiの未知語処理に関連していそうです。

---

<div class="post-metadata">

**Author:** ![i12o](https://avatars.discourse-cdn.com/v4/letter/i/4da419/32.png) [@i12o](https://discuss.elastic.co/u/i12o)\
**Post date:** [October 20, 2015, 12:13pm UTC](https://discuss.elastic.co/t/kuromoji-readingform/32477/3 "2015-10-20T12:13:53Z")

</div>

すでに確認しておられると思いますが、なんとなく品詞分類の特定パターンでの処理が抜けているのかなーと思いながらテストをしておりました。

解消される事を願っております。

読み仮名のみを持つテキストフィールドに対して検索をしようとする場合、検索語がひらがなかカタカナかでトークナイザの出力が変るみたいなので、kuromoji\_tokenizer はあまり向いてなさそうですね。あ、kuromoji\_readingform はフィルタだから関係ない話ですね。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:50pm UTC](https://discuss.elastic.co/t/kuromoji-readingform/32477/4 "2017-07-06T13:50:54Z")

</div>


