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

Analýza textu – Java – Fórum – Programujte.comAnalýza textu – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Petr
~ Anonymní uživatel
696 příspěvků
3. 5. 2016   #1
-
0
-

Zdravím, 

na netu jsem našel tento kód a chtěl bych si ho vyzkoušet, ale bohužel mi nejde vložit textový soubor k analýze, mohl by mi někdo poradit jak na to? Moc děkuji, za rady. 

Přeji hezký den Petr  


package analyzetext;

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author On
 */
public class AnalyzeText {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, "UTF-8");
        String adresaSouboru;
        System.out.println("Zadej cestu souboru k analýze!");
        adresaSouboru = sc.nextLine();
        try{
            List<String> textZeSouboru = Files.readAllLines(Paths.get(adresaSouboru), Charset.forName("UTF-8"));
            System.out.println("Text jak byl zadán:");
            System.out.println("=========================================");
            textZeSouboru.removeAll(Collections.singleton(null));
            for(String jedenRadek:textZeSouboru){
                System.out.println(jedenRadek);
            }
            System.out.println("-----------------------------------------");
            String textSeZavorkami = textZeSouboru.toString();
            String textBezZavorek=textZeSouboru.toString().substring(1,textSeZavorkami.length()-1);
            Analyza(textBezZavorek,textZeSouboru.size());
        }
        catch(Exception e){
        System.out.println("Chyba při čtení ze souboru \n"+e.toString());
        }
    }
    public static void Analyza(String celyText, int pocetOdstavcu){
        String cislice="0123456789";
        String samohlasky = "aeiouyáéěíóúůý";
        String souhlasky = "bcčdďfghjklmnpqrřsštťvwxzž";
        String[] slova = celyText.split(" ");
        String[] vety = celyText.split("[.!?]");
        int pocetSamohlasek = 0;
        int pocetSouhlasek = 0;
        int pocetCislic = 0;
        int pocetSlabik = 0;
        int pocetSlov = slova.length;
        int pocetVet = vety.length;
        int kolikataSouhlaska = 0;
        Boolean spravnaSouhlaska = false;
        celyText=celyText.toLowerCase();
        for (char aktualniZnak : celyText.toCharArray())
        {
            if (samohlasky.contains(String.valueOf(aktualniZnak))){
                    pocetSamohlasek++;
            }
            else if (souhlasky.contains(String.valueOf(aktualniZnak))){
                    pocetSouhlasek++;
            }
            else if (cislice.contains(String.valueOf(aktualniZnak))){
                    pocetCislic++;
            }
        }
        for(String slovo:slova){
            for (char aktualniZnak : slovo.toCharArray())
            {
                if (samohlasky.contains(String.valueOf(aktualniZnak))){
                        pocetSlabik++;
                }
                if (souhlasky.contains(String.valueOf(aktualniZnak))){
                        kolikataSouhlaska++;
                        if ("r".contains(String.valueOf(aktualniZnak))||"l".contains(String.valueOf(aktualniZnak))){
                            spravnaSouhlaska=true;
                        }
                }
                else{
                     kolikataSouhlaska=0;
                     spravnaSouhlaska=false;
                }
                if(kolikataSouhlaska>=3&&spravnaSouhlaska){
                    kolikataSouhlaska = 0;
                    spravnaSouhlaska = false;
                    pocetSlabik++;
                }
            }
            int indexOU = 0;
            while( ( indexOU = slovo.indexOf("ou", indexOU+1) ) >= 0 ) {
                if(indexOU!=2)pocetSlabik--;
            }
            int indexAU = 0;
            while( ( indexAU = slovo.indexOf("au", indexAU+1) ) >= 0 ) {
                if(indexAU!=2)pocetSlabik--;
            }
            if (slovo.substring(slovo.length()-1,slovo.length()).equals("l")&&souhlasky.contains(String.valueOf(slovo.substring(slovo.length()-2,slovo.length()-1)))){
                    pocetSlabik++;
            }
            
        }
        System.out.println("Text: (zfromátovaný do jednoho řádku)");
        System.out.println("=========================================");
        System.out.println(celyText);
        System.out.println("-----------------------------------------");
        System.out.println("Počet:");
        System.out.println("=========================================");
        System.out.printf("Samohlásek: %d\n", pocetSamohlasek);
        System.out.printf("Souhlásek: %d\n", pocetSouhlasek);
        System.out.printf("Číslic: %d\n", pocetCislic);
        System.out.printf("Ostaních znaků: %d\n", celyText.length()+1 - (pocetSamohlasek + pocetSouhlasek + pocetCislic)-2*pocetOdstavcu);
        System.out.printf("Všech znaků: %d\n", celyText.length()+1-2*pocetOdstavcu);
        System.out.printf("Slabik: %d\n", pocetSlabik);
        System.out.printf("Slov: %d\n", pocetSlov);
        System.out.printf("Vět: %d\n", pocetVet);
        System.out.printf("Odstavců: %d\n", pocetOdstavcu);
        System.out.println("-----------------------------------------");
        System.out.println("Průměrný počet:");
        System.out.println("=========================================");
        if(pocetSlov!=0){
        System.out.printf("Slabik ve slově: %f\n", (float)pocetSlabik/pocetSlov); 
        }
        else{System.out.printf("Slabik ve slově: %d\n", 0); }
        if(pocetVet!=0){
        System.out.printf("Slov ve větě: %f\n", (float)pocetSlov/pocetVet); 
        }
        else{System.out.printf("Slov ve větě: %d\n", 0); }
        if(pocetOdstavcu!=0){
        System.out.printf("Vět v odstavci: %f\n", (float)pocetVet/pocetOdstavcu);
        }
        else{System.out.printf("Vět v odstavci: %d\n", 0); }
        System.out.println("-----------------------------------------");
        }
    }
Nahlásit jako SPAM
IP: 2001:718:1a01:211:1c3e:64...–
Reklama
Reklama
Matrix17
~ Anonymní uživatel
285 příspěvků
3. 5. 2016   #2
-
0
-

Možná by stačilo pouze postupovat podle toho, co je v kódu a co ti program říká abys udělal...

Tj. napsat tam cestu k tomu souboru k analýze...

Nahlásit jako SPAM
IP: 176.74.134.–
Petr
~ Anonymní uživatel
696 příspěvků
3. 5. 2016   #3
-
0
-

#2 Matrix17
To dělám, ale právě jakkoliv se snažím napsat tu cestu k souboru, tak mi jí to nechce vzít a vždy to vyhodí chybu. Píšu to tam, takto: C:\Users\Petr\Deskopts\.... a takhle to prostě nejde. Tak se chci zeptat jak na to? Děkuji. 

Nahlásit jako SPAM
IP: 188.120.199.–
Matrix17
~ Anonymní uživatel
285 příspěvků
3. 5. 2016   #4
-
0
-

Jakou chybu ti to vyhodí? Je ta cesta k souboru správně?

Jsi si jistý, že je ten program správně?

Tj. pro nějaký příkladový soubor to vyhodí očekávaný výsledek? (Právě na tohle sou super unit testy)

Nahlásit jako SPAM
IP: 176.74.134.–
Petr
~ Anonymní uživatel
696 příspěvků
3. 5. 2016   #5
-
0
-

Program by správně měl být je převzatý z ITnetwork, píšou u toho, že bys tam měl zadat libovolný textový soubor .txt, ve kterém je nějaký text na analýzu, ale právě nevím jak ho tam vložit když se mě program na to zeptá, vždy to udělám špatně. Druhá možnost mě napadá, vložit tam ten soubor nějak rovnou do toho programu, ale nevím jak? Nějaký rady? :) 

Nahlásit jako SPAM
IP: 188.120.199.–
Petr
~ Anonymní uživatel
696 příspěvků
3. 5. 2016   #6
-
0
-

Ta chyba je "Chyba při čtení ze souboru". 

Nahlásit jako SPAM
IP: 188.120.199.–
Matrix17
~ Anonymní uživatel
285 příspěvků
3. 5. 2016   #7
-
0
-

Zadat soubor je napsat KOMPLETNÍ cestu k souboru na disku. Mě to ten soubor normálně přečetlo byť to na něčem zkolabovalo. Výjimku sem nějak neřešil, protože na to nemám čas ani chuť něco opravovat. Navíc sem tomu plivnul první textovej soubor, co sem na disku viděl, takže to třeba vyhodilo výjimku správně.

Tolik k zadání souboru.

A k té chybě: Spolu s chybou ti to vyhodí stack trace... Ten ti řekne na kterým řádku se chyba stala. Podle popisu metod a jejich chování najdeš na čem to selhalo. Případně ten stack trace hoď sem pokud si s tím nevíš rady.

Btw. čeho vlastně chceš dosáhnout? Učíš se programovat?

Nahlásit jako SPAM
IP: 176.74.134.–
Petr
~ Anonymní uživatel
696 příspěvků
3. 5. 2016   #8
-
0
-

Jak si přesně zadal cestu k souboru?

Nahlásit jako SPAM
IP: 188.120.199.–
Matrix17
~ Anonymní uživatel
285 příspěvků
4. 5. 2016   #9
-
0
-

Napíšeš ji nebo si ji zkopíruješ a vložíš do konzole...

příklad v linuxu:

/home/user/soubor.txt

příklad ve windows:

c:/slozka/soubor.txt

Nahlásit jako SPAM
IP: 176.74.134.–
JoDiK
~ Anonymní uživatel
981 příspěvků
4. 5. 2016   #10
-
0
-

#9 Matrix17
Tys už asi ve windows dlouho nepracoval, že?

Příklad ve windows má být c:\slozka\soubor.txt

Nahlásit jako SPAM
IP: 88.103.228.–
Matrix17
~ Anonymní uživatel
285 příspěvků
7. 5. 2016   #11
-
0
-

#10 JoDiK
Naposled dneska a sem si víc než jistej, že to co sem napsal je správně a hlavně funguje to. Už to pár let používám. Plus jako benefit nemusíš dávat escape sekvenci abys napsal cestu. ;)

Nahlásit jako SPAM
IP: 213.226.237.–
Martin
~ Anonymní uživatel
1377 příspěvků
7. 5. 2016   #12
-
0
-

Chlapi nevím jak to děláte, ale chybu mi to též vypisuje jako autorovi viz. obrázek 

Připojen obrázek.

Co s tím? 

Nahlásit jako SPAM
IP: 188.120.199.–
Matrix17
~ Anonymní uživatel
285 příspěvků
7. 5. 2016   #13
-
0
-

#12 Martin
Konečně nějaká chyba... A ta říká, že to nemůže najít soubor. Protože máš špatně cestu k souboru. Předpokládám, že tam ten soubor máš ALE cesta je neplatná protože bys musel dát escape sekvenci u každýho lomítka.

Z toho důvodu sem tu cestu pro windows napsal tak, jak sem ji napsal... Takže otoč lomítka mělo by to ten soubor přečíst. ;)

Nahlásit jako SPAM
IP: 213.226.237.–
Martin
~ Anonymní uživatel
1377 příspěvků
8. 5. 2016   #14
-
0
-
Nahlásit jako SPAM
IP: 188.120.199.–
Martin
~ Anonymní uživatel
1377 příspěvků
8. 5. 2016   #15
-
0
-

Teď ještě otázka, na ploše mám textový soubor '.txt', ten se tam pokouším nahrát? Dělám to správně, nebo tam mám nahrát jiný soubor? Dík za odpověď. 

Nahlásit jako SPAM
IP: 188.120.199.–
lukas.balaz0
Super člen
8. 5. 2016   #16
-
0
-

#15 Martin
Náhodou v ceste nechýba práve to '.txt' ?

Nahlásit jako SPAM
IP: 80.242.41.–
Martin
~ Anonymní uživatel
1377 příspěvků
8. 5. 2016   #17
-
0
-

Nene, to už jsme taky zkoušel ...

Nahlásit jako SPAM
IP: 188.120.199.–
Matrix17
~ Anonymní uživatel
285 příspěvků
8. 5. 2016   #18
-
0
-

#17 Martin
V obou případech, co si sem dával, si tam příponu souboru neměl. Takže to správně vyhodilo výjimku, že to ten soubor nenajde. protože tam soubor "test", jednoduše není. Možná tam je soubor test.txt, ale to je už tak nějak na tobě aby sis zkontroloval cestu k souboru.

Další věc je, že ten soubor musí mít kódování UTF-8 jinak ti to potom vyhodí další výjimku...

Ale jako první si zkontroluj tu cestu k souboru. A tím myslím, včetně přípon, velikostí písmen a existence souboru v daným adresáři.

Nahlásit jako SPAM
IP: 213.226.237.–
Martin
~ Anonymní uživatel
1377 příspěvků
9. 5. 2016   #19
-
0
-

#18 Matrix17
Tak děkuju za odpovědi a trpělivost. ! Správná cesta je c:/slozka/soubor.txt + kódování UTF-8, na které jsem úplně zapmněl, Děkuju. .-)

Nahlásit jako SPAM
IP: 160.217.136.–
Petr
~ Anonymní uživatel
696 příspěvků
9. 5. 2016   #20
-
0
-

Můžete označit jako za vyřešené. Děkuji všem co mi pomohli.

Nahlásit jako SPAM
IP: 160.217.136.–
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, 35 hostů

Podobná vlákna

Statistická analýza textu — založil Evrokorps

Analýza grafů — založil Spectator

Mat Analýza — založil plasmo

Analýza zdrojového kódu — založil DiabloWind

Moderátoři diskuze

 

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