![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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? |
|
|
![]()
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 (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
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)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
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 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
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
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
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. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 40 Dołączył: 26.08.2009 Skąd: Kobiernice Ostrzeżenie: (0%) ![]() ![]() |
aby uwzgledniało liczby: Ten post edytował Armstrong 8.08.2010, 14:31:34 |
|
|
![]()
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.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice 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. 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... |
|
|
![]()
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 (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]()
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-ż] (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
[...] 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-ż] (IMG:style_emoticons/default/smile.gif) [...] Warto podkreślić to zdanie, sam nie wiedziałem a teraz widzę jak mogłem uprościć niejedną linijkę kodu. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 10.10.2009 Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
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 |
|
|
![]()
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ć? |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 309 Pomógł: 56 Dołączył: 3.11.2006 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice 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? Które źle działa. Masz tutaj dwa porównane kody, MÓJ i TWÓJ:
|
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 40 Dołączył: 26.08.2009 Skąd: Kobiernice Ostrzeżenie: (0%) ![]() ![]() |
@fifi209 Kilkunastu linijek zrobiłem raptem 2, dlaczego pokazuje o 2 za mało można się domyślić z tego jak przedstawiłeś dane.
wystarczy wywalić: a dać: i działa. Fifi ilość: 19 Armstrong ilość: 19 Wcześniej zliczało także ile razy występowały te wyrazy. Ten post edytował Armstrong 8.08.2010, 20:33:10 |
|
|
![]()
Post
#25
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Muk4... problem z wszystkimi, powtarzam jeszcze raz wszystkimi bez wyjątku funkcjami str* jest ten, że źle działają z polskimi znakami. Można używać wersji mb_*, ale nie wszystkie funkcje str* mają swoje odpowiedniki pośród nich. Stąd właśnie problem ze "ślimakiem" Funkcja zliczająca wyrazy tratuje polskie diakrytyki jako znaki nieliterowe (kto nie wierzy niech sam sprawdzi) i w ten sposób słowo "kościół" może zostać uznane za 1, 2, albo nawet 3 wyrazy ( litery ś oraz ó zrobią za "spacje" ). Stąd im się nie ufa z założenia.
Warunkiem koniecznym jest odpowiednie potraktowanie wejścia by rozdzielić potencjalne wyrazy, a potem usunięcie tego, co nie jest spacją lub literą polskiego alfabetu. Fifi... zapomniałeś jeszcze o myślniku, dwukropku, średniku i kilku ogólnie znakach interpunkcyjnych, które mogą oddzielać wyrazy w funkcji robiącej z nich spację. Poza tym niepotrzebnie od razu robisz explode. Wpierw wywal nieliterowe znaki, zredukuj wielokrotne space do tylko jednej, strimuj całość zdania i potem rób explode. Będzie jeszcze mniej wrażliwe na ewentualne byki. |
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
Jak 4? U mnie wyświetla 3.. Kurcze sprawdziłem jeszcze raz, no bo błąd się każdemu może zdarzyć no i dalej widzę 4. Cytat PHP Version 5.3.1 Za stare mam PHP? Edit: Ciekawe, w PHP 5.2.11 (http://ideone.com/hXxIr) też wychodzi 3 Ten post edytował flashdev 8.08.2010, 20:24:06 |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 40 Dołączył: 26.08.2009 Skąd: Kobiernice Ostrzeżenie: (0%) ![]() ![]() |
Ala ma ślimaka.
wyjdzie 3. Po coś są te dodatkowe parametry. Raczej nie tworzono ich aby ładnie pisało. Ten post edytował Armstrong 8.08.2010, 20:26:42 |
|
|
![]()
Post
#28
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Armstrong... Ale jak zachowa się w przypadku bardziej złożonych zdań? Nie mówimy tu bowiem o jedynie prostych, ale także złożonych, z pominiętymi spacjami po znakach interpunkcyjnych i ogólnie błędną gramatyką. Wiem, że str_word_count jest fajne i jako wbudowana powinna być wydajniejsza. Tylko trzeba przetestować wydajność tę oraz faktyczną skuteczność.
A co do naszych funkcji to i tak będą jaja gdy ktoś zechce pisać w dialekcie leet czy pokemonami. Bo wtedy zamiast liter wchodzą też cyfry, a to w przypadku zdań z wyrażeniami matematycznym i wywoła chaos w wynikach. Nieważne którą wersję byśmy wykorzystali (IMG:style_emoticons/default/biggrin.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 18:21 |