WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:相互マッチング

0:[投稿] もち [2003/01/31 11:28 ][環境:IE6,WIN2K CGI]

$strに眼鏡が入っている状態で、検索$Keyが「メガネ」or「眼鏡」の一方で抽出するにしたいのですが、どうすればいいかわかりません。
$str=tr/眼鏡/メガネ/; では置き換えなので$Keyがメガネのときにはダメですし。

何か方法は無いでしょうか?


1:[回答] 薫 [2003/01/31 13:03 ]

> 検索$Keyが「メガネ」or「眼鏡」の一方で抽出

(1)
if($str =~ /メガネ|眼鏡/){ 処理 }

(2)
@keys = ('メガネ','眼鏡');
foreach(@keys){
if($str =~ /$_/){ 処理 }
}

とか?
置換なら
$str =~ s/メガネ|眼鏡/めがね/;
かな?


2:[質問] もち [2003/02/02 21:15 ]

ご回答ありがとうございます。

2.の方法で試したいと思います。
それで、このときに「メガネと眼鏡」のような組み合わせ候補がたくさんある場合はどのようにしたらいいでしょうか?
候補全てをそれぞれforeachで回すことしか思いつきませんでしたが、重くなりそうで・・・。


3:[回答] 匿名万歳 [2003/02/03 12:19 ]

むしろ、
 $key =~ s/メガネ|めがね/眼鏡/;
 if ($str =~ /$key/) {処理}
では?

どう運用するのかわからないので(2)の方法が使えるのならかまいませんが、$keyがユーザ入力なら(2)の方法は使えないと思います。


4:[回答] もち [2003/02/03 13:06 ]

ご回答ありがとうございます。

おっしゃるとおり$keyがユーザ入力なので、
$key =~ s/メガネ|めがね/眼鏡/;
if ($str =~ /$key/) {処理}
でした。
今テストしてうまく動きました。

それで、同義の例が幾つかあるときは、
$key =~ s/$Key候補1|$Key候補2/$strにあるもの/;
をそれぞれ用意するしかないのでしょうか?

「カタカナの表記ゆれ」みたいな実装は困難なのかな。。。
http://www.google.com/intl/ja/help/basics.html#stopwords


5:[回答] 匿名万歳 [2003/02/04 12:40 ]

$strの方の「表記ゆれ」に対応するとなると、
>>1 の(2)の方法を組み合わせる必要があると思います。

 if($key =~ /メガネ|めがね|眼鏡/) {
   @keys = ("メガネ", "めがね", "眼鏡");
 }
 foreach (@keys) {
   if($str =~ /$_/) { 処理 }
 }

@keysの定義が沢山ある場合は…大変ですね。

軽くする対応の可能性としては、$str側を作成する時に、表記ゆれをチェックするとか、すべてカタカナもしくはひらがなで入力するとか。

でも、googleの表記ゆれの対応といっても、エヤコン、エアコンには対応して無いようです。ダイヤモンド、ダイアモンドにはさすがに対応してましたが。

どこまで対応するかは、何のためにそれをするかによると思うので、実用性を考えた方がよいと思います。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World