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
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
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));
}
}
...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.
...vielä kerran avusta
ja hyvästä selityksestä!