2012-04-09 20 views
0

Ich möchte Text extrahieren, aus Textdateien können als Token - zum Beispiel, sagen, dass ich eine Textdatei, die den Satz enthält:Extrahieren von Token aus einer Textdatei?

Es ist ein gutes Restaurant,

glauben Sie mir!

Ich möchte den Inhalt von diesem als "Tokens" extrahieren - zum Beispiel wäre ein Token "It's", der nächste Token wäre "", der nächste wäre "a", dann "", dann "gut", dann "Restaurant", dann "," und "\ n", dann "glauben", "", "mich", "!". Also denke ich, dass Token entweder Wörter oder keine Wörter sind.

Hier ist, was ich bisher habe (ich sehe prüfen, ob das Token ein Wort ist oder nicht an anderer Stelle im Programm, diese Methode nur das nächste Token):

public Token next() { 
    if (c == -1) { 
     throw new NoSuchElementException(); 
    } 

    Writer sw=new CharArrayWriter(); 
    try { 
     while (c != -1 && Character.isLetter(c)) { 
      sw.write(c); 
      c = r.read(); 
     } 
     while (c != -1 && !Character.isLetter(c)) { 
      c = r.read(); 
     } 
    } catch (IOException e) { 
     c = -1; 
     return null; 
    } 
    return null; 
} 

Im Moment habe ich die gebe Werte als 'null' zurück, da ich nicht sicher bin, wie man den Schreiber benutzt, um es als Token zu exportieren. Hat jemand dafür irgendwelche Tipps? Vielen Dank!

Antwort

1

Ich vermute, dass eine Lösung mit Matcher-Klasse Ihr Problem lösen könnte.

Vielleicht könnte diese Regex nicht die richtige sein, aber Sie können eine bessere bauen. Finden Sie in der Pattern-Dokumentation in:

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

+0

Regex ist in der Tat eine Lösung, aber ich denke, dass man nur Strings übereinstimmen, die vollständig aus einer der Charakterklassen bestehen Sie erwähnt ... Sie verwendet gierigen Quantoren, und ein Aussage, wenn es eine Reihe von alphabetischen Zeichen findet, erfüllt es eine der 4 Gruppen und die anderen werden ignoriert, auch wenn nicht die gesamte Zeichenfolge übereinstimmt ... Ich denke, ich bin kein echter Regex-Guru .. – MarioDS

+0

Die Herausforderung besteht darin, zu definieren, was Teil eines Wortes ist und was nicht. Die obige Regex ist ein Beispiel, das auf verschiedenen Klassen von Zeichen basiert. Einige Zeichenfolgen wie Apostroph können in den Alpha-Zeichen zusammengefügt werden, um das Problem der Trennung zu lösen: "[\\ p {Alpha} \\ '] + | \\ p {Ziffer} + | \\ p {Punkt} + | \\ p {Leerzeichen} + "In der Tat muss jedes Muster mit einer ganzen Gruppe von Wörtern, Zahlen, Leerzeichen usw. übereinstimmen ... – elias

Verwandte Themen