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
Diberikan sebuah teks, bagaimana saya bisa menghitung kepadatan/jumlah panjang kata, sehingga saya mendapatkan keluaran seperti ini
Menemukan ini tetapi untuk python
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:
foreach
,array_sum()
di $results
setelah loop selesai.Dan untuk perhitungan persentasenya, ini sedikit perhitungan -- Saya tidak akan terlalu membantu, soal itu ^^
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
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";
}