![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Potrzebuję dla pewnego projektu napisac wyszukiwarke tekstową z procentowym sortowaniem trafności.
Jako że jest późna pora, przed snem walnąłem poniższy kodzik:[php:1:d6d9cf3ab1]<?php $strSentence = 'Gdyby wybory parlamentarne odbyły się w kwietniu, 33-procentowe poparcie uzyskałaby Platforma Obywatelska. Na drugiej pozycji znalazłaby się Samoobrona z 24-procentowym poparciem, a na dalszych miejscach: Socjaldemokracja Polska - 10%, i PiS - 7%.'; $strSearchPhrase = 'Samoobrona Platforma poparcie'; $fltTotalSimilarity = 0.0; $arrNeedle = explode( ' ', $strSearchPhrase ); $arrHaystack = explode( ' ', $strSentence ); foreach ($arrNeedle as $strNeedle ) { foreach ($arrHaystack as $strHaystack ) { similar_text( $strHaystack, $strNeedle, &$fltSimilarity ); $fltTotalSimilarity += $fltSimilarity; } } echo $fltTotalSimilarity.'%<br />'; ?>[/php:1:d6d9cf3ab1]Dla podanego tekstu, wynik wynosi 1958.68821553% co jest oczywisice wartością śmieszną. Wydaje mi się, ze ten wynik powinienem zredukować jakoś przeliczając $fltTotalSimilarity przez ilość słów w obydwu podanych ciągach na przykład.. lub w jakiś inny sposób zredukowąć do zakresu 0% - 100%, ale nic mi nie przychodzi do głowy. Może Wam coś zaświta? _________________________________________ Dodam jeszcze, że zastosowanie prostego:[php:1:d6d9cf3ab1]<?php $strSentence = 'Gdyby wybory parlamentarne odbyły się w kwietniu, 33-procentowe poparcie uzyskałaby Platforma Obywatelska. Na drugiej pozycji znalazłaby się Samoobrona z 24-procentowym poparciem, a na dalszych miejscach: Socjaldemokracja Polska - 10%, i PiS - 7%.'; $strSearchPhrase = 'Samoobrona Platforma poparcie'; $fltTotalSimilarity = 0.0; similar_text( $strSentence, $strSearchPhrase, &$fltTotalSimilarity ); echo $fltTotalSimilarity.'%<br />'; ?>[/php:1:d6d9cf3ab1]Daje wynik 19.5652173913% - może pozostać przy tym prostym rozwiązaniu? -------------------- |
|
|
![]()
Post
#2
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
Ja bym pozostał przy tym prostym rozwiązaniu... W końcu poco kombinować mając działający gotowiec...
![]() Bardzo często stosuję przy mojej pracy stwierdzenie "najprostrze rozwiązania są najbardziej dopracowane" ![]() Heh... ja przy budowaniu wyszukiwarki użyłem znacznie prostrzego mechanizmu porównywania - ilość wystąpień poszukiwanej frazy w tekście. Mając największą ilość wystąpień zapisaną w zmiennej, wyliczałem wartości procentowe dla kolejnych trafień... Mimo wyjątkowej prostoty efekt jest ![]() -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Wciąż się zastanawiam, jak ustalić współczynnik zgodności.
Zaletą pierwszego rozwiązania jest to, że jeśłi mi wyskoczy wynik powyżej 100%, to go obcinam do właśnie 100% i urzytkownik widzi, że w poszukiwanym ciagu jego fraza jest. Na chwile obecna mam trzy metody:[php:1:36caa674bc]<?php $strSentence = 'Gdyby wybory parlamentarne odbyły się w kwietniu, 33-procentowe poparcie uzyskałaby Platforma Obywatelska. Na drugiej pozycji znalazłaby się Samoobrona z 24-procentowym poparciem, a na dalszych miejscach: Socjaldemokracja Polska - 10%, i PiS - 7%.'; $strSearchPhrase = 'Samoobrona Platforma poparcie'; $fltTotalSimilarity = 0.0; $fltSimilarity = 0.0; $arrNeedle = explode( ' ', $strSearchPhrase ); $arrHaystack = explode( ' ', $strSentence ); // -------------------------------------------------- // Porównujemy poszczegolne wyrazy obu ciągów // -------------------------------------------------- foreach ($arrNeedle as $strNeedle ) { foreach ($arrHaystack as $strHaystack ) { similar_text( $strHaystack, $strNeedle, $fltSimilarity ); $fltTotalSimilarity += $fltSimilarity; } } echo $fltTotalSimilarity.'%<hr />'; $fltTotalSimilarity = 0.0; // -------------------------------------------------- // Porównujemy bezpośrednio ciągi // -------------------------------------------------- similar_text( $strSentence, $strSearchPhrase, $fltTotalSimilarity ); echo $fltTotalSimilarity.'%<hr />'; $fltTotalSimilarity = 0.0; // -------------------------------------------------- // Porównujemy każdy wyraz frazy szukanej z całym // ciagiem przeszukiwanym // -------------------------------------------------- foreach ($arrNeedle as $strNeedle ) { similar_text( $strSentence, $strNeedle, $fltSimilarity ); $fltTotalSimilarity += $fltSimilarity; } echo $fltTotalSimilarity.'%<hr />'; ?>[/php:1:36caa674bc]I nie wiem, która pokazuje najtrafniejsze wyniki, które wyglądają kolejno: Cytat 1958.68821553%
19.5652173913% 21.0878609712% -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
JUż Ci na ircu powiedziąłem: nie przeczytales dokładnie mojego problemu.
Mam Trzy metody, w których wykorzystuje własnie [manual:f34d14010c]similar_text[/manual:f34d14010c] i szukam opiini, która jest najbardziej wiarygodna. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
Czytając przeszukiwany tekst i frazę do wyszukania dał bym około ~40% trafności... w takim układzie najbliższa oczekiwań jest wersja 3...
-------------------- Powrót do przeszłości :)
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:29 |