Statistická analýza textu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Statistická analýza textu – Java – Fórum – Programujte.comStatistická analýza textu – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
8. 12. 2012   #1
-
0
-

Zdravím, měl bych prosbu ohledně programování v Javě. Jedná se o napsání tří metod, jedna z načteného textového souboru zjistí deset nepoužívanějších, deset nejméně používaných slov a deset nejdelších slov. Myslíte, že by mi s tím někdo pomohl? 

Děkuji za každý nápad nebo řádek kódu.  

Nahlásit jako SPAM
IP: 79.110.37.–
sakal910
Stálý člen
8. 12. 2012   #2
-
0
-

#1 Evrokorps
Takže nejprve si musíš načíst ten soubor :) to myslím není třeba rozebírat:) Dále budeš potřebovat načtený String rozdělit do pole, předpokládám že za každým slovem je mezera tak ten načtený String rozdělíš podle mezer do pole: 
 

String[] slova = text.split(" ");

kde text je právě ten načtený soubor ve Stringu.

potom si uděláš metodu např. nejpouzivanejsiSlova(String[] slova); kde ten rozdělený String na slova předáš jako parametr... V té metodě pak například přes cyklus budeš postupně kontrolovat slova a někde si zapisovat kolikrát je dané slovo v poli...

druhou metodu uděláš obdobně...

a v té třetí budeš kontrolovat délku těch slov a ty nejdelší pak vrátíš :)

Takhle to třeba můžeš udělat, klidně bych ti tu dal celý kód ale zkus si to udělat nejdříve sám ať to aspoň trochu pochopíš a naučíš:) 

Nahlásit jako SPAM
IP: 31.222.8.–
11. 12. 2012   #3
-
0
-

Děkuji za cenné rady, s případnými dotazy se sem obrátím. Po úspěšném dokončení, označím jako vyřešené. :)

Nahlásit jako SPAM
IP: 78.102.218.–
13. 12. 2012   #4
-
0
-

#1 Evrokorps
Zdravím, sedím nad tím už čtvrtý den a vše k čemu jsem se dostal je načtení a výpis do souboru. Další metody nevím jak napsat a také nevím jak převést soubor do stringu když soubor načítám do proměnné int... (myšlenku chápu, ale nedokážu to napsat). Oslovil jsem i známého co pracuje jako programátor, ale je časově velmi vytížen a nemá na mě mnoho času. Ze zdrojového kódu chápu jak program pracuje, ale z toho jak program pracuje napsat kód je pro mě téměř nemožné :( s Javou jsem teprve začal, a dostal jsem se až k práci se soubory kde jsem se zasekl na této úloze.

Nahlásit jako SPAM
IP: 2001:718:7:204:f5c4:a687:...–
sakal910
Stálý člen
13. 12. 2012   #5
-
0
-

#4 Evrokorps
K načtení toho souboru použij třídu BufferedReader a metodu readLine(); metoda ti načte ze souboru jeden řádek a vrátí ti ho jako String... Takže to hodíš do cyklu... Takže např. vytvoříš si ten BufferedReader a StringBuilder, v cyklu budeš načítat ze souboru řádek pomocí toho BufferedReader a do StringBuilder budeš postupně přidávat načtené řádky...Když už budeš mít načtené všechny řádky (celý soubor) vrátí ti metoda readLine(); hodnotu null takže podmínka cyklu je myslím jasná :) nakonec si ten StringBuilder převedeš do Stringu a vrátíš ten String (return sb.toString(); kde sb je právě ten StringBuilder)... Todle je jedna z možností jak načíst ten soubor do Stringu... :) 

Nahlásit jako SPAM
IP: 31.222.8.–
13. 12. 2012   #6
-
0
-

#5 sakal91
Děkuji, ale vůbec si nedovedu představit jak začít psát kód :/...Chvíli jsem hledal a našel jsem načtení souboru přes FileInputStream ale poté se celý soubor ukládá do celočíselné proměnné a nevím jak to udělat aby to bylo do stringu, teda pokud je možné ho takto načítat.

Nahlásit jako SPAM
IP: 78.102.218.–
sakal910
Stálý člen
13. 12. 2012   #7
-
0
-

#6 Evrokorps
Třebas takhle :)

    public static String readFile(String file) { // file = cesta k souboru

        StringBuilder sb = new StringBuilder();
        BufferedReader br = null;
        String line;

        try {

            br = new BufferedReader(new FileReader(new File(file)));

            while ((line = br.readLine()) != null) {
                sb.append(line);
            }

        } catch (IOException ex) {
            Logger.getLogger(JavaApplication7.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException ex) {
                    Logger.getLogger(JavaApplication7.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        return sb.toString();
    }
Nahlásit jako SPAM
IP: 31.222.8.–
sakal910
Stálý člen
13. 12. 2012   #8
-
0
-

#6 Evrokorps
Tato metoda ti načte soubor (cesta k souboru se předává parametrem) a vrátí ti obsah jako String :) kdybys chtěl nějak přesněji vysvětlit co co v metodě dělá tak řekni ale myslím že to je lehké na pochopení :) 

Jinak doporučuji prostudovat a hlavně POUŽÍVAT!! dokumentaci:

http://docs.oracle.com/javase/6/docs/api/

Nahlásit jako SPAM
IP: 31.222.8.–
sakal910
Stálý člen
13. 12. 2012   #9
-
0
-

#6 Evrokorps
Navíc by bylo asi dobré vymazat všechny čárky a tečky v souboru aby, když budeš počítat délku slova, se počítala jen délka slova a ne o 1 znak navíc... takže konec metody upravit třeba takhle:

// vymaže všechny tečky a čárky ve Stringu
return sb.toString().replaceAll("\\.", "").replaceAll(",", "");
Nahlásit jako SPAM
IP: 31.222.8.–
Honza
~ Anonymní uživatel
450 příspěvků
21. 1. 2013   #10
-
0
-

#9 sakal91
#9 sakal91
Zdarec,

hele resim neco podobnyho. Teda pristi semestr budu resit.

A tak mi napadlo. Ze mi pole asi nebude stacit. Budu analyzovat pro zacatek tak 10 MB soubor ... 10 milionu slov. Sice nevim (ani priblizne) jak casto se v cestine slova opakuji. Tak myslim, ze bude treba nejaka jina datova struktura.

Co navrhujete?

Tabulku nebo nejakej strom. Pokud mozno neco osvedcenyho. Nebo neco co je k statisticke analyze primo stvoreno :D

Jsem zacatecnik! Takze databaze bych asi nedal. Nevim ani jestli v Jave sou :D Ale asi jo :D Nebo dal?

Chtelo by to neco uviverzalniho, treba to pak budu prepisovat do Ccka :D

Dík

Nahlásit jako SPAM
IP: 85.71.190.–
sakal910
Stálý člen
21. 1. 2013   #11
-
0
-

#10 Honza
co takhle použít Set? :) Vytvořit si třídu pro slovo, kde budeš mít velikost, počet výskytu atd... Pak všechny slova hodit do té množiny (klíč, hodnota) kde klíč bude to slovo jako String a hodnota bude instance třídy pro to slovo... v množině musí být unikátní klíče, takže stejné slovo v ní nebudeš mít 2x a při načítání budeš kontrolovat, zda dané slovo už v množině je. Pokud ano, přičteš k dané instanci toho slova k počtu výskytu 1, pokud ne přidáš to slovo do množiny... Pak budeš mít množinu se všemi slovy kde budeš mít jistotu, že dané slovo není v množině 2x a  každého slova budeš mít potřebné informace... :D Nic těžkého v tom nehledej :)

Nahlásit jako SPAM
IP: 31.222.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Analyza textu — založil Mikas

Analýza textu — založil Petr

Funkční analýza — založil Jano

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý