Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyraz pasujący do innego
Forum PHP.pl > Forum > PHP
SN@JPER^
Witam,

w jaki sposób zobaczyć czy dany wyraz pasuje "mniej więcej" do drugiego?

np. Manchester United jest podobne do Man Utd lub Manchester United
badź np Sunderland podobne do Sunderland FC

w jaki sposób to rozpoznać?

Pozdrawiam
mike
Może levenshtein() Ci się przyda?
SN@JPER^
Jeżeli dobrze rozumiem funkcje

  1. <?php
  2. if(levenshtein("Manchester United", "Manchester Utd") == "0")
  3. {
  4.  echo 'git';
  5. }
  6.  
  7. else
  8. {
  9.  echo'nie';
  10. }
  11. ?>


To mi nie działa tak jak chciałem...
mike
Cytat(SN@JPER^ @ 11.10.2008, 16:50:45 ) *
Jeżeli dobrze rozumiem funkcje (...)
Nie, nie rozumiesz. I popełniasz oczywiste błędy.
Po prierwsze funkcja levenshtein() zwraca liczbę. Ty natomiast porównujesz ją do stringa. Dlaczego?
Jeśli już w ogóle to:
  1. <?php
  2.  
  3. if(levenshtein("Manchester United", "Manchester Utd") == 0) {
  4.  
  5. // ...
  6.  
  7. ?>

Teraz. Muisz wiedzieć co zwraca ta funkcja. Zwraca ona Odległość Levenshteina. Jeśłi odległość jest równa zero to stringi są identyczne.
To kolejna przyczyna dlaczego Ci nie działa. Bo to co napisałeś nie ma sensu tongue.gif

Jeśli chcesz wiedzieć czy dwa ciągi pasują "mniej więcej" to musisz określić to "mniej więcej".
Załóżmy że odległość Levenshteina nie powinna być większa niż 4 (powinno to zależeć od długości ciągów).

  1. <?php
  2.  
  3. if(levenshtein("Manchester United", "Manchester Utd") <= 4) {
  4.    echo 'Wygląda na to, że ciągi są podobne';
  5. } else {
  6.    echo 'Może i ciągi są podone ale nie za bardzo tongue.gif';
  7. }
  8.  
  9. ?>


Możesz też skorzystać z funkcji similar_text() i założyć, że taka sama powinna być na przykład 75% znaków, wtedy ciągi są na tyle podobne ile potrzebujesz.
SN@JPER^
Dzięki wielkie, pomogłeś mi bardzo...
jezoo
mozna tez za pomoca preg_match
  1. <?php
  2. if(preg_match("/^Manchester United/","Manchester Utd") == 1)
  3. echo "Wyrazenia sa podobne";
  4. else
  5. echo "Wyrazenia nie sa podobne";
  6. ?>
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.