0

Okay - so, I've spent ages searching in Google, and even went through a few specific searches at hotscripts etc., several php forums and this place ... nothing (not of use anyway).

i want to be able to take a block of text (page/file/doc) and pull it apart to find the "distance" between specific terms (find the proximity/raltional distance etc.).

I woudl have thought there'd be at least a few such thigns around - but I'm not finding them. So - it may be harder than I thought. I understand it may be a somewhat "hungry" endevour - as it's likely to be fairly intensive on large documents - but surely it is possible?

Infact - whilst looking around - the majority of references that I find (apart from lamo-repeat SEO sites) seems to suggest advanced linguistic studies, strange/advanced packages to install onto a server etc.

Am I to assume that "proximity" is infact a highly complex issue, and will require serious resources and an awful lot of development? (Honestly - in my mind it seems somewhat moderate - so I'm wondering exactly what it is I'm missing (Note: Simple in a relative sense ... I would compare it to easy (density/count) through to difficult(word stemming/base/thesaurusing)).

So - references/suggestions/ideas/thoughts???

4

3 に答える 3

0

フェリックス・クリングがコメントしたように、私はハミング距離についても考えました。たぶん、あなたはあなたの単語を特定のコードワードにエンコードし、そしてあなたのコードワードを保持する配列を通してそれらの距離をチェックするいくつかの変形を作ることができます。

したがって、array [11、02、85、37、11]がある場合、この配列で11の最大距離が4であることが簡単にわかります。

これがあなたのために働くかどうかはわかりませんが、私は同じようにそれを行うと思います。

于 2011-04-03T19:24:50.730 に答える
0

特定の単語の比較について話している場合は、MySQL の SOUNDEX 関数を参照してください。(mysqlを使用している可能性があると仮定します)。2 つの単語を比較すると、それらがどのように聞こえるかを参照できます。

SELECT `word` FROM `list_of_words` WHERE SOUNDEX(`word`) = SOUNDEX('{TEST_WORD}');

次に、単語のリストを取得したら (か​​なりの数の単語を取得する可能性が高いため)、それらの単語間の距離を調べて、最も近い単語 (コードの書き方によっては単語のグループ) を確認できます。

$word = '{WORD TO CHECK}';
$distance = 4; // the smalled the distance the closed the word
foreach($word_results as $comparison_word) {
   $distance = levenshtein($comparison_word, $word);
   if($distance < $threshold) {
      $threshold = $distance;
      $similar_word = $comparison_word;
   }
}
echo $similar_word;

あなたが探している方向性を見つけるのに役立つことを願っています。

ハッピーコーディング!

于 2011-04-03T19:47:34.033 に答える
0

あなたの例は Word1 ... Word2 を検索しましたが、Word2 ... Word1 も一致する必要がありますか? 簡単な解決策は、RegEx を使用することです。

すなわち:

  1. 正規表現を使用: \bWord1\b(.*)\bWord2\b
  2. 最初の一致グループで、スペース (または任意の境界) を使用して配列に分割し、カウントします。

これは最も単純な方法ですが、(つまり、パフォーマンスに関して) 最善の方法ではないことは間違いありません。より具体的な回答が必要な場合は、ニーズを明確にする必要があると思います。

アップデート:

2 つの質問がマージされた後、soundex、レビンスタイン、ハミング距離などに言及している他の回答が表示されます。人々が役立つ助けを提供できるように、要件を明確にするために theclueless1 を提案します。これが検索またはドキュメント クラスタリングに関連するアプリケーションである場合は、sphinx や lucene などの成熟した全文インデックス作成/検索ソリューションを検討することもお勧めします。どれもPHPで使えると思います。

于 2011-04-07T07:14:52.020 に答える