![]() |
![]() |
![]()
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
|
|
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% |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 08:51 |