Tokenizery w javie

0

Jak zaimplementowac obsulge tokenizerow do podzialu linii z tekstem na leksemy, aby w programie nizej podanym sortowane byly z pliku poszczegolne wyrazy a nie tylko same wiersze?

class Slownik {
static final int MaxLinijek = 128;
public static void main (String args[]) {

 String tablicaSort[] = new String [MaxLinijek];
   FileInputStream fs=null; FileOutputStream fw=null;
   FileWriter fwrite=null;
   StringBuffer strb = new StringBuffer();
   String str="";						
   int nlines;
    try {
    	   fs = new FileInputStream  ("C:\\Plik.txt");
    	   fwrite = new FileWriter   ("C:\\Slownik.txt");
        } catch (Exception e) {
           System.err.println ("Nie mozna otworzyc "+"C:\\slownik.txt");
           System.exit (1);
    }      
   BufferedReader ds = new BufferedReader(new InputStreamReader(fs)); 
    for (nlines=0; nlines<MaxLinijek; nlines += 1) {
           try {
                  tablicaSort[nlines] =  ds.readLine();
                  if (tablicaSort[nlines] == null) break;
           } catch (IOException e) {
                  System.err.println("Podczas odczytu pliku wystapil wyjatek."); break;
           }
    }
    try {
           fs.close ();//zamkniecie pliku
    } catch (IOException e) {
           System.err.println ("Podczas zamykania pliku wystapil wyjatek."); 

}
System.out.println ("Nieposortowane wyrazenia:");
print (tablicaSort, nlines);
QSort qsort = new QSort ();
qsort.sort (tablicaSort, nlines);
System.out.println ("Posortowane wyrazenia:");
print (tablicaSort, nlines);
for(nlines=0; nlines<MaxLinijek; nlines++){
strb.append(tablicaSort[nlines]+"\r\n");}
str = strb.toString();
try {
fwrite.write(str);//zapisanie
fwrite.close();//zamkniecie
}catch(IOException e){};
}

0

Do przechowywania wyrazów użyj np. TreeSet'a.

       Collection wyrazy= new TreeSet();
        
        wyrazy.add(new String("test1"));
        wyrazy.add(new String("abc"));
        wyrazy.add(new String("xyz"));

        Iterator it = wyrazy.iterator();
        String value = null;
        int i = 1;

        while (it.hasNext()) {
            value = String.valueOf(it.next());
            System.out.println("#"+i+"="+value);
            i++;
        }

pzdr,
y.</cpp>

0

Acha, jeszcze podzial na wyrazy

        String linia = "To jest jakas linia linia tekstu, ktory nie zostal posortowany.";

        StringTokenizer st = new StringTokenizer(linia," ,.");

        while (st.hasMoreTokens()) {
            wyrazy.add(st.nextToken());
        }

pzdr,
y.

0

Acha, jeszcze podzial na wyrazy

        String linia = "To jest jakas linia linia tekstu, ktory nie zostal posortowany.";

        StringTokenizer st = new StringTokenizer(linia," ,.");

        while (st.hasMoreTokens()) {
            wyrazy.add(st.nextToken());
        }

Niestety to nie jest takie proste ;) Sprobuj w ten sposob podzielic na wyrazy zdanie:
"Prof. A. Mickiewicz wyglosi wyklad dnia 12.01.2005 w Sali im. Juliusza Slowackiego, przy ul. M. Sklodowskiej-Curie 3, na 3. pietrze." .
Albo: "Czy to "bardzo-trudne-zadanie" jest dobrze rozwiazane? - spytal pan G., zaniepokojony tym, co zobaczyl."

Ja do wstepnego podzialu uzywalem takiego zestawu RegEx:

    m_patDate1 = Pattern.compile( "\\d+(\\/\\d+)+" ); // data w stylu 10/01/2005
    m_patDate2 = Pattern.compile( "\\d+\\.\\d+\\.\\d+" ); // data w stylu 10.01.2005

    m_patPercent = Pattern.compile( "([+\\-])?\\d+(\\.)?\\d*%" ); // procenty np. 20.5%
    m_patCompound = Pattern.compile( "([a-zA-Z0-9])+([\\-\\./&@]([a-zA-Z0-9])+)+" ); // zlozenia np. czarno-niebieski, [email protected], AT&T
    m_patAbbr1 = Pattern.compile( "\\-([a-zA-Z])+" ); // skroty zaczynajace sie od - (po polsku chyba nie wystepuja)
    m_patAbbr2 = Pattern.compile( "([a-zA-Z])+\\-" ); // skroty z - na koncu, , np. w wypowiedzi "bialo- i czerwono-czarne"
    m_patNumber = Pattern.compile( "((\\d+,?)+(\\.\\d+|\\d+)+\\$*\\?*)|\\d+" );  // liczby, waluty
    m_patPunct = Pattern.compile( "[\\?!\"&'()/\\-,.;:§\\[\\]<>]" ); // przerozne znaki interpunkcyjne
    m_patWhiteSpace = Pattern.compile( "\\s" ); // biale znaki

(Wszystkie m_patCostam sa klasy Pattern)
Dalszy podzial wymagal juz "niestety" odpowedniego wytrenowania systemu na korpusie.

Acha, a co do sortowania, to mozna prosciej (chyba). Wrzucic wyrazy do

ArrayList

a potem uzyc Collections.sort(mojaListaWyrazow);

1 użytkowników online, w tym zalogowanych: 0, gości: 1