Sunteți pe pagina 1din 10

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare Informatic i Microelectronic
Catedra Informatic Aplicat

Lucrare de laborator Nr.3


DISCIPLINA: Procesarea sintactic a textului
TEMA: Analiza sintactic Bottom-Up

A efectuat :
Ciala Iurie
anul 2, grupa IA-122

A
Lazu Victoria
Lector superior

verificat:

Chiinu 2014
Varianta 7:
Propoziiile:
1. Cisco Networking Academy pregateste studentii pentru secolul 21.
2. Structura programului cuprinde un centru de pregatire regionala.
3. Academiile regionale instruiesc academii locale.

1. Analiza cu ajutorul parser-ului Bottom-Up ncorporat n NLTK.


1. Cisco Networking Academy pregateste studentii pentru secolul 21.

2. Structura programului cuprinde un centru de pregatire regionala.

3. Academiile regionale instruiesc academii locale.

2. Analiza cu ajutorul funciilor NLTK.


1. Cisco Networking Academy pregateste studentii pentru secolul 21.

Coninutul fiierului Iura1.py


# Incarca in memorie operativa module necesare
from nltk.cfg import *
from nltk.parser import *
from nltk.tokenizer import *
# Declararea simboluri neterminale folosite in gramatica
S, NP, VP, PP, N, V, Prep, Num = nonterminals('S, NP, VP, PP, N, V, Prep, Num')
# Reguli gramaticale si lexicale
productions = (
CFGProduction(S, [NP, VP]),
CFGProduction(NP, [N, N, N]),
CFGProduction(PP, [Prep, NP]),
CFGProduction(NP, [N, PP]),
CFGProduction(NP, [N, Num]),
CFGProduction(VP, [V, NP]),
CFGProduction(N, ['Cisco']),
CFGProduction(N, ['Networking']),
CFGProduction(N, ['Academy']),
CFGProduction(N, ['studentii']),
CFGProduction(N, ['secolul']),
CFGProduction(V, ['pregateste']),
CFGProduction(Prep, ['pentru']),
CFGProduction(Num, ['21'])
)
# Crearea gramaticii independente de context
grammar = CFG (S, productions)
# Lansarea parserului Bottom-Up
sr_parser = ShiftReduceParser(grammar, LEAF='TEXT')
# Definirea modului de trasare
sr_parser.trace()
# Propozitie pentru analiza
sent=Token(TEXT='Cisco Networking Academy pregateste studentii pentru secolul 21')
# Impartirea propozitiei in cuvinte
WhitespaceTokenizer().tokenize(sent)
# Analiza propozitiei
parses = sr_parser.parse(sent)
sr_parser.trace(1)
Parsing 'Cisco Networking Academy pregateste studentii pentru secolul 21'
[ * 'Cisco' 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
[ 'Cisco' * 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
[ <N> 'Networking' * 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
[ <N> <N> 'Academy' * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
[ <NP> 'pregateste' * 'studentii' 'pentru' 'secolul' '21']
[ <NP> <V> 'studentii' * 'pentru' 'secolul' '21']
[ <NP> <V> <N> 'pentru' * 'secolul' '21']
[ <NP> <V> <N> <Prep> 'secolul' * '21']
[ <NP> <V> <N> <Prep> <N> '21' * ]

sr_parser.trace(2)
Parsing 'Cisco Networking Academy pregateste studentii pentru secolul 21'
[ * 'Cisco' 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
S [ 'Cisco' * 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
R [ <N> * 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
S [ <N> 'Networking' * 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
R [ <N> <N> * 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
S [ <N> <N> 'Academy' * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
R [ <N> <N> <N> * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
R [ <NP> * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
S [ <NP> 'pregateste' * 'studentii' 'pentru' 'secolul' '21']
R [ <NP> <V> * 'studentii' 'pentru' 'secolul' '21']
S [ <NP> <V> 'studentii' * 'pentru' 'secolul' '21']
R [ <NP> <V> <N> * 'pentru' 'secolul' '21']
S [ <NP> <V> <N> 'pentru' * 'secolul' '21']
R [ <NP> <V> <N> <Prep> * 'secolul' '21']
S [ <NP> <V> <N> <Prep> 'secolul' * '21']
R [ <NP> <V> <N> <Prep> <N> * '21']
S [ <NP> <V> <N> <Prep> <N> '21' * ]
R [ <NP> <V> <N> <Prep> <N> <Num> * ]
R [ <NP> <V> <N> <Prep> <NP> * ]
R [ <NP> <V> <N> <PP> * ]
R [ <NP> <V> <NP> * ]
R [ <NP> <VP> * ]
R [ <S> * ]

sr_parser.trace(3)
Parsing 'Cisco Networking Academy pregateste studentii pentru secolul 21'
[ * 'Cisco' 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Shift <Cisco>:
[ 'Cisco' * 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Reduce <N> <- 'Cisco'
[ <N> * 'Networking' 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Shift <Networking>:
[ <N> 'Networking' * 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Reduce <N> <- 'Networking'
[ <N> <N> * 'Academy' 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Shift <Academy>:
[ <N> <N> 'Academy' * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Reduce <N> <- 'Academy'
[ <N> <N> <N> * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Reduce <NP> <- <N> <N> <N>
[ <NP> * 'pregateste' 'studentii' 'pentru' 'secolul' '21']
Shift <pregateste>:
[ <NP> 'pregateste' * 'studentii' 'pentru' 'secolul' '21']
Reduce <V> <- 'pregateste'
[ <NP> <V> * 'studentii' 'pentru' 'secolul' '21']
Shift <studentii>:
[ <NP> <V> 'studentii' * 'pentru' 'secolul' '21']
Reduce <N> <- 'studentii'
[ <NP> <V> <N> * 'pentru' 'secolul' '21']
Shift <pentru>:
[ <NP> <V> <N> 'pentru' * 'secolul' '21']
Reduce <Prep> <- 'pentru'
[ <NP> <V> <N> <Prep> * 'secolul' '21']
Shift <secolul>:
[ <NP> <V> <N> <Prep> 'secolul' * '21']
Reduce <N> <- 'secolul'
[ <NP> <V> <N> <Prep> <N> * '21']
Shift <21>:
[ <NP> <V> <N> <Prep> <N> '21' * ]
Reduce <Num> <- '21'
[ <NP> <V> <N> <Prep> <N> <Num> * ]
Reduce <NP> <- <N> <Num>
[ <NP> <V> <N> <Prep> <NP> * ]
Reduce <PP> <- <Prep> <NP>
[ <NP> <V> <N> <PP> * ]

Reduce <NP> <- <N> <PP>


[ <NP> <V> <NP> * ]
Reduce <VP> <- <V> <NP>
[ <NP> <VP> * ]
Reduce <S> <- <NP> <VP>
[ <S> * ]

2. Structura programului cuprinde un centru de pregatire regionala.


Coninutul fiierului Iura2.py
# Incarca in memorie operativa module necesare
from nltk.cfg import *
from nltk.parser import *
from nltk.tokenizer import *
# Declararea simboluri neterminale folosite in gramatica
S, VP, NP, PP, N, V, Adj, Det, Prep = nonterminals('S, VP, NP, PP, N, V, Adj, Det, Prep')
# Reguli gramaticale si lexicale
productions = (
CFGProduction(S, [NP, VP]),
CFGProduction(NP, [N, Adj]),
CFGProduction(PP, [Prep, NP]),
CFGProduction(NP, [Det, N, PP]),
CFGProduction(VP, [V, NP]),
CFGProduction(N, ['Structura']),
CFGProduction(N, ['centru']),
CFGProduction(N, ['pregatire']),
CFGProduction(Adj, ['Programului']),
CFGProduction(Adj, ['regionala']),
CFGProduction(V, ['cuprinde']),
CFGProduction(Det, ['un']),
CFGProduction(Prep, ['de'])
)
# Crearea gramaticii independente de context
grammar = CFG (S, productions)
# Lansarea parserului Bottom-Up
sr_parser = ShiftReduceParser(grammar, LEAF='TEXT')
# Definirea modului de trasare
sr_parser.trace()
# Propozitie pentru analiza
sent=Token(TEXT='Structura programului cuprinde un centru de pregatire regionala')
# Impartirea propozitiei in cuvinte
WhitespaceTokenizer().tokenize(sent)
# Analiza propozitiei
parses = sr_parser.parse(sent)
sr_parser.trace(1)

Parsing 'Structura Programului cuprinde un centru de pregatire regionala'


[ * 'Structura' 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
[ 'Structura' * 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
[ <N> 'programului' * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
[ <NP> 'cuprinde' * 'un' 'centru' 'de' 'pregatire' 'regionala']
[ <NP> <V> 'un' * 'centru' 'de' 'pregatire' 'regionala']
[ <NP> <V> <Det> 'centru' * 'de' 'pregatire' 'regionala']
[ <NP> <V> <Det> <N> 'de' * 'pregatire' 'regionala']
[ <NP> <V> <Det> <N> <Prep> 'pregatire' * 'regionala']
[ <NP> <V> <Det> <N> <Prep> <N> 'regionala' * ]

sr_parser.trace(2)
Parsing 'Structura Programului cuprinde un centru de pregatire regionala'
[ * 'Structura' 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
S [ 'Structura' * 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
R [ <N> * 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
S [ <N> 'programului' * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
R [ <N> <Adj> * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
R [ <NP> * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
S [ <NP> 'cuprinde' * 'un' 'centru' 'de' 'pregatire' 'regionala']
R [ <NP> <V> * 'un' 'centru' 'de' 'pregatire' 'regionala']
S [ <NP> <V> 'un' * 'centru' 'de' 'pregatire' 'regionala']
R [ <NP> <V> <Det> * 'centru' 'de' 'pregatire' 'regionala']
S [ <NP> <V> <Det> 'centru' * 'de' 'pregatire' 'regionala']
R [ <NP> <V> <Det> <N> * 'de' 'pregatire' 'regionala']
S [ <NP> <V> <Det> <N> 'de' * 'pregatire' 'regionala']
R [ <NP> <V> <Det> <N> <Prep> * 'pregatire' 'regionala']
S [ <NP> <V> <Det> <N> <Prep> 'pregatire' * 'regionala']
R [ <NP> <V> <Det> <N> <Prep> <N> * 'regionala']
S [ <NP> <V> <Det> <N> <Prep> <N> 'regionala' * ]
R [ <NP> <V> <Det> <N> <Prep> <N> <Adj> * ]
R [ <NP> <V> <Det> <N> <Prep> <NP> * ]
R [ <NP> <V> <Det> <N> <PP> * ]
R [ <NP> <V> <NP> * ]
R [ <NP> <VP> * ]
R [ <S> * ]

sr_parser.trace(3)
Parsing 'Structura Programului cuprinde un centru de pregatire regionala'
[ * 'Structura' 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
Shift <Structura>:
[ 'Structura' * 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
Reduce <N> <- 'Structura'
[ <N> * 'programului' 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
Shift <programului>:
[ <N> 'programului' * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
Reduce <Adj> <- 'programului'
[ <N> <Adj> * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
Reduce <NP> <- <N> <Adj>
[ <NP> * 'cuprinde' 'un' 'centru' 'de' 'pregatire' 'regionala']
Shift <cuprinde>:
[ <NP> 'cuprinde' * 'un' 'centru' 'de' 'pregatire' 'regionala']
Reduce <V> <- 'cuprinde'
[ <NP> <V> * 'un' 'centru' 'de' 'pregatire' 'regionala']
Shift <un>:
[ <NP> <V> 'un' * 'centru' 'de' 'pregatire' 'regionala']
Reduce <Det> <- 'un'
[ <NP> <V> <Det> * 'centru' 'de' 'pregatire' 'regionala']
Shift <centru>:
[ <NP> <V> <Det> 'centru' * 'de' 'pregatire' 'regionala']
Reduce <N> <- 'centru'
[ <NP> <V> <Det> <N> * 'de' 'pregatire' 'regionala']
Shift <de>:
[ <NP> <V> <Det> <N> 'de' * 'pregatire' 'regionala']
Reduce <Prep> <- 'de'
[ <NP> <V> <Det> <N> <Prep> * 'pregatire' 'regionala']
Shift <pregatire>:
[ <NP> <V> <Det> <N> <Prep> 'pregatire' * 'regionala']

Reduce <N> <- 'pregatire'


[ <NP> <V> <Det> <N> <Prep>
Shift <regionala>:
[ <NP> <V> <Det> <N> <Prep>
Reduce <Adj> <- 'regionala'
[ <NP> <V> <Det> <N> <Prep>
Reduce <NP> <- <N> <Adj>
[ <NP> <V> <Det> <N> <Prep>
Reduce <PP> <- <Prep> <NP>
[ <NP> <V> <Det> <N> <PP> *
Reduce <NP> <- <Det> <N> <PP>
[ <NP> <V> <NP> * ]
Reduce <VP> <- <V> <NP>
[ <NP> <VP> * ]
Reduce <S> <- <NP> <VP>
[ <S> * ]

<N> * 'regionala']
<N> 'regionala' * ]
<N> <Adj> * ]
<NP> * ]
]

3. Academiile regionale instruiesc academii locale.


Coninutul fiierului Iura3.py
# Incarca in memorie operativa module necesare
from nltk.cfg import *
from nltk.parser import *
from nltk.tokenizer import *
# Declararea simboluri neterminale folosite in gramatica
S, VP, NP, N, V, Adj = nonterminals('S, VP, NP, N, V, Adj')
# Reguli gramaticale si lexicale
productions = (
CFGProduction(S, [NP, VP]),
CFGProduction(NP, [N, Adj]),
CFGProduction(VP, [V, NP]),
CFGProduction(N, ['Academiile']),
CFGProduction(N, ['academii']),
CFGProduction(Adj, ['regionale']),
CFGProduction(Adj, ['locale']),
CFGProduction(V, ['instruiesc'])
)
# Crearea gramaticii independente de context
grammar = CFG (S, productions)
# Lansarea parserului Bottom-Up
sr_parser = ShiftReduceParser(grammar, LEAF='TEXT')
# Definirea modului de trasare
sr_parser.trace()
# Propozitie pentru analiza
sent=Token(TEXT='Academiile regionale instruiesc academii locale')
# Impartirea propozitiei in cuvinte
WhitespaceTokenizer().tokenize(sent)
# Analiza propozitiei
parses = sr_parser.parse(sent)

sr_parser.trace(1)
Parsing 'Academiile regionale instruiesc academii locale'
[ * 'Academiile' 'regionale' 'instruiesc' 'academii' 'locale']
[ 'Academiile' * 'regionale' 'instruiesc' 'academii' 'locale']
[ <N> 'regionale' * 'instruiesc' 'academii' 'locale']
[ <NP> 'instruiesc' * 'academii' 'locale']
[ <NP> <V> 'academii' * 'locale']
[ <NP> <V> <N> 'locale' * ]

sr_parser.trace(2)
Parsing 'Academiile regionale instruiesc academii locale'
[ * 'Academiile' 'regionale' 'instruiesc' 'academii' 'locale']
S [ 'Academiile' * 'regionale' 'instruiesc' 'academii' 'locale']
R [ <N> * 'regionale' 'instruiesc' 'academii' 'locale']
S [ <N> 'regionale' * 'instruiesc' 'academii' 'locale']
R [ <N> <Adj> * 'instruiesc' 'academii' 'locale']
R [ <NP> * 'instruiesc' 'academii' 'locale']
S [ <NP> 'instruiesc' * 'academii' 'locale']
R [ <NP> <V> * 'academii' 'locale']
S [ <NP> <V> 'academii' * 'locale']
R [ <NP> <V> <N> * 'locale']
S [ <NP> <V> <N> 'locale' * ]
R [ <NP> <V> <N> <Adj> * ]
R [ <NP> <V> <NP> * ]
R [ <NP> <VP> * ]
R [ <S> * ]

sr_parser.trace(3)
Parsing 'Academiile regionale instruiesc academii locale'
[ * 'Academiile' 'regionale' 'instruiesc' 'academii' 'locale']
Shift <Academiile>:
[ 'Academiile' * 'regionale' 'instruiesc' 'academii' 'locale']
Reduce <N> <- 'Academiile'
[ <N> * 'regionale' 'instruiesc' 'academii' 'locale']
Shift <regionale>:
[ <N> 'regionale' * 'instruiesc' 'academii' 'locale']
Reduce <Adj> <- 'regionale'
[ <N> <Adj> * 'instruiesc' 'academii' 'locale']
Reduce <NP> <- <N> <Adj>
[ <NP> * 'instruiesc' 'academii' 'locale']
Shift <instruiesc>:
[ <NP> 'instruiesc' * 'academii' 'locale']
Reduce <V> <- 'instruiesc'
[ <NP> <V> * 'academii' 'locale']
Shift <academii>:
[ <NP> <V> 'academii' * 'locale']
Reduce <N> <- 'academii'
[ <NP> <V> <N> * 'locale']
Shift <locale>:
[ <NP> <V> <N> 'locale' * ]
Reduce <Adj> <- 'locale'
[ <NP> <V> <N> <Adj> * ]
Reduce <NP> <- <N> <Adj>
[ <NP> <V> <NP> * ]
Reduce <VP> <- <V> <NP>
[ <NP> <VP> * ]
Reduce <S> <- <NP> <VP>
[ <S> * ]

Concluzie: n urma realizrii lucrrii de laborator numrul 3 am realizat analiza sintactic a propozi iilor cu ajutorul
parser-ului Bottom-Up ncorporat n NLTK, iar n cea de-a doua parte am descris iar i regulile lexicale i cele
gramaticale pentru a procesa propoziiile dup care am folosit func ia sr_parser.trace() pentru a reprezenta 3 nivele de
trasare.

S-ar putea să vă placă și