Ten eerste, ik ben nog niet zo heel lang bezig met Java maar ik loop nu al tegen een probleem aan.
Wat wil ik met mijn programma
1) De hele file ingelezen als een string
2) Ik ga met een breakiterator.getSentenceInstance de zinnen er uit halen
3) Ik wil van deze zin een aantal dingen opslaan in een database waaronder het regelnummer.
Dit laatste geeft aan waar de gevonden zin in de textfile terug is te vinden. Het probleem hiermee is dat er meerdere zinnen op een line kunnen staan en ook langer dan één line kunnen zijn. Gewoon de linefeeds tellen heeft daardoor niet zo veel zin.
Nu dacht ik dat ik een oplossing had gevonden:
1) Bij het inlezen een Vector aanmaken die bijhoudt hoeveel hoeveel chars er op één regel in het bestand staan.
Dus dan krijg je een lijstje:
[1][150]
[2][250]
[3][350]
Dus op regel 0 staan dan de chars 0 tot 150, op regel 1 de chars 151 tot 250 en op regel 3 de chars 251 tot 350.
2) Bij het parsen van de zinnen weet ik bij welke char de zin begint dus dan loop ik even het lijstje door met een "if (start >= thisline && start <= nextline)" en dan heb ik de regenummer te pakken. Nu zit daar alleen het probleem. Dat gaat toch zo ontzettend traag!
Welke code heb ik gebruikt:
Bij het inlezen:
Bij het parsen van elke zin:
Het probleem wat ik dus heb is dat het - toch al trage - programma zo ontzettend traag wordt. Zelfs met een file die maar 5 regels groot is is hij al een seconde of 30 bezig om te parsen. En in 'the real world' zal het programma textfiles van 5K moeten parsen...
Bovendien krijg ik door de volgende regel natuurlijk altijd een IndexOutOfBounds.
Heeft er iemand misschien suggesties voor mijn probleem?
Wat wil ik met mijn programma
1) De hele file ingelezen als een string
2) Ik ga met een breakiterator.getSentenceInstance de zinnen er uit halen
3) Ik wil van deze zin een aantal dingen opslaan in een database waaronder het regelnummer.
Dit laatste geeft aan waar de gevonden zin in de textfile terug is te vinden. Het probleem hiermee is dat er meerdere zinnen op een line kunnen staan en ook langer dan één line kunnen zijn. Gewoon de linefeeds tellen heeft daardoor niet zo veel zin.
Nu dacht ik dat ik een oplossing had gevonden:
1) Bij het inlezen een Vector aanmaken die bijhoudt hoeveel hoeveel chars er op één regel in het bestand staan.
Dus dan krijg je een lijstje:
[1][150]
[2][250]
[3][350]
Dus op regel 0 staan dan de chars 0 tot 150, op regel 1 de chars 151 tot 250 en op regel 3 de chars 251 tot 350.
2) Bij het parsen van de zinnen weet ik bij welke char de zin begint dus dan loop ik even het lijstje door met een "if (start >= thisline && start <= nextline)" en dan heb ik de regenummer te pakken. Nu zit daar alleen het probleem. Dat gaat toch zo ontzettend traag!
Welke code heb ik gebruikt:
Bij het inlezen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
| Vector regelnummers = new Vector(); try { FileReader fin = new FileReader(this.locatie); BufferedReader filein = new BufferedReader(fin); instr = filein.readLine(); while (instr != null) { textje = " " + textje + instr + " "; regelnummers.addElement(new Integer(textje.length())); instr = filein.readLine(); } filein.close(); } |
Bij het parsen van elke zin:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| int start = 155; // deze staat bijvoorbeeld op 155. //Dus daar begint een nieuwe zin boolean found = false; for (int regelnum = 0; (regelnum < regelnummers.size()) && (found == false); regelnum++){ // weet iemand misschien hoe ik deze twee statements hieronder // netter kan doen? int thisline = Integer.parseInt(regelnummers.elementAt(regelnum).toString()); int nextline = Integer.parseInt(regelnummers.elementAt(regelnum + 1).toString()) - 1; if (start >= thisline && start <= nextline){ found = true; zin.setRegelnummer(regelnum + 1); } } found = false; |
Het probleem wat ik dus heb is dat het - toch al trage - programma zo ontzettend traag wordt. Zelfs met een file die maar 5 regels groot is is hij al een seconde of 30 bezig om te parsen. En in 'the real world' zal het programma textfiles van 5K moeten parsen...
Bovendien krijg ik door de volgende regel natuurlijk altijd een IndexOutOfBounds.
Java:
1
| int nextline = Integer.parseInt(regelnummers.elementAt(regelnum + 1).toString |
Heeft er iemand misschien suggesties voor mijn probleem?