TEORIE E TECNICHE DEL RICONOSCIMENTO Linguistica computazionale in Python: - Dalle parole singole alle frasi - Estrazione di informazioni ESTRAZIONE DI INFORMAZIONI DA TESTI: ENTITA’ SITE LOC CULTURE RELAZIONI (PROPBANK) a GM-Jaguar pact Arg0 *T*-1 that would give Arg2 a GM-Jaguar pact that would give the U.S. car maker an eventual 30% stake in the British company. Arg1 an eventual 30% stake in the British company the US car maker give(GM-J pact, US car maker, 30% stake) ESTRAZIONE DI INFORMAZIONI OLTRE LA PAROLA • Tanto le entita’ quanto le relazioni sono espresse tramite FRASI : – Epigravettiano finale – Valle del Serchia ANALISI SINTATTICA E CHUNKING • L’estrazione di frasi, in particolare di frasi nominali, e’ generalmente detta CHUNKING • Il chunking e’ una parte della cosidetta ANALISI SINTATTICA di un enunciato, o PARSING • In questa lezione parliamo di chunking in Python, nella prossima di parsing CHUNKS E PAROLE NP CHUNKING [ The/DT market/NN ] for/IN [ systemmanagement/NN software/NN ] for/IN [ Digital/NNP ] [ 's/POS hardware/NN ] is/VBZ fragmented/JJ enough/RB that/IN [ a/DT giant/NN ] such/JJ as/IN [ Computer/NNP Associates/NNPS ] should/MD do/VB well/RB there/RB ./. CHUNKING CON LE ESPRESSIONI REGOLARI • Le espressioni regolari discusse in precedenza possono essere usate per trovare chunks usando informazioni su POS tags: – \w+/DT\s+\w+/NN • Una serie di espressioni regolari del genere costituisce una GRAMMATICA • NLTK fornisce strumenti per facilitare lo sviluppo di tali grammatiche – NLTK, ch. 7.2, p. 265 • Chunk grammar • Tag patterns CHUNK GRAMMARS IN NLTK >>> sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"), ("dog", "NN"), ("barked", "VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")] >>> grammar = "NP: {<DT>?<JJ>*<NN>}” >>> cp = nltk.RegexpParser(grammar) >>> result = cp.parse(sentence) >>> print result (S (NP the/DT little/JJ yellow/JJ dog/NN) barked/VBD at/IN (NP the/DT cat/NN)) CHUNK GRAMMARS IN NLTK >>> result.draw() GRAMMATICHE PIU’ COMPLESSE another/DT sharp/JJ dive/NN trade/NN figures/NNS any/DT new/JJ policy/NN measures/NNS earlier/JJR stages/NNS Panamanian/JJ dictator/NN Manuel/NNP Noriega/NNP his/PRP$ Mansion/NNP House/NNP speech/NN the/DT price/NN cutting/VBG 3/CD %/NN to/TO 4/CD %/NN more/JJR than/IN 10/CD %/NN the/DT fastest/JJS developing/VBG trends/NNS 's/POS skill/NN USO DI CHUNKERS PER CORPUS ANALYSIS >>> cp = nltk.RegexpParser('CHUNK: {<V.*> <TO> <V.*>}') >>> brown = nltk.corpus.brown >>> for sent in brown.tagged_sents(): ... tree = cp.parse(sent) ... for subtree in tree.subtrees(): ... if subtree.node == 'CHUNK': print subtree ... (CHUNK combined/VBN to/TO achieve/VB) (CHUNK continue/VB to/TO place/VB) (CHUNK serve/VB to/TO protect/VB) (CHUNK wanted/VBD to/TO wait/VB) (CHUNK allowed/VBN to/TO place/VB) (CHUNK expected/VBN to/TO become/VB) ... (CHUNK seems/VBZ to/TO overtake/VB) (CHUNK want/VB to/TO buy/VB) ANNOTAZIONE DI CHUNKS: IOB SVILUPPO E VALUTAZIONE DI CHUNKERS • NLTK, 7.3 USO DI CLASSIFICATORI PER CHUNKING • NLTK, p.274 STRUTTURA ANNIDATA • NLTK, 7.4 NAMED ENTITY RECOGNITION • NLTK, 7.5