私は、カスタムコードの人間です。私は大規模で肥大化したシステムを使用するなら、仕事が正しく行われたとは思わないので、これをコードしたくない場合は塩の塊でこれを取ってください。しかし、これはあなたが作っているほど難しくないかもしれません。はい、私は間違いなくタグ付けシステムに行くでしょう。しかし、それほど複雑である必要はありません。ここで
は、私はそれを処理する方法をです:
まず、3つのテーブルでデータベースを作ります。 1つはカテゴリ、タグ、「リンク」(カテゴリとタグ間のリンク)です。
次に、配列を初期化するPHP関数を作成します(空の場合は正常に動作します)。存在しない場合は新しい(小文字の)単語をプッシュします。たとえば、次のようになります。
<?php
// Pass the new description to this
// function.
function getCategory($description)
{
// Lowercase it all
$description = strtolower($description);
// Kill extra whitespace
$description = trim($description);
$description = preg_replace('~\s\s+~', ' ', $description);
// Kill anything that isn't a number or a letter
// NOTE: This is untested, so just edit this however you'd like to make it work. The
// idea is to just eliminate everything that isn't a letter or number. Just don't take out
// spaces; we need them!
$descripton = trim($description, "[email protected]#$%^&*()_+-=[]{};:'\"\\\n\r|<>?,./");
// Now the description should just contain words with a single space in between them.
// Let's break them up.
$dict = explode(" ", $description);
// And find the unique ones...
$dict = array_unique($dict, SORT_STRING);
// If you wanted to, you could trim either common words you specify,
// or any words under, say, 4 characters. Up to you!
return $dict;
}
?>
次に、データベースをどのように設定するかを指定します。 (あなたは空想を取得したい場合は、InnoDBのにMySQLのエンジンを切り替えると関係を作る。少し速く、物事を作ります!)、いくつかのカテゴリと、いくつかのタグを作成して、それらを一緒にリンクする
Table `Categories`
|-------------------------|
| Column: Category |
| Rows: |
| Food |
| Animals |
| Plants |
| |
|-------------------------|
Table `Tags`
|-------------------------|
| Column: Tag |
| Rows: |
| eat |
| hamburger |
| meat |
| leaf |
| stem |
| seed |
| fur |
| hair |
| claws |
| |
|-------------------------|
Table `Links`
|-------------------------|
| Columns: tag, category |
| Rows: |
| eat, Food |
| hamburger, Food |
| meat, Food |
| leaf, Food |
| leaf, Plant |
| stem, Plant |
| fur, Animals |
| ... |
|-------------------------|
をMySQLのInnoDBの関係を使用することによりリンクテーブルは、行を作成することによってそれ以上のスペースを占めません。これは、がにリンクされているため、参考のためにすべて保存されているためです。これはと非常にデータベースサイズを削減します。
さて、キッカー、次の手順に従いデータベースへの巧妙なMySQLのクエリのために:各カテゴリについては
- 、カテゴリと記述辞書(の両方に属するタグをまとめます以前のPHP関数で作成したもの)。
- 最大から最小まで並べ替え
- トップ1または3、または好きなだけ多くのおすすめカテゴリを引き出します。
これにより、タグの一致数が最も高いカテゴリの素敵なリストが表示されます。どのようにMySQLクエリを作成するかはあなた次第です。
これは多くのセットアップのようですが、実際はそうではありません。最大3つのテーブル、1つまたは2つのPHP関数、および少数のMySQLクエリがあります。データベースはカテゴリ、タグ、両方の参照と同じくらい大きいだけです(リンクテーブルで参照は多くのスペースを占有しません)
データベースを更新するには、タグデータベースに存在し、それらを説明に割り当てることを決めたカテゴリにリンクします。これにより、データベースのタグ範囲が広がり、時間の経過とともにデータベースが説明に合わせて調整されます(つまり、より正確になります)。
あなたが本当に詳細な取得したい場合は、が正確なシステムをより一層なるだろう加重タグシステム、のようなものを作成するために、カテゴリとタグの間ののリンクを複製挿入したいです。
基本的にタグをカテゴリに割り当ててから、説明のタグ数をタグのカテゴリ数と比較します。私は...記述にタグ(食べ物、肉、毛皮)がある場合、それらの2つの単語に "リンク"しているので最も高い確率は(食べ物)ですが、動物に2回目の試合が起こる可能性があります。 –
かなり。それは私がそれについて行く方法です! – Qix