![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
pytanie w jaki sposób wybrać z całego tekstu fragment, w którym występuje najwięcej powtarzających się słów? Tekst Cytat Mądrość w najwęższym znaczeniu to umiejętność podejmowania uzasadnionych decyzji, które w dłuższej perspektywie przynoszą pozytywne rezultaty. W innym ujęciu można powiedzieć, że mądrość to umiejętność praktycznego wykorzystywania posiadanej wiedzy i doświadczenia. W tym sensie można np. mówić o mądrości nauczyciela, który wykorzystując swoją wiedzę pedagogiczną radzi sobie z kształceniem niesfornego ucznia, czy mądrości szefa, który w oparciu o posiadaną wiedzę fachową i praktyczną znajomość stosunków międzyludzkich skutecznie zarządza wieloosobowym personelem. W głębszym sensie, często stosowanym w różnych religiach, mądrość oznacza zdolność do działania nacechowanego głębokim, emocjonalnym zaangażowaniem, zwiększającego w długiej perspektywie czasowej nie tylko dobro własne, ale też dobro ogólne. W tym sensie używa się tego terminu w takich zwrotach jak np. mądrość życiowa, czy mądrość rodzicielska. W obu tych znaczeniach mądrość wymaga nie tylko samej wiedzy, lecz także szeregu predyspozycji psychicznych, ale też duchowych i etycznych... Źródło Wikipedia Liczba wystąpień słów: 1. mądrość - występuje 6 razy w tekście 2. sensie - 3 razy 3. mądrości - 2 razy ... umiejętność - 2 razy Po przeanalizowaniu tekstu interesują nas tylko fragmenty – zdania z największą liczbą wystąpień powtarzających się słów. Z tekst powinien zostać wybrany fragment, jako pierwsze zdanie, priorytetowe słowo mądrość (występuje 2 razy – najwięcej w jednym zdaniu) i sensie (1 raz w zdaniu). W tym sensie używa się tego terminu w takich zwrotach jak np. mądrość życiowa, czy mądrość rodzicielska. i dalej W tym sensie można np. mówić o mądrości nauczyciela, który wykorzystując swoją wiedzę pedagogiczną radzi sobie z kształceniem niesfornego ucznia, czy mądrości szefa, który w oparciu o posiadaną wiedzę fachową i praktyczną znajomość stosunków międzyludzkich skutecznie zarządza wieloosobowym personelem. Z ograniczeniem długości wybranego tekstu np. do 3 zdań, albo może łatwiej do 500 znaków. W jaki sposób tego dokonać? Ten post edytował Malinaa 6.12.2010, 13:44:14 |
|
|
![]()
Post
#2
|
|
Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
Może skorzystaj z str_word_count? Ewentualnie jak będziesz korzystał z implode() czy explode() czy ogólnie tablic to przyda się array_count_values
Ten post edytował Daiquiri 6.12.2010, 11:45:23 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Funkcje zliczającą same słowa już napisałem wcześniej z wykorzystaniem array_count_values(), ale jak teraz wydobyć z tekstu tylko te zdania, w których znajdują się istotne dane - najczęściej występujące slowa i ułożyć je posortować w kolejności od zdania priorytetowego (z największą liczbą słów)?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 19 Dołączył: 7.09.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Moze taka prowizora coś nakieruje:
robisz sobie np explode po kropce i zapisujesz to do tablicy indeks to numer zdania nastepnie mozesz sobie jakos przeleciec podaną tablicę foreach'em dla każdego tekstu robisz np znowu explode, tym razem po spacji
nastepnie zliczasz wystapienia http://pl2.php.net/manual/en/function.array-count-values.php
i masz tu ilosc wystapien kazdego slowa dostosuj sobie podane przyklady do Twoich wymagań Pisane z palca, powinno pomóc Powodzenia Ten post edytował pablo89pl 6.12.2010, 12:11:32 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Obecnie mam coś takiego:
nie działa. Można ten kod dopracować i otrzymać w wyniku oczekiwane zdania? Ten post edytował Malinaa 6.12.2010, 13:24:59 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 19 Dołączył: 7.09.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
mialeś z tego skorzystać i samemu coś wykombinować...
np:
zwracaną masz tablice: słowo#numer_zdania => ilosc_wystapien obrób sobie w sposób jaki tam sobie potrzebujesz Ten post edytował pablo89pl 6.12.2010, 16:32:12 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Szczerze mówiąc,
nie wiem jak z Twojego kodu wybrać tylko te potrzebne zdania, ale z pomocą tego kodu, rozwiązałem zagadkę (IMG:style_emoticons/default/smile.gif) Tutaj robisz coś fajnego, ja zrobiłem to na swój sposób. Jeżeli miałbyś czas dokończyć to super. Podsumowując dziękuje za prezent Mikołajkowy (IMG:style_emoticons/default/dry.gif) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 19 Dołączył: 7.09.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
zmodyfikuj sobie jak uwazasz, usun co zbedne, dodaj co potrzebne (IMG:style_emoticons/default/smile.gif) z tego co napisales chcialbys wybrac zdania z iloscia tych wybranych slow jak najwieksza w takim razie musisz uzyc substr_count jakeis pętle na każdym zdaniu i zsumować wystąpienia tych słow w kazdym zdaniu i potem wybrac wówczas musisz zmodyfikowac następującą pętlę:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chyba zakumałem Twój kod.
To jednak było za wcześnie //$wybrane_zdania = array_unique($wybrane_zdania); //asort($wybrane_zdania); ponieważ nie wyświetlało wyniku w oczekiwanej kolejności, ustaliłem więc priorytety i teraz działa na 100% (IMG:style_emoticons/default/smile.gif)
zawsze są jednak jakieś wyjątki, jest jeszcze jeden problem // Wyjatki $szukaj = array('np.','....','...','..',','); // mozna inaczej, powstaja bledy ? $zastap = array('np','','',''); $tekst_wyjatki = str_replace($szukaj, $zastap, $tekst); Pomysł na wyjątki? Coś w rodzaju jeśli więcej niż jedna kropka ciąg = '' i dla skrótów jeśli np. długość słowa przed kropką <= 3 znaki. Ten post edytował Malinaa 7.12.2010, 22:01:42 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Możesz przyjąć, że granica zdań jest tam, gdzie występuje wzorzec:
Kod mała_litera kropka białe_znaki duża_litera i użyć wyrażeń regularnych do rozbijania tekstu. Przykład 2 pokazuje, że rozwiązanie nie jest idealne (IMG:style_emoticons/default/smile.gif)
PS. Wyrażenie działa dla tekstu zakodowanego w UTF-8. Jeśli z jakiegoś powodu używasz kodowania iso/windows, to zamień \p{Ll} i \p{Lu} odpowiednio na [a-zążśźęćńół] i [A-ZĄŻŚŹĘĆŃÓŁ] i wywal modyfikator u Ten post edytował Noidea 7.12.2010, 23:38:00 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tym sposobem mogłoby być i lepiej,
ale narazie przekłamuje. Wyniki, zliczone słowa // str_replace [mądrość] => 6 [sensie] => 3 [wiedzy] => 2 [perspektywie] => 2 [wiedzę] => 2 [mądrości] => 2 [można] => 2 [który] => 2 [umiejętność] => 2 // pattern - preg_split ? [mądrość] => 6 [można] => 2 [mądrości] => 2 [wiedzę] => 2 [perspektywie] => 2 [który] => 2 [sensie] => 2 [umiejętność] => 2 Dlaczego z użyciem pattern przekłamuje, ponieważ bez str_replace np. wyraz 'sensie' występuje też z przecinkiem [sensie,] => 1 i wiele innych wyrazów podobnie. Wyrażenie nie usuwa przecinka i innych znaków znajdujących się przed, za wyrazem. Musiałoby być tutaj inne wyrażenie? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli potrzebujesz tylko usunąć przecinki na końcach wyrazów, to robisz:
ale polecam oczyścić słowa ze wszelkiego śmiecia, które znajduje się na początku/końcu (nawiasy, przecinki, cyfry, dwukropki, itp.)
Teraz skrypt powinien spełniać twoje oczekiwania, ale nadal nie poradzi sobie ze wszystkimi przypadkami. Język polski nie jest językiem regularnym, więc nie da się go ogarnąć wyrażeniami regularnymi. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Teraz bez kombnacji jest oczekiwany wynik.
I to mi się podoba (IMG:style_emoticons/default/smile.gif) Może nie jest idealnie, ale jest bardzo dobrze. Dzięki |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 09:11 |