Sei sulla pagina 1di 31

Lab.

1 Tokenizzazione e stemming in JAVA


Accesso Intelligente all'Informazione ed Elaborazione del Linguaggio Naturale A.A. 2013/14 CdL in Informatica Magistrale Universit degli Studi di Bari Aldo Moro Annalina Caputo annalina.caputo@uniba.it

Outline
La classe File Leggere/Scrivere file di testo La classe String
espressioni regolari

Tokenizzazione Stemming
Snowball library

La classe File
java.io.File
rappresenta un file o un directory identificati da un path o URI

Costruttori
File(String pathname), File(URI uri)

Quando si crea il pathname usare il corretto divisore di path in base al S.O.


File.pathSeparator
3

La classe File (Metodi)


delete(), deleteOnExit()
rimuove un file, rimuove un file alluscita

canRead(), canWrite(), canExecute() mkdir(), mkdirs()


crea un directory, crea tutto il path delle directories

getName(), getAbsolutePath() exists(), isDirectory(), isFile() listFiles(), listFiles(FilenameFilter), listFiles(FileFilter)


restituisce la lista di file di una directory eventualmente filtrandoli

getParent(), getParentFile()
4

Lettura/Scrittura
FileReader/FileWriter Costruttori
FileReader(File), FileReader(String) FileWriter(File), FileWriter(String) FileWriter(File,boolean append), FileWriter(String, boolean append)
indica se iniziare a scrivere alla fine del file se gi presente

Lettura/Scrittura
FileReader/FileWriter ereditano da:
InputStremReader, Reader OutputStreamWriter, Writer

Permettono lettura e scrittura di


singoli char array di char

Buffered Reader/Writer
BufferedReader(FileReader) BufferedWriter(FileWriter) Permettono la lettura/scrittura con buffer Permettono di leggere e scrivere oggetti String BufferedReader permette di leggere unintera riga da un file

Lettura con BufferedReader


File file=new File(/home/pippo/prova1.txt); BufferedReader reader=new BufferedReader(new FileReader(file)); while (reader.ready()) { String line=reader.readLine(); System.out.println(line); } reader.close();

Legge un file riga per riga e lo stampa su video


8

Scrittura con BufferedWriter


File file=new File(/home/pippo/prova2.txt); BufferedWriter writer=new BufferedWriter(new FileWriter(file)); String[] lines=... for (int i=0;i<lines.length();i++) { writer.write(lines[i]); writer.newLine(); } writer.close();

Scrive un array di String in un file, una String per linea


9

String
La classe String rappresenta una stringa di caratteri Unistanza di String immodificabile: il suo valore non pu essere modificato dopo la creazione
utilizzare StringBuilder o StringBuffer

Ogni literal sdjfkl skf dskj rappresentato in JAVA da unistanza di String


10

String (metodi)
contains(CharSequence s)
restituisce true se contiene la sottostringa s

indexOf(String s)
restituisce lindice dal quale inizia la sottostringa s, -1 se non esiste la sottostringa

indexOf(String s, int i)
inizia la ricerca della sottostringa a partire dalliesimo carattere
11

String (metodi)
replace(CharSequence s1, CharSequence s2)
sostituisce la sequenza s1 con s2

replaceAll(String regex, String r)


sostituisce tutte le sequenze che corrispondono allespressione regolare regex con r

matches(String regex)
restituisce true se la stringa corrisponde allespressione regolare regex

split(String regex)
restituisce un array di String dividendo dove c il match con regex
12

String (metodi)
startsWith, endsWith
controlla se inizia/finisce con una particolare sequenza

equals(Object o)
operatore di uguaglianza, da usare per confrontare due stringhe NON USARE ==

substring(int b, int e), substring(int b)


genera sottostringhe

trim()
elimina white space dallinizio e dalla fine

toLowerCase(), to UpperCase()
13

Espressioni regolari
E una stringa che permette di definire una grammatica che definisce un insieme di stringhe
Es. (a+b+) una sequenza di a seguita da una sequenza di b

Nella javadoc della classe Pattern trovate una sintesi sulle espressioni regolari JAVA tutorial http://docs.oracle.com/javase/tutorial/essential/ regex/
14

Espressioni regolari (caratteri)


x The character x \\ The backslash character \0n The character with octal value 0n (0 <= n <= 7) \0nn The character with octal value 0nn (0 <= n <= 7) \0mnn The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7) \xhh The character with hexadecimal value 0xhh \uhhhh The character with hexadecimal value 0xhhhh\tThe tab character ('\u0009') \n The newline (line feed) character ('\u000A') \r The carriage-return character ('\u000D') \f The form-feed character ('\u000C') \a The alert (bell) character ('\u0007') \e The escape character ('\u001B')\cxThe control character corresponding to x
15

Espressioni regolari (chars classes)


[abc] a, b, or c (simple class) [^abc] Any character except a, b, or c (negation) [a-zA-Z] a through z or A through Z, inclusive (range) [a-d[m-p]] a through d, or m through p: [a-dmp] (union) [a-z&&[def]] d, e, or f (intersection) [a-z&&[^bc]] a through z, except for b and c: [adz] (subtraction) [a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction)
16

Espressioni regolari (default classes)


. Any character (may or may not match line terminators) \d A digit: [0-9] \D A non-digit: [^0-9] \s A whitespace character: [ \t\n\x0B\f\r] \S A non-whitespace character: [^\s] \w A word character: [a-zA-Z_0-9] \W A non-word character: [^\w]
17

Espressioni regolari (boundary)


^ The beginning of a line $ The end of a line \b A word boundary \B A non-word boundary \A The beginning of the input \G The end of the previous match \Z The end of the input but for the final terminator, if any \z The end of the input
18

Espressioni regolari (greedy operator)


X? X, once or not at all X* X, zero or more times X+ X, one or more times X{n} X, exactly n times X{n,} X, at least n times X{n,m} X, at least n but not more than m times

19

Espressioni regolari (quotation)


\ Nothing, but quotes the following character \Q Nothing, but quotes all characters until \E \E Nothing, but ends quoting started by \Q

20

Espressioni regolari (logical operators)


XY X followed by Y X|Y Either X or Y (X) X, as a capturing group

21

Tokenizzazione
Utilizzare la classe StringTokenizer
suddivide in base ai white space \s o ad un predefinito delimitatore

Metodi
nextToken() hasMoreTokens() countTokens()

22

Tokenizzazione
Utilizzare il metodo split di String
creare unespressione regolare per suddividere in token String text= String[] tokens=text.split(\\s)

23

Tokenizzazione
String text= String[] tokens=text.split([^A-Za-z09]+)

Divide in token in base alle sequenze non alfanumeriche


24

Leggere un file di testo e suddividerlo in token. Stampare un token per linea.

ESERCIZIO 1

25

Esempio da tokenizzare
Testo (slide 10 di NLP_2 Livello Lessicale): Oggi un giorno meraviglioso. Laria fresca. (Luglio 2008)

26

Plugin Eclipse per espressioni regolari


Sito web: meyregexp.com Sezione download scaricare il file: com.ess.regexutil_1.2.4.jar Copiare il jar nella cartella plugin della cartella di eclipse Per lanciare il plugin window>show view>other>regex util

27

Stemming
Snowball library http://snowball.tartarus.org/ Implementa stemmer per la maggior parte delle lingue europee
org.tartarus.snowball.ext: package che contiene gli stemmer gli stemmer estendono SnowballStemmer che a sua volta estende SnowballProgram

28

Snowball
Metodi:
setCurrent(String s)
imposta la parola di cui si vuole fare lo stemming

stem()
effettua lo stemming, restitisce true se lo stemming stato applicato

getCurrent()
restituisce lo stem

29

Snowball (esempio)
Class stemClass = Class.forName("org.tartarus.snowball.ext.englishSt emmer"); SnowballStemmer stemmer = (SnowballStemmer) stemClass.newInstance(); String[] tokens= for (int i=0;i<tokens.length();i++) { stemmer.setCurrent(tokens[i]); stemmer.stem(); System.out.println(stemmer.getCurrent()); }

30

Leggere un file di testo e suddividerlo in token ed effettuare lo stemming. Stampare un token e relativo stem per linea. Sia per lItaliano che per lInglese

ESERCIZIO 2

31