0

私は、ユーザーが入力した文字列を照合して、自分に合ったグループを検索するための単純な php ファイルを作成しています。文字列に最大限一致するデータベースから 5 つのレコードを表示する必要があります。また、php と mysql で soundex() 関数を試しました。私は現在、この目的のために正規表現パターンマッチャーを設計しようとしています。この目的のためにサンプルの正規表現パターンを提案してもらえますか? 簡単に実装でき、複雑すぎず、時間がかからない他の方法はありますか。距離アルゴリズムを使用したコードでこれを試してみました Want I は基本的に「dps」のユーザータイプです

PHPはそれらを取得する必要があります

<?php
function minimum($a,$b,$c)
{
    if($a>$b)
    {
        if($a>$c)
        {
            return $a;
        }
        else
        {
            return $c;
        }
    }
    else
    {
        if($b>$c)
        return $b;
        else
        return $c;
    }
}
function Distance($s ,   $t)
{

  $m=strlen($s);
  $n=strlen($t);
  $d[]=array();
for( $i=0;$i<$m;$i++)
{

    for($j=0;$j<$n;$j++)
    {

        $d[$i][$j]=0;

    }

}

for ( $i=0; $i<$m;$i++)
  {
    $d[$i][0] = $i;
  }
for( $j=0;$j<$n;$j++)
  {
    $d[0][$j] = $j;
  }

  for ($j=1;$j<$n;$j++)
  {
    for ($i=1;$i<$m;$i++)
    {
      if ($s[$i] ==$t[$j])
        $d[$i][$j] =$d[$i][$j];       // no operation required
      else
        $d[$i][ $j] = minimum
                   (
                     $d[$i-1][ $j] + 1,
                     $d[$i] [$j-1] + 1,
                     $d[$i-1][ $j-1] + 1
                   );
    }
  }

  return $d[$m-1][$n-1];

}

?>`
4

1 に答える 1

2

それを達成するための多くの方法があります:

  • Levenshtein を試すことができます: http://php.net/manual/en/function.levenshtein.phpこれは、2 つの文字列間の距離を計算するために使用されます。
  • 正規表現を考えると、文字列の長さが異なると問題が発生します...
  • もう 1 つのオプションは、大量のテキスト データがある場合、ElasticSearch (http://www.elasticsearch.org/) または Solr (http://lucene.apache.org/solr/) を検討することです。最良の選択肢
于 2012-07-04T07:33:47.917 に答える