Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Funkcja liczaca ilość słow, Funkcja liczaca ilość słow
kozyk
post 8.08.2010, 13:39:03
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.08.2010

Ostrzeżenie: (0%)
-----


Drodzy uzytownicy forum prosze o pomoc.Szukam funkcji która obliczy mi ilość słów w polu tekstowym.Oto strona na której chciałbym ta funkcje napisać, miała by ona po nacisnieciu przycisku obliczyc ilość słow.

<?php

$tresc = (string)$_GET['tresc'];


?>
<html>
<head>
<title>Pole tekstowe</title>
</head>
<body>

<body bgcolor="black">
<br><br>
<center>
<form action="" method="get">
<textarea name="tresc" input type="text"></textarea>
<br><br>
<input type="submit" name="submit" value="oblicz ilosc wyrazów" />




</center>
</body>
</html>

Z góry dziekuje.Przepraszam za brak BBcodu ale jestem dopiero poczatkujacy w fdziedzinie programowania komputerowego
Go to the top of the page
+Quote Post
wujek2009
post 8.08.2010, 13:55:50
Post #2





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

Ostrzeżenie: (0%)
-----


http://php.net/manual/en/function.strlen.php sprawdź funkcje strlen (np. var_dump(strlen($_POST['tresc']));

PS. $_GETem treść przekazujesz? nie lepiej $_POST?
Go to the top of the page
+Quote Post
Mefiuu
post 8.08.2010, 13:58:53
Post #3





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

Ostrzeżenie: (0%)
-----


Hmmm... ale czy czasem funkcja strlen nie zwraca długości ciągu? A jemu chyba chodzi o zliczanie słów w tekście czy ja źle rozumiem?

bbcode dodajesz przez dodanie przed swoim kodem [php ] i po kodzie [/ php] oczywiście bez spacji winksmiley.jpg
Go to the top of the page
+Quote Post
kozyk
post 8.08.2010, 14:02:34
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.08.2010

Ostrzeżenie: (0%)
-----


Tak, chodzi mi zliczanie ilości wyrazów (słów)
Go to the top of the page
+Quote Post
flashdev
post 8.08.2010, 14:08:33
Post #5





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(kozyk @ 8.08.2010, 15:02:34 ) *
Tak, chodzi mi zliczanie ilości wyrazów (słów)


Najprostszym przybliżonym sposobem to policzenie ilości *spacji i dodanie 1 do wyniku. W przybliżeniu powinno się zgadzać z ilością słow.

Edit
*spacji lub ogólnie białych znaków

Ten post edytował flashdev 8.08.2010, 14:09:36


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 8.08.2010, 14:09:15
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(wujek2009 @ 8.08.2010, 13:55:50 ) *
http://php.net/manual/en/function.strlen.php sprawdź funkcje strlen (np. var_dump(strlen($_POST['tresc']));

Yyy?

@topic
Policzenie słów to wcale nie takie proste zadanie, musiałbyś mieć najlepiej jakiś słownik...

ew. rozbić po spacjach, przelecieć pętlą a w niej sprawdzać długość i pierwszy znak:
+/- coś takiego
  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=utf8');
  4.  
  5. $tekst = 'Moja mama lubi koty, a tata nie. :)';
  6.  
  7. $text = explode(' ', $tekst);
  8. $words = array();
  9. $len = 0;
  10.  
  11. foreach ($text as $str) {
  12. $word = preg_replace('#[^a-ząśżźćęłóń]+#i', '' ,$str);
  13. if (mb_strlen($word) > 0) {
  14. $words[] = $word;
  15. $len += mb_strlen($word);
  16. }
  17. }
  18.  
  19. echo 'Słowa to: '.implode(', ', $words).'<br/>o łącznej długości: '.$len.' znaków.';
  20.  
  21. ?>




--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
kozyk
post 8.08.2010, 14:10:38
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.08.2010

Ostrzeżenie: (0%)
-----


Tylko czasem jak ktoś szybko pisze może zorbic wiecej spacji np " acha to jest Ala" > wtedy wyjdzie mi ze jest 6 wyrazów a jest 4
Go to the top of the page
+Quote Post
Fifi209
post 8.08.2010, 14:13:59
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(kozyk @ 8.08.2010, 14:10:38 ) *
Tylko czasem jak ktoś szybko pisze może zorbic wiecej spacji np " acha to jest Ala" > wtedy wyjdzie mi ze jest 6 wyrazów a jest 4

Widać oglądałeś moje rozwiązanie...


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
flashdev
post 8.08.2010, 14:14:41
Post #9





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(kozyk @ 8.08.2010, 15:10:38 ) *
Tylko czasem jak ktoś szybko pisze może zorbic wiecej spacji np " acha to jest Ala" > wtedy wyjdzie mi ze jest 6 wyrazów a jest 4


Nie zawsze najważniejsza jest taka dokładność. Zadaj sobie pytanie czy w tym przypadku jest?
Jeśli ktoś niedbale pisze i wstawia po kilka spacji lub nie używa spacji po przecinku/kropce, to niech liczy się z tym, że wynik funkcji nie będzie prawidłowy.
Jeśli przepuszczasz przez funkcję jakieś komentarze czy coś podobnego to jak ktoś będzie chciał na złość śmieci przemycić to i tak to zrobi. A jak moderujesz wpisy to i tak nie dopuścisz do pojawienia się śmieci.


--------------------
Go to the top of the page
+Quote Post
Armstrong
post 8.08.2010, 14:18:08
Post #10





Grupa: Zarejestrowani
Postów: 200
Pomógł: 40
Dołączył: 26.08.2009
Skąd: Kobiernice

Ostrzeżenie: (0%)
-----


  1. $text= "ala dfashfa dhofgso sdjd";
  2. $words = count($words);
  3. echo $words;


aby uwzgledniało liczby:

  1. $words = (array_count_values(str_word_count(strtolower($text),1,'1234567890')));


Ten post edytował Armstrong 8.08.2010, 14:31:34


--------------------
// NOPE
Go to the top of the page
+Quote Post
IceManSpy
post 8.08.2010, 14:21:33
Post #11





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Jeśli chodzi o spacje na początku i końcu stringu, to ltrim i ptrim. Ponadto możesz sprawdzać czy znaki są między a-z i A-Z oraz czy chcesz liczby.


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 8.08.2010, 14:42:39
Post #12





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(IceManSpy @ 8.08.2010, 14:21:33 ) *
Jeśli chodzi o spacje na początku i końcu stringu, to ltrim i ptrim. Ponadto możesz sprawdzać czy znaki są między a-z i A-Z oraz czy chcesz liczby.

Albo trim dla jednego i drugiego...

@topic
Ludzie... dałem mu gotowca, który usuwa zbędne znaki i liczy słowa... + ilość znaków...


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
kozyk
post 8.08.2010, 15:04:49
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 1.08.2010

Ostrzeżenie: (0%)
-----


Armstrong dzieki za pomoc normalnie piwo Ci wisze biggrin.gif
Go to the top of the page
+Quote Post
thek
post 8.08.2010, 15:21:56
Post #14





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To ja nieco rozwinę post fifiego, który moim zdaniem jest najbliżej prawidłowych rezultatów. Najpierw wszystkie znaki przestankowe zamieniamy na spacje, gdyż de facto oddzielają wyrazy. Do tego wora wrzucamy ,.?/;-!|\#_ a po takiej zamianie robimy jeszcze wyrażenie regularne, które akceptuje jedynie litery i spacje. No chyba, że decydujemy się by każda liczba też była uznawana za wyraz. Wtedy musimy jako zamienianie na spacje rozszerzyć o znaki działań w poprzednim kroku. Ciekawostką jaką być może wiele osób nie zna jest fakt ujmowania w regexp polskich znaków poprzez coś innego niż [a-ząćęłńóśżź], a jest to możliwe poprzez użycie znacznie krótszego zapisu [a-ż] smile.gif Na koniec trim i zamiana wielokrotnie występujących obok siebie spacji na pojedynczą. Teraz już możemy faktycznie policzyć ile mamy wyrazów. Metod też jest kilka. Albo zsumowanie spacji, albo podział stringa do tablicy poprzez explode po spacji i zrobienie count. Możliwości jest naprawdę więcej niż 1 winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
flashdev
post 8.08.2010, 15:30:15
Post #15





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(thek @ 8.08.2010, 16:21:56 ) *
[...]
Ciekawostką jaką być może wiele osób nie zna jest fakt ujmowania w regexp polskich znaków poprzez coś innego niż [a-ząćęłńóśżź], a jest to możliwe poprzez użycie znacznie krótszego zapisu [a-ż] smile.gif
[...]


Warto podkreślić to zdanie, sam nie wiedziałem a teraz widzę jak mogłem uprościć niejedną linijkę kodu.


--------------------
Go to the top of the page
+Quote Post
damyrade1990
post 8.08.2010, 15:36:38
Post #16





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 10.10.2009

Ostrzeżenie: (10%)
X----


  1. <?php
  2.  
  3. $str="Jakiś bardzo długi tekst ";
  4.  
  5. preg_match_all("#[ ]{1}#sie",trim($str), $str);
  6.  
  7. $str=(int)count($str[0])+1;
  8.  
  9. echo "Ilość słow to: ".$str;
  10.  
  11. ?>


--------------------
[zmoderowane by nospor]
Go to the top of the page
+Quote Post
thek
post 8.08.2010, 16:07:53
Post #17





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Bym nie dodał... Jeśli chodzi o zapytanie akceptujące jedynie litery i spację, to ma to być zastępowanie wszystkiego co nimi nie jest znakiem pustym lub spacją (i tak następny krok nam wszystkie nadmiarowe poskraca). Całość skryptu jest niewrażliwa na byki w stylu wielokrotnych spacji obok czy też zapominania spacji po znakach przestankowych. Większość skryptów tutaj rozpozna zdanie "Modrzew,mimo iż posiada jaskrawo-zielone igły,gubi je jesienią." jako 7 wyrazowe, co jest przekłamaniem z racji nie uwzględnienia myślnika oraz braku spacji po przecinkach. Przelećcie teraz algorytmem jaki podałem i zobaczcie, że owe znaki u mnie stają się spacjami. Co automatycznie koryguje wyniki smile.gif Jedyne na co jest niewrażliwy to zgubione spacje, czyli choćby "alamakota". No ale z punktu widzenia gramatyki jest to jeden wyraz winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Armstrong
post 8.08.2010, 17:10:43
Post #18





Grupa: Zarejestrowani
Postów: 200
Pomógł: 40
Dołączył: 26.08.2009
Skąd: Kobiernice

Ostrzeżenie: (0%)
-----


@up
z moim rozwiązaniem pokazuje 10 wyrazów i nie trzeba wiele kombinować

ludzie skapujecie się, że podałem rozwiązanie?

Ten post edytował Armstrong 8.08.2010, 17:11:29


--------------------
// NOPE
Go to the top of the page
+Quote Post
muk4
post 8.08.2010, 17:23:59
Post #19





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


str_word_count ?
Coś nie tak z tą funkcją, że jej nie chcecie użyć?
Go to the top of the page
+Quote Post
flashdev
post 8.08.2010, 19:08:41
Post #20





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(muk4 @ 8.08.2010, 18:23:59 ) *
str_word_count ?
Coś nie tak z tą funkcją, że jej nie chcecie użyć?


Jest cool i wogóle fajna.

Ale...
  1. echo str_word_count('Ala ma ślimaka.'); // 4


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.05.2025 - 13:00