NLP Tokenizzazione e Stemming.pdf

download NLP Tokenizzazione e Stemming.pdf

of 31

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

    [email protected]

    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