5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RoRにおける検索時の表記揺れ対応(漢字、カタカナ、ひらがな)

Last updated at Posted at 2024-01-27

事象

検索機能を実装する際、表記揺れに対応する必要が生じました。例えば、検索ワードが「東京」の場合、「とうきょう」や「トウキョウ」といったひらがなやカタカナ表記でもヒットさせる必要がありました。また、「コンビニ」というカタカナで入力された場合には、「こんびに」というひらがな表記での検索にも対応することが求められました。この記事では、Ruby on Railsを使用して、これらの表記揺れに柔軟に対応する方法を共有いたします。

また、このアプローチは、「漢字のみ」「カタカナのみ」「ひらがなのみ」といった通常のパターンだけでなく、「漢字とカタカナとひらがな」「漢字とカタカナ」「漢字とひらがな」「カタカナとひらがな」といったイレギュラーなパターンに対しても柔軟に対応できます。これは、各文字が漢字、カタカナ、またはひらがなかどうかを個別に判断し、それに応じて適切な変換を行うことにより実現されています。この方法により、多様な表記揺れに対応することが可能になり、検索機能の精度を高めることができます。

対処法

以下のコードスニペットでは、RubyのStringクラスにStringHelperモジュールを追加し、文字列の相互変換機能を実装しています。具体的には、漢字からひらがな、ひらがなからカタカナ、カタカナからひらがなへの変換機能を提供しています。

store.rb
module StringHelper
  require 'net/http'
  require 'nokogiri'

  # 漢字をひらがなに変換する
  def to_kanhira
    # 外部APIへのリクエスト処理
    http = Net::HTTP.new('yomikatawa.com', 443)
    http.use_ssl = true
    path = File.join('/kanji', self)
    html = http.get(path).body
    result = Nokogiri::HTML(html).search('#yomikata tbody tr td').first
    result ? result.inner_text : ''
  end

  # ひらがなをカタカナに変換する
  def to_kana
    tr('ぁ-ん', 'ァ-ン')
  end

  # カタカナをひらがなに変換する
  def to_hira
    tr('ァ-ン', 'ぁ-ん')
  end

  def with_furigana
    kana = to_kanhira.to_kana
    "#{kana}#{kana.to_hira}"
  end
end

class String
  include StringHelper
end

class Store < ApplicationRecord
  def name_with_furigana(name)
    return '' if name.nil?
    name.with_furigana
  end
  
  def store_name
    store&.name
  end
   
  def store_name_with_furigana
    name_with_furigana(store_name)
  end
end

参照

miyabiというgemの機能を参照させていただきました!m(_ _)m

当初はMeilisearchを使おうと思ったのですが、
漢字、カタカナ、ひらがなの表記揺れには弱いようでした。。

自らの備忘録のために投稿してますが、なにかお役に立てましたら幸いです!:clap:
また、なにか間違ってましたらご指摘いただけますと幸いです!:pray:

5
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?