none
濁音、半濁音などを踏まえた、あいまい検索 RRS feed

  • 質問

  • 検索時に「ず」と「づ」などを両方で検索することは出来ないでしょうか?

    希望としては上記の他に
    「じ」と「ぢ」
    濁音、半濁音(「が」と「か」、「ぱ」と「は」など)
    小さい文字(「つ」と「っ」、「よ」と「ょ」など)


    例えば、市町村データベースから「和泉市(いずみし)」をよみがなで検索したい場合、
    「いずみし」、「いづみし」、「いすみし」いずれでも検索できるようにしたいと思っています
    2009年12月26日 20:08

回答

  • 「ず」と「づ」、同一視したい人もいれば、異なる文字と扱いたい人もいるでしょう。
    「いずみし」が挙げられていますがそのルールだと「ぃつみぢ」は同一視したいですか? とか。
    希望するルールは一人ひとり異なり、「すいかさんの思い浮かべたルール」が用意されている可能性の方が低いです。
    逆に、プログラムというのはそういうのを書くことです。同一視したいのなら、そういう検索処理を書きましょう。

    # 同一視すると今度は、それに合わせた並べ替えルールも考えないと整合性が取れないんですよね。
    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月26日 21:28
  • DB には「いずみし」と入っているところを、SELECT クエリの WHERE の条件としてユー
    ザーが入力した文字列が「いずみし」、「いづみし」、「いすみし」のいずれでも、そのレコー
    ドを抽出できるようにしたいということですか?
    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月27日 7:36
  • > 上記あたりを拝見すると一度検索語句を変換してみたいな感じは読み取れたのですが、

    参考にされている Web サイトの方法を見ますと、単純に、ある文字を決まったパターン
    で別の文字に置き換えているだけのように見えます(例えば、ひらがなをカタカナに、濁
    音を清音に)。

    一方、やりたいことは「いづみし」、「いすみし」、「ぃずみし」などで検索をかけて「いずみ
    し」をヒットさせることと理解していますが、参考にされている Web サイトの方法のよう
    な単純な変換ではそれは無理なようです。

    .NET Framework のライブラリや SQL Server の関数などにも、そのような変換機能
    または曖昧検索機能を持っているものはないと思います(自分が知る限りですが)。

    曖昧検索は深くて高度なジャンルのようで、自分のような素人が口を出すのはおこがまし
    いですが、今回のようなケースでは辞書を作って検索するのが現実的と思います。ただし、
    日本全国の市町村すべての読み方の候補を列挙した辞書を作る手間が問題ですが。

    辞書を使わないで「いづみし」、「いすみし」、「ぃずみし」などを「いずみし」と認識できるよ
    うなアルゴリズムを考えて、コードにして実装するのは、残念ながら自分の手に余ります。

    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月28日 12:42
  • まず、質問はVisual Studioについてであり、「データベース」とはあるもののSQL ServerなどのDBエンジンを使用しているかどうかは言及されていませんが…

    SQL Serverのフルテキスト検索 にあいまい検索のための枠組みはあるみたいですね。ただ、使い方は知りません。
    また、どのような文字があいまいとみなされるのかも書かれていません。自分でXMLファイルを書くみたいですが。
    結局、私の最初のコメントと同じで、何を曖昧とみなすのか、その部分を明確にする必要があるということです。

    で、そういうことをするなら、IEqualityComparer<string>を実装してそれを使って比較を行えばいい、
    つまりは「プログラムというのはそういうのを書くことです。同一視したいのなら、そういう検索処理を書きましょう。」に行きつくと思います。

    # 大高とかピンポイントなネタを…隣の駅の学校に通ってましたよ。
    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月28日 14:52

すべての返信

  • 「ず」と「づ」、同一視したい人もいれば、異なる文字と扱いたい人もいるでしょう。
    「いずみし」が挙げられていますがそのルールだと「ぃつみぢ」は同一視したいですか? とか。
    希望するルールは一人ひとり異なり、「すいかさんの思い浮かべたルール」が用意されている可能性の方が低いです。
    逆に、プログラムというのはそういうのを書くことです。同一視したいのなら、そういう検索処理を書きましょう。

    # 同一視すると今度は、それに合わせた並べ替えルールも考えないと整合性が取れないんですよね。
    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月26日 21:28
  • DB には「いずみし」と入っているところを、SELECT クエリの WHERE の条件としてユー
    ザーが入力した文字列が「いずみし」、「いづみし」、「いすみし」のいずれでも、そのレコー
    ドを抽出できるようにしたいということですか?
    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月27日 7:36
  • はい。その通りになります。
    検索してみたのですが、探し方が下手なのか見つけることが出来ませんでした。

    http://dbweb.0258.net/wiki.cgi?page=%A4%A2%A4%A4%A4%DE%A4%A4%B8%A1%BA%F7
    http://shin3tky.blogspot.com/2009/07/blog-post_13.html

    上記あたりを拝見すると一度検索語句を変換してみたいな感じは読み取れたのですが、私には難しく、
    また、エクセルでは標準の機能で上記が出来るみたいでしたので他にやり方があるのではと思い質問した次第です。

    • 回答としてマーク すいか 2009年12月28日 18:37
    • 回答としてマークされていない すいか 2009年12月28日 18:37
    2009年12月27日 16:15
  • >そのルールだと「ぃつみぢ」は同一視したいですか?

    ここまでは求めていませんが、人がよく間違うであろう「ず」と「づ」など一般的にありえそうなことは同一視したいです

    名古屋の大高の読みを「おおだか」で登録してあっても、「おおたか」で検索しても出てきてほしいと思っています。
    • 回答としてマーク すいか 2009年12月28日 18:37
    • 回答としてマークされていない すいか 2009年12月28日 18:38
    2009年12月27日 16:23
  • > 上記あたりを拝見すると一度検索語句を変換してみたいな感じは読み取れたのですが、

    参考にされている Web サイトの方法を見ますと、単純に、ある文字を決まったパターン
    で別の文字に置き換えているだけのように見えます(例えば、ひらがなをカタカナに、濁
    音を清音に)。

    一方、やりたいことは「いづみし」、「いすみし」、「ぃずみし」などで検索をかけて「いずみ
    し」をヒットさせることと理解していますが、参考にされている Web サイトの方法のよう
    な単純な変換ではそれは無理なようです。

    .NET Framework のライブラリや SQL Server の関数などにも、そのような変換機能
    または曖昧検索機能を持っているものはないと思います(自分が知る限りですが)。

    曖昧検索は深くて高度なジャンルのようで、自分のような素人が口を出すのはおこがまし
    いですが、今回のようなケースでは辞書を作って検索するのが現実的と思います。ただし、
    日本全国の市町村すべての読み方の候補を列挙した辞書を作る手間が問題ですが。

    辞書を使わないで「いづみし」、「いすみし」、「ぃずみし」などを「いずみし」と認識できるよ
    うなアルゴリズムを考えて、コードにして実装するのは、残念ながら自分の手に余ります。

    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月28日 12:42
  • まず、質問はVisual Studioについてであり、「データベース」とはあるもののSQL ServerなどのDBエンジンを使用しているかどうかは言及されていませんが…

    SQL Serverのフルテキスト検索 にあいまい検索のための枠組みはあるみたいですね。ただ、使い方は知りません。
    また、どのような文字があいまいとみなされるのかも書かれていません。自分でXMLファイルを書くみたいですが。
    結局、私の最初のコメントと同じで、何を曖昧とみなすのか、その部分を明確にする必要があるということです。

    で、そういうことをするなら、IEqualityComparer<string>を実装してそれを使って比較を行えばいい、
    つまりは「プログラムというのはそういうのを書くことです。同一視したいのなら、そういう検索処理を書きましょう。」に行きつくと思います。

    # 大高とかピンポイントなネタを…隣の駅の学校に通ってましたよ。
    • 回答としてマーク すいか 2009年12月28日 18:37
    2009年12月28日 14:52
  • あれからいろいろとデーターベースを見直してみました

    中には「吉川(よかわ)」というのがありまして、「よしかわ」でも検索できるようにしたいと思い、
    検索用の語句を入れる列を一列追加して、そこも検索するようにしようと思います
    データの追加は面倒ですが「一度してしまえば」と思いやってみます

    今回は質問を撤回するようなことで大変申し訳ございません
    次回からはじっくりと考えてから発言したいと思います


    みなさん、親身に考えていただいてありがとうございました
    2009年12月28日 18:21