NLP Tokenizzazione e Stemming.pdf
-
Upload
nazareno-descanso-de-francesco -
Category
Documents
-
view
224 -
download
0
Transcript of NLP Tokenizzazione e Stemming.pdf
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
1/31
Lab.1Tokenizzazione e
stemming in JAVAAccesso 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
1
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
2/31
Outline
La classe File
Leggere/Scrivere file di testo
La classe String espressioni regolari
Tokenizzazione
Stemming Snowball library
2
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
3/31
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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
4/31
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 eventualmentefiltrandoli
getParent(), getParentFile()
4
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
5/31
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
5
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
6/31
Lettura/Scrittura
FileReader/FileWriterereditano da:
InputStremReader, Reader
OutputStreamWriter, Writer
Permettono lettura e scrittura di
singoli char
array di char
6
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
7/31
Buffered Reader/Writer
BufferedReader(FileReader)
BufferedWriter(FileWriter)
Permettono la lettura/scrittura con buffer Permettono di leggere e scrivere oggetti
String
BufferedReaderpermette di leggereunintera riga da un file
7
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
8/31
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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
9/31
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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
10/31
String
La classe Stringrappresenta una stringa di
caratteri
Unistanza di String immodificabile: il suo
valore non pu essere modificato dopo la
creazione
utilizzare StringBuildero StringBuffer
Ogni literal sdjfkl skf dskj rappresentato in
JAVA da unistanza di String
10
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
11/31
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 dalli-
esimo carattere
11
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
12/31
String (metodi)
replace(CharSequence s1, CharSequences2) 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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
13/31
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(intb) genera sottostringhe
trim() elimina white space dallinizio e dalla fine
toLowerCase(), to UpperCase()
13
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
14/31
Espressioni regolari
E una stringa che permette di definire una
grammatica che definisce un insieme di stringhe
Es. (a+b+) una sequenza di aseguita da una sequenza
di b
Nella javadoc della classe Patterntrovate una
sintesi sulle espressioni regolari
JAVA tutorialhttp://docs.oracle.com/javase/tutorial/essential/
regex/
14
http://docs.oracle.com/javase/tutorial/essential/regex/http://docs.oracle.com/javase/tutorial/essential/regex/http://docs.oracle.com/javase/tutorial/essential/regex/http://docs.oracle.com/javase/tutorial/essential/regex/ -
8/14/2019 NLP Tokenizzazione e Stemming.pdf
15/31
Espressioni regolari (caratteri)
x The characterx
\\ The backslash character
\0n The character with octal value 0n(0
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
16/31
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-dm-p] (union)
[a-z&&[def]] d, e, or f (intersection)
[a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]] a through z, andnot m through p: [a-lq-z](subtraction)
16
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
17/31
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 Anon-word character: [^\w]
17
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
18/31
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 thefinal terminator, if any
\z The end of the input18
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
19/31
Espressioni regolari (greedy operator)
X? X, once or not at all
X* X, zero or more times
X
+X
, one or more timesX{n} X, exactly ntimes
X{n,} X, at least ntimes
X{n,m} X, at least nbut not more than mtimes
19
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
20/31
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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
21/31
Espressioni regolari (logical operators)
XY Xfollowed by Y
X|Y EitherXor Y
(X
) X, as a capturing group
21
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
22/31
Tokenizzazione
Utilizzare la classe StringTokenizer
suddivide in base ai white space \s o ad un
predefinito delimitatore
Metodi
nextToken()
hasMoreTokens()
countTokens()
22
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
23/31
Tokenizzazione
Utilizzare il metodo splitdi String
creare unespressione regolare per suddividere in
token
String text=
String[] tokens=text.split(\\s)
23
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
24/31
Tokenizzazione
String text=
String[] tokens=text.split([^A-Za-z0-
9]+)
Divide in token in base alle sequenze non alfanumeriche
24
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
25/31
ESERCIZIO 1
Leggere un file di testo e suddividerlo in token. Stampare un
token per linea.
25
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
26/31
Esempio da tokenizzare
Testo (slide 10 di NLP_2 Livello Lessicale):
Oggi un giorno meraviglioso. Laria
fresca. (Luglio 2008)
26
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
27/31
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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
28/31
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
http://snowball.tartarus.org/http://snowball.tartarus.org/ -
8/14/2019 NLP Tokenizzazione e Stemming.pdf
29/31
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
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
30/31
Snowball (esempio)
Class stemClass =Class.forName("org.tartarus.snowball.ext.englishSt
emmer");
SnowballStemmer stemmer = (SnowballStemmer)
stemClass.newInstance();String[] tokens=
for (int i=0;i
-
8/14/2019 NLP Tokenizzazione e Stemming.pdf
31/31
ESERCIZIO 2
Leggere un file di testo e suddividerlo in token ed effettuarelo stemming. Stampare un token e relativo stem per linea.
Sia per lItaliano che per lInglese
31