Kepadatan Panjang Kata PHP / Hitung kalk untuk sebuah string

Diberikan sebuah teks, bagaimana saya bisa menghitung kepadatan/jumlah panjang kata, sehingga saya mendapatkan keluaran seperti ini

  • 1 huruf kata : 52/1%
  • Kata 2 huruf : 34 / 0,5%
  • Kata 3 huruf : 67/2%

Menemukan ini tetapi untuk python


person giorgio79    schedule 18.07.2011    source sumber


Jawaban (3)


Anda dapat memulai dengan membagi teks menjadi beberapa kata, menggunakan explode() (sebagai solusi yang sangat/terlalu sederhana) atau preg_split() < em>(memungkinkan hal-hal yang sedikit lebih kuat) :

$text = "this is some kind of text with several words";
$words = explode(' ', $text);


Lalu, ulangi kata-kata tersebut, dapatkan panjangnya masing-masing kata, menggunakan strlen()< /kuat> ; dan memasukkan panjangnya ke dalam array:

$results = array();
foreach ($words as $word) {
    $length = strlen($word);
    if (isset($results[$length])) {
        $results[$length]++;
    }
    else {
        $results[$length] = 1;
    }

}

Jika Anda bekerja dengan UTF-8, lihat mb_strlen().


Di akhir perulangan itu, $results akan terlihat seperti ini :

array
  4 => int 5
  2 => int 2
  7 => int 1
  5 => int 1


Jumlah total kata yang Anda perlukan untuk menghitung persentasenya, dapat ditemukan:

  • Dengan menambah penghitung di dalam loop foreach,
  • atau dengan memanggil array_sum() di $results setelah loop selesai.

Dan untuk perhitungan persentasenya, ini sedikit perhitungan -- Saya tidak akan terlalu membantu, soal itu ^^

person Pascal MARTIN    schedule 18.07.2011
comment
terlalu cepat :( - untuk menambah ini, sebelum meledakkan teks sebaiknya str_replace semua tanda baca dengan apa pun karena jika Anda memiliki sesuatu seperti: Java oke tapi PHP adalah yang terbaik. - best = 5 karakter padahal sebenarnya 4 :) - person hex4; 18.07.2011
comment
@hex4 benar; atau dia dapat memfilter kata (dan karakternya) di awal perulangan foreach, sebelum mengetahui panjang kata tersebut. - person Pascal MARTIN; 18.07.2011

Anda dapat mengelompokkan teks dengan spasi dan kemudian untuk setiap kata yang dihasilkan, hitung jumlah hurufnya. Jika ada simbol tanda baca atau pemisah kata lainnya, hal ini harus diperhitungkan.

$lettercount = array();
$text = "lorem ipsum dolor sit amet";
foreach (explode(' ', $text) as $word)
{
  @$lettercount[strlen($word)]++; // @ for avoiding E_NOTICE on first addition
}

foreach ($lettercount as $numletters => $numwords)
{
  echo "$numletters letters: $numwords<br />\n";
}

ps: Saya belum membuktikannya, tapi seharusnya berhasil

person Carlos Campderrós    schedule 18.07.2011

Anda bisa lebih pintar dalam menghilangkan tanda baca dengan menggunakan preg_replace.

$txt = "Sean Hoare, who was first named News of the World journalist to make hacking allegations, found dead at Watford home. His death is not being treated as suspiciou";

$txt = str_replace( "  ", " ", $txt );
$txt = str_replace( ".", "", $txt );
$txt = str_replace( ",", "", $txt );

$a = explode( " ", $txt );

$cnt = array();
foreach ( $a as $b )
{
  if ( isset( $cnt[strlen($b)] ) )
    $cnt[strlen($b)] += 1;
  else
    $cnt[strlen($b)] = 1;
}

foreach ( $cnt as $k => $v )
{
  echo $k . " letter words: " . $v . " " . round( ( $v * 100 ) / count( $a ) ) . "%\n";
}
person Steve Claridge    schedule 18.07.2011