Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podobieństwo plików
Forum PHP.pl > Forum > PHP
uirapuru
Mam katalog plików, siedzi to sobie w bazie, należy każdy plik do jednej lub wielu kategorii, jest również opisany jakimiś tam tagami (zachowanymi w tablicy tagów, w przypadku tagu, który jeszcze tam nie istnieje - jest on dodawany do tablicy), posiada swoją nazwę.

Zastanawiam się jak zrobić taki box "Podobne pliki" na stronie: przy pokazywaniu jednego z plików obok pojawiałaby się lista np. 10 podobnych plików.

Jako kryteria do określenia podobieństwa chciałbym obrać właśnie nazwę, tagi i kategorię, do której przynależy plik. Nie mam jednak za cholerę pomysłu jak to wszystko ogarnąć, a najlepiej, jeśli dałoby się to zrobić po stronie bazy danych.

Wyobrażam to sobie jako jakąś wielką funkcję, która porównuje pliki każdy z każdym i wylicza jakieś tam procentowe podobieństwo, a zwraca listę plików powyżej danego progu punktowego).

Albo może przy dodawaniu już pliku liczyć mu z danych jakiś tam hash czy coś ( jednak przy aktualizacji tablic może on sie okazywać nieaktualny (np. dodanie tagów itp)), a przy szukaniu podobnych plików porównywać już same hashe (np. string z soundex plus kilka id od tagów i kategorii).

Macie lepszy pomysł?
Savail
poczytaj o funkcji similar_text. Powinna byc pomocna ^^
  1. similar_text($string1, $string2, $procent);

dane do porównywania ustawiasz jako string1 i string2. $procent automatycznie liczy procent podobienstwa. Oczywiscie mozliwe ze bedziesz potrzebowal uzycia roznych petli zeby to wszystko zlozyc do kupy

Edycja:
Zapomnialem dodac ze jesli $string1 i $string2 beda np tablicami przechowujacymi wiele nazw to aby $procent wyswietlal procent obliczany dla nazwy kazdej z osobna to wystarczy zamiast $procent wpisac $procent[] w similar_text. Pozniej:
  1. $ile = count($procent);
  2. for($i=0; $i<$ile; $i++){
  3. echo $procent[$i]
  4. }
phpion
Jeśli po stronie bazy i jeśli bazą tą jest MySQL to może SOUNDEX. Niestety ma pewne ograniczenia:
Cytat
This function, as currently implemented, is intended to work well with strings that are in the English language only. Strings in other languages may not produce reliable results.

This function is not guaranteed to provide consistent results with strings that use multi-byte character sets, including utf-8.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.