Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Częstotliwość występowania wyrazu
Forum PHP.pl > Forum > PHP
mimol
Elo jęsli mam plik z tysiącami wyrazami, to da się jakiś program anpisać, który wyraz się najczęsciej powtarza?
nowotny
Da się... wczytujesz każdą linię pliku do tablicy... potem przelatujesz po tej tablicy i sprawdzasz każdy element za pomocą funkcji count" title="Zobacz w manualu PHP" target="_manual(array_keys" title="Zobacz w manualu PHP" target="_manual) i wyniki wpisujesz do innej tablicy w postaci $tablica[]=array(nazwa elementu, liczba wystąpień) jednocześnie usuwając te elementy z pierwszej tablicy... w $tablicy będziesz elementy z dwoma własnościami, wyrazem i liczbą wystąpień... po drodze jeszcze będziesz musiał użyć referencji w jednym miejscu, ale to już pozostawiam tobie do obadania... smile.gif

Pewnie to nie jest najbardziej wydajny sposób ale tylko taki mi przyszedł do głowy...
sobstel
lepiej wykorzystać array_count_values(), np.

  1. <?php
  2. $contents = file_get_contents($file);
  3. $words = explode(' ', $contents); // wczytanie do tablicy wszystkich wyrazów
  4. $counts = array_count_values($words); // tablica z ilościamo wystąpień
  5. rsort($counts); // sortowanie od najwięcej wystąpień do najmniej
  6.  
  7. // oczytujemy pierwszą wartość (najwięcej wystąpień)
  8. reset($counts);
  9. echo key($counts); // słowo
  10. echo current($count); ilość wystąpień
  11. ?>


można tam dodać jeszcze array_filter() od filtrowania np. pustych wartości oraz spójników itp.
nowotny
Też to rozważałem ale co jeśli wyrazy zawierają znaki które są niedozwolone jako indeksy elementów...?
mimol
jestem troche zielony z php;/
Czy mogłby mi ktoś dać gotowy kod do tego?
założmy, że mam te wyrazy w pliku wyrazy.txt (oczywiście każdy wyraz mam w osobnym wierszu) smile.gif )
najlepiej jak to potrafię poprawić to coś takiego:
Kod
<?php
$contents = file_get_contents($file);
$file = file("wyrazy.txt");
$words = explode(' ', $contents); // wczytanie do tablicy wszystkich wyrazów
$counts = array_count_values($words); // tablica z ilościamo wystąpień
rsort($counts); // sortowanie od najwięcej wystąpień do najmniej

// oczytujemy pierwszą wartość (najwięcej wystąpień)
reset($counts);
echo key($counts); // słowo
echo current($counts); ilość wystąpień
?>
Virti
  1. <?php
  2. $file = file("wyrazy.txt");
  3. ?>
to jest niepotrzebne
remik09
@sopel twoj skrypt chyba jednak nie zrobi tego

  1. <?php
  2. echo key($counts);
  3. ?>


jestes pewny ze to wyswietli wyraz a nie numer klucza ?

@mimol ja taka funkcje robilem na mysql bo jakos chyba latwiej, ale chetnei skorzystam z rozwiazania jak bedzie tu podane, a jesli chcesz skorzystac z tego na mysql to powiedz i podam kod
mimol
ale czy bedę umiał masowo dodać te moje wyrazy do bazy??
Czy będę musiał pojedyńczo dodawać te wyrazy do bazy..?
Virti
będziesz musiał chyba ułożyć pętlę do dodawania tych słówek, chyba, że jest sposób na dodanie do bazy kilku rekordów jednym zapytaniem, ale raczej wątpie
sobstel
Cytat('mimol')
jestem troche zielony z php;/ Czy mogłby mi ktoś dać gotowy kod do tego?


nie... zwłaszcza, że praktycznie go ode mnie dostałeś. jeśli nie działa to napisz w czym problem. jeśli nie potrafisz ssobie z nim poradzić to zapraszam do tego działu.

Cytat(remik09 @ 10.02.2008, 13:55:17 ) *
@sopel twoj skrypt chyba jednak nie zrobi tego (...) jestes pewny ze to wyswietli wyraz a nie numer klucza ?


masz rację, to wyświetli klucz tablicy... tylko że kluczem jest właśnie ten wyraz. ;-)
sprawdź sobie co zwraca array_count_values" title="Zobacz w manualu PHP" target="_manual.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.