Sanojen laskeminen

Miten saisin kätevästi laskettua, kuinka monta kutakin sanaa tekstitiedostossa on?
Sanat saan helposti luettua esimerkiksi vektoriin, mutta en keksi miten saisin vektorillakaan laskettua sanojen määrän kohtuu vaivatta?

Siis jos tekstitiedosto esim. sisältäisi seuraavaa:
"Olipa kerran nuori apina, jolla oli HIV. Apina päätti tehdä itsarin, mutta ei sitten uskaltanutkaan. Näin voi käydä, jos ei ole varuillaan."

Olipa 1
kerran 1
nuori 1
apina 2
jolla 1
oli 1
HIV 1
päätti 1
tehdä 1
itsarin 1
mutta 1
ei 2
uskaltanutkaan 1
Näin 1
voi 1
käydä 1
jos 1
ole 1
varuillaan 1
4544
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

import java.util.Hashtable;
import java.util.Vector;

public class Testi {
   
   public static Hashtable teeFrekvenssi(Vector sanat) {
      Hashtable table = new Hashtable();
      Integer maara = 0;
      
      for(String sana : sanat)
         if ((maara = table.get(sana = sana.toLowerCase())) == null)
            table.put(sana, 1);
         else
            table.put(sana, maara 1);
      
      return table;
   }


   public static void tulostaFrekvenssi(Hashtable frekvenssi) {      
      for (String key : frekvenssi.keySet())
         System.out.println(key " " frekvenssi.get(key));
   }
   

   
   public static void main(String[] args) {
      Vector sanat = new Vector();
      
      sanat.add("Olipa");
      sanat.add("kerran");
      sanat.add("apina");
      sanat.add("Apina");
      sanat.add("tarvitsi");
      sanat.add("apua");
      
      tulostaFrekvenssi(teeFrekvenssi(sanat));
   }
}

Äänestä
  • ...voisitko selittää vielä tätä kohtaa??


    for(String sana : sanat)
    if ((maara = table.get(sana = sana.toLowerCase())) == null)
    table.put(sana, 1);
    else
    table.put(sana, maara 1);

    Äänestä

  • vûlva kirjoitti:

    ...voisitko selittää vielä tätä kohtaa??


    for(String sana : sanat)
    if ((maara = table.get(sana = sana.toLowerCase())) == null)
    table.put(sana, 1);
    else
    table.put(sana, maara 1);

    Ensimmäinen lause "for (String sana : sanat)" tarkoittaa sitä, että käydään läpi kaikki sanat -vektorin sanat siten, että sana muuttujaan tule aina vektorissa oleva sana. Seuraavalla rivillä vektorista poimittu sana muutetaan pieneksikirjaimiksi käskyllä "sana = sana.toLowerCase()". Tämän jälkeen taulukosta haetaan sanan esiintymismäärä "maara = table.get(sana)" -komennolla, eli avaimena käytetään sanaa. Jos esiintymismäärää ei saada taulukosta (eli null vertailu), tarkoittaa tämä sitä ettei sanaa ole vielä taulukossa, joten se lisätään sinne komennolla "table.put(sana, 1);", joka siis alustaa samalla sanan esiintymismääräksi 1:n. Jos esiintymismäärä saatiin, tallennetaan tällöin taulukkoon uusi esiintymismäärä, eli yksi suurempi, komennolla "table.put(sana, maara 1);".

    Ohjelmassa siis käytetään hyväksi tyyppistä taulukkoa. Taulukon avain on siis String tyyppinen ja taulukon sisältö on Integer tyyppinen. Avaimena käytetään sanaa ja sisältönä käytetään esiintymismäärää. Ohjelma vaatii Java 5:n.

    Äänestä

  • Vanha Erkki kirjoitti:

    Ensimmäinen lause "for (String sana : sanat)" tarkoittaa sitä, että käydään läpi kaikki sanat -vektorin sanat siten, että sana muuttujaan tule aina vektorissa oleva sana. Seuraavalla rivillä vektorista poimittu sana muutetaan pieneksikirjaimiksi käskyllä "sana = sana.toLowerCase()". Tämän jälkeen taulukosta haetaan sanan esiintymismäärä "maara = table.get(sana)" -komennolla, eli avaimena käytetään sanaa. Jos esiintymismäärää ei saada taulukosta (eli null vertailu), tarkoittaa tämä sitä ettei sanaa ole vielä taulukossa, joten se lisätään sinne komennolla "table.put(sana, 1);", joka siis alustaa samalla sanan esiintymismääräksi 1:n. Jos esiintymismäärä saatiin, tallennetaan tällöin taulukkoon uusi esiintymismäärä, eli yksi suurempi, komennolla "table.put(sana, maara 1);".

    Ohjelmassa siis käytetään hyväksi tyyppistä taulukkoa. Taulukon avain on siis String tyyppinen ja taulukon sisältö on Integer tyyppinen. Avaimena käytetään sanaa ja sisältönä käytetään esiintymismäärää. Ohjelma vaatii Java 5:n.

    ...vielä kerran avusta
    ja hyvästä selityksestä!

    Äänestä

Kommentoi aloitusta


vûlva kirjoitti:

Miten saisin kätevästi laskettua, kuinka monta kutakin sanaa tekstitiedostossa on?
Sanat saan helposti luettua esimerkiksi vektoriin, mutta en keksi miten saisin vektorillakaan laskettua sanojen määrän kohtuu vaivatta?

Siis jos tekstitiedosto esim. sisältäisi seuraavaa:
"Olipa kerran nuori apina, jolla oli HIV. Apina päätti tehdä itsarin, mutta ei sitten uskaltanutkaan. Näin voi käydä, jos ei ole varuillaan."

Olipa 1
kerran 1
nuori 1
apina 2
jolla 1
oli 1
HIV 1
päätti 1
tehdä 1
itsarin 1
mutta 1
ei 2
uskaltanutkaan 1
Näin 1
voi 1
käydä 1
jos 1
ole 1
varuillaan 1

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu