Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Menghitung banyak kata

Halo semuanya, ada masalah yang mo kutanya nih!!

gini ceritanya. ak mo mencari kata yang paling banyak muncul dalam suatu textarea. setelah itu dihitung jumlah kata tersebut dan menampilkan 3 kata terbanyak. kira2 gimana ya sintaksnya?
ada ga cara lain selain ga dimasukin ke database?
mohon pencerahannya dari mas2 .. :)
Tagged:

Comments

  • Wah, kebetulan saya juga lagi buat kaya' gitu mas supercool...
    kalo logika saya, pake array 2 dimensi,
    sebelumnya dipotong2 dulu isi teksnya pake 'explode'.

    Untuk array pertama isinya adalah kata2 potongan dari text tersebut, lalu array kedua adalah banyaknya kata dari teks itu. Cuma saya blom tau logikanya di php gimana. he he he... :D
    mungkin ada yang lebih tau?
  • $kata="SUSU SAYA SUSU BENDERA";
    $arr_kata=array();
    $tempkata="";
    for ($i=0;$i<strlen($kata);$i++){
    if (substr($kata,$i,1)==" "){
    $new=1;
    foreach ($arr_kata as $a=>$b){
    if ($arr_kata[$a][kata]=="$kata"){
    $new=0;
    $arr_kata[$a][hits]++;
    }
    }
    if ($new==1){
    $arr_kata=array(kata=>$tempkata,hits=>1);
    }
    $tempkata="";
    }else{
    $tempkata.=substr($kata,$i,1);
    }
    }
    $arr_hasil=array();
    $banyak_kata=3;
    for($i=1;$i<=$banyak_kata;$i++){
    $arr_hasil[]=0;
    }
    foreach($arr_kata as $a=>$b){
    foreach ($arr_hasil as $c=>$d){
    if ($arr_kata[$a][hits]>$arr_hasil[$c]){
    $arr_hasil[$c]=$kata[$a][hits];
    }
    }
    }

    foreach($arr_hasil as $a=>$b){
    echo "Terdapat kata $arr_kata[$a][kata] sebanyak $arr_kata[$a][hits]<br>";
    }

    pertama-tama, kode diatas akan memecah kalimat, kemudian akan menyimpan setiap kata ke dalam array $arr_kata, setiap ditemukan kata yang sama dengan yang sebelumnya, kode diatas akan mengupdate nilai hits pada kata yang terdapat di dalam array $arr_kata, dan jika tidak maka akan ditambah sebuah array baru. sedangkan $tempkata adalah variabel yang menyimpan kata yang akan diproses secara sementara, yang mana nilai $tempkata akan direset jika kata yang ia simpan telah diproses.
    setelah melakukan pemecahan kata, maka dibuat sebuah array $arr_hasil, yang mana array inilah yang akan menyimpan kata-kata terbanyak dari $arr_kata, yang pertama yang variabel ini lakukan adalah "membatasi" jumlah kata terbanyak, yaitu hanya akan diambil 3 kata terbanyak($banyak_kata), yang mana setiap nilai awal dari $arr_hasil diset menjadi 0
    setelah itu, dilakukan looping untuk mendiskualifikasi jumlah kata, caranya adalah dengan melakukan pengecekan terhadap terhadap setiap nilai array $arr_hasil
    jika nilai baru yang diambil dari $arr_kata lebih banyak dari nilai yang sudah ada pada arr_hasil, maka akan dilakukan update terhadap nilai arr_hasil
    yang terakhir, dilakukan looping untuk mencetak nilai-nilai yang udah didapat
    aku gak sempat ngetes script ini, soalnya lagi ada di warnet, tapi logikaku mengatakan bahwa script diatas bakal berjalan dengan lancar ^_^. amin.
  • Yesss!!! berhasil, berhasil!! akhirnya berhasil!!
    terima kasih mas kecebongsoft atas pencerahannya. listingnya sangat membantu :D Listingnya pas saya coba ga bisa jalan, tapi karena itu saya jadi semangat lagi ngulik2 codingnya he he he.. :D

    saya menggunakan contoh kalimat : "susu saya susu bendera tapi susu. ini saya buang"

    Untuk pemotongan katanya saya pake "explode()", trus saya looping array hasil explode-nya. lalu dicocokin sama array yang akan menampung hasil penghitungan kata. awalnya saya set 0.
    Nah, yang agak sulitnya itu ketika ingin mengetahui kata kedua yang sama. itu butuh beberapa kali pengecekan. untuk pengecekan pertama saya pake fungsi "eregi()"

    Memang ada beberapa kekurangan dari listing ini. saya belum mencoba kalo kata pertama dari textnya ada tambahan titik(.), karena itu akan membuat pola kata pertama ada titiknya, misal: kata "susu.", nah untuk kata susu berikutnya yang tanpa titik menurut saya ga dianggap sama. Lalu, menampilkan 3 kata utama yang paling banyak blom bisa dibuat. mungkin kalo yang ini ada yang bisa membantu? :D

    Ini saya sertakan listing codingnya supaya bisa dikoreksi sama yang lain. Mungkin listingnya masih keliatan berantakan dan kurang efektif, saya berharap ada yang bisa lebih baik dari coding saya ini

    untuk mas kecebongsoft, wah saya salut sama mas!! bisa buat program pas lagi di warnet! salut buat mas!!
  • loh, kok ga muncul ya file attachment-nya? kumaha ieu' ? saya coba ulang lagi deh. oya, untuk mas supercool, dicoba ya listing saya, mungkin bisa ditambahain sama mas sendiri.. :D

    LISTING PROGRAM:

    $arr_kata = explode(" ",$kata);
    $count_kata = count($arr_kata);
    $nums = 0;

    $arr_word[$nums][hits] = 1;
    $bool[0] = 0;
    $yup = 0;
    for ($i=0;$i<$count_kata;$i++) {
    echo $i.':'.$arr_kata[$i]." - ";
    for ($a=0;$a<=$nums;$a++) {
    //if ($arr_word[$a][kata] == $arr_kata[$i]) { bisa pake 'if' ini kalo pola katanya pasti sama
    if ($arr_word[$a][kata] != NULL) {
    if (eregi($arr_word[$a][kata],$arr_kata[$i])) {
    $bool[$a] = 1;
    echo $a.": kesini<br>";
    }
    }
    }

    /****************** mulai pengecekan kata ********************/
    for ($c=0;$c<=$nums;$c++) {
    if ($bool[$c] == 1) {
    $arr_word[$c][hits]++;
    $yup = 1;
    echo "cek looping:c=".$c.":arr_word[$c][hits]= ".$arr_word[$c][hits]."<br>";
    }
    }

    if ($yup == 0) {
    $nums++;
    $arr_word[$nums][kata] = $arr_kata[$i];
    $arr_word[$nums][hits] = 1;
    echo "ga ada,arr_word[$nums][kata]=".$arr_word[$nums][kata].":arr_word[$nums][hits]=".$arr_word[$nums][hits]."<br>";
    } else {
    $yup = 0;
    for ($d=0;$d<=$nums;$d++) {
    $bool[$d] = 0;
    }
    }
    /********************* pengecekan kata selesai *******************/
    echo "-selesai-<br>";
    }

    echo "<br>";
    foreach($arr_word as $v=>$v1) {
    echo $v.':';
    foreach ($v1 as $v2=>$v3) {
    echo "$v3 <br>";
    }
    }
  • syukur deh kalo berhasil (soalnya ku kira bakal gagal :):)).
    untuk "mas" kecebongsoft ?
    lain kali jangan manggil mas:P, aku masih sma
  • weh, padahal ak masih smp kok !! :D :D bo'ong deng... he he he..
    thx kecebong, semoga bentar lagi bisa jadi katak :)
    eh, tapi ada yang mo kutanya lagi nih. ak baru ketemu bug-nya...
    Misalnya dalam teks tersebut ada kata "ada" sama "adalah". nah, kalo pake "eregi()" kata "adalah" nanti dianggap sama dengan "ada". tapi kalo eregi-nya diganti sama "==" aja ntar kasus "ada" sama "ada." dianggap ga sama. gimana tuh solusinya?
  • kalo boleh tahu, situ pake eregi untuk menginisialisasi perbedaan antara huruf kapital dan huruf kecil antara karakter ya??, kalo bisa jangan pake eregi, sebab jika ada urutan huruf yang sama, fungsi eregi akan mengembalikan nilai menjadi true.

    ini adalah script final yang kayaknya 99.99% bakal berhasil, selain itu aku juga masukin fungsi-fungsi array php yang sangat efektif :

    <?
    //----BAGIAN PERTAMA : INISIALISASI
    $kata="Aku adalah seorang superman, sekarang aku ada di udara";
    echo $kata."<br>"; // MENAMPILKAN KATA YANG AKAN DIPROSES
    $pemisahan=".,"; // VARIABEL INI DIISI OLEH PEMISAHAN KATA, SEPERTI DIPISAH OLEH TITIK, KOMA, dst
    for ($i=0;$i<strlen($pemisahan);$i++){ //MELAKUKAN LOOPING UNTUK MEMISAHKAN KATA BERDASARKAN $PEMISAHAN
    $current_pemisahan=substr($pemisahan,$i,1);
    $kata=str_replace($current_pemisahan,"",$kata);
    }
    $kata=explode(" ",$kata); //MEMECAH KATA MENJADI ARRAY BERDASARKAN KARAKTER SPASI

    // ----BAGIAN KEDUA : PENGECEKAN KATA
    $arr_kata=array();
    foreach ($kata as $a=>$b){
    $add_new=1; //UNTUK PERTAMA KALI $ADD_NEW DISET 1, ARTINYA BELUM DITEMUKAN KATA YANG SAMA
    $current_kata=$kata[$a];
    foreach ($arr_kata as $c=>$d){ //MENGECEK ITEM-ITEM DI $ARR_KATA
    if (strtolower($current_kata)==strtolower($arr_kata[$c][kata])){ //JIKA ADA KATA YANG SAMA
    $arr_kata[$c][hits]++; //NAIKAN NILAI HITS
    $add_new=0; //SET $ADD_NEW JADI 0, ARTINYA KATA YANG SAMA UDAH DITEMUKAN
    }
    }
    if ($add_new==1){ //JIKA $ADD_NEW MASIH 1, ARTINYA TIDAK DITEMUKAN KATA YANG SAMA
    $arr_kata[]=array(hits=>1,kata=>$current_kata); // BUAT ARRAY BARU
    }
    }

    //
    BAGIAN KETIGA : MENAMPILKAN KATA
    $i=0;
    $batas=3; //--BATAS PENGURUTAN KATA
    rsort($arr_kata); //MENGURUTKAN $ARR_KATA BERDASARKAN NILAI HITS YANG TERBESAR
    foreach ($arr_kata as $a=>$b){
    $i++;
    if ($i<=$batas){ //JIKA NILAI $I LEBIH KECIL DARI $BATAS, TAMPILKAN HASILNYA
    $current_kata=$arr_kata[$a][kata];
    $current_hits=$arr_kata[$a][hits];
    echo $current_kata." : ".$current_hits."<br>";
    }
    }
    ?>

    pada bagian pertama, kata-kata yang sudah ada akan dihilangkan tanda bacanya(titik,koma) dengan sebuah looping yang ditambah
    fungsi str_replace, tanda baca tersebut akan diganti dengan karakter "". setelah itu $kata akan dibuat menjadi array dengan
    fungsi explode

    Pada bagian kedua, dibuat sebuah array baru, yaitu $arr_kata. kemudian dilakukan looping $kata. kata yang akan dicek disimpan
    nilainya pada variabel $current_kata, setelah itu dicek, apakah kata ini sudah ada di variabel $arr_kata. disini aku nggak make
    eregi untuk ngebedain huruf kecil ama besar, melainkan aku mencoba untuk mengubah semua huruf dalam kata-kata menjadi kecil semua,
    dengan menggunakan fungsi strtolower. Kemudian barulah dicek kesamaannya ^_^.

    pada bagian ketiga $arr_kata yang telah menyimpan nilai hits dan nilai kata, akan disorting secara terbalik, dari nilai hits yang
    terbesar, menggunakan fungsi rsort. setelah itu barulah ditampilkan ke browser sebanyak $batas.!
    selamat mencoba script ku ^_^, meskipun aku nggak sempat nyoba, tapi aku berani jamin gak ada error. kalo masih ada bugnya,
    kasih tau aku ya ^_^.
  • fps juga keren koq:), semua itu kan berkat bimbingan para master2 disini;)
  • wah, jitu banget nih programnya!! ok, ak jadi lebih jelas sekarang. Blom dicoba sih beberapa kasus tertentu, tapi kaya'nya itu sudah memenuhi deh. thx berat!!

    ak pake eregi cuma karena mo mencari pola kata aja, emang sih ada beberapa kekurangannya ak akuin..

    bravo buat anak muda di forum ini!! yakin deh Indonesia akan lebih maju teknologinya kalo pinternya kaya' si kecebong ini!!! :)
  • misi nih..
    mau nanya kecebongsoft yang script final yang kayaknya 99.99% bakal berhasil itu bisa dipake dalam kasus saya gk ya, begini nih kasusnya..

    kita mencari beberapa buku dengan memasukan kata, misal kata "web". nah kata "web" tersebut kita hitung ada berapa kali kata "web" diulang pada sinopsis, dan hasil hitungannya itu ditampilkan.. ini udah ke database sih..

    tolong bantuannya..
Sign In or Register to comment.