Sayangnya, melakukan ini di PHP sangat mahal (penggunaan CPU dan memori tinggi.) Namun, Anda pasti dapat menerapkan algoritme ke kumpulan data kecil.
Untuk memperluas secara khusus bagaimana Anda dapat membuat kehancuran server:beberapa fungsi PHP bawaan akan menentukan "jarak" antara string:levenshtein dan teks_serupa .
Data dummy:(berpura-pura menjadi berita utama)
$titles = <<< EOF Apple Apples Orange Oranges Banana EOF;$titles = explode("\n", $titles );
Pada titik ini, $titles seharusnya hanya berupa array string. Sekarang, buat matriks dan bandingkan setiap judul dengan SETIAP judul lainnya untuk kesamaan. Dengan kata lain, untuk 5 headline, Anda akan mendapatkan matriks 5 x 5 (25 entri.) Di situlah CPU dan memory sink masuk.
Itu sebabnya metode ini (melalui PHP) tidak dapat diterapkan ke ribuan entri. Tetapi jika Anda ingin:
$matches = array(); foreach( $titles as $title ) { $matches[$title] = array(); foreach( $titles as $compare_to ) { $matches[$title][$compare_to] = levenshtein( $compare_to, $title ); } asort( $matches[$title], SORT_NUMERIC ); }
Pada titik ini apa yang pada dasarnya Anda miliki adalah matriks dengan "jarak teks." Dalam konsep (bukan dalam data nyata) terlihat seperti tabel di bawah ini. Perhatikan bagaimana ada sekumpulan nilai 0 yang berjalan secara diagonal - itu berarti bahwa dalam loop yang cocok, dua kata yang identik -- yah, identik.
Apple Apples Orange Oranges Banana Apple 0 1 5 6 6 Apples 1 0 6 5 6 Orange 5 6 0 1 5 Oranges 6 5 1 0 5 Banana 6 6 5 5 0
Array $matches yang sebenarnya terlihat seperti ini (terpotong):
Array ( [Apple] => Array ( [Apple] => 0 [Apples] => 1 [Orange] => 5 [Banana] => 6 [Oranges] => 6 ) [Apples] => Array ( ...
Bagaimanapun, terserah Anda untuk (dengan eksperimen) menentukan apa yang paling cocok dengan cutoff jarak numerik yang baik - dan kemudian menerapkannya. Jika tidak, bacalah di sphinx-search dan gunakan - karena ia memiliki pustaka PHP.
Oranye Anda senang Anda bertanya tentang ini?