Natural Language Processing

Laboratorul 6

(Deadline: -)

Daca nu sunteti logati exercitiile nu se mai afiseaza.

spaCy

Bibliografie:

Pentru instalare: pip install spacy

Pentru upgrade: pip install -U spacy

Pentru a folosi datele pentru limba engleza: python -m spacy download en

In toate programele in care procesati texte in limba engleza va trebui sa incarcati datele pentru limba engleza: import spacy
sp_en = spacy.load('en')

Mai jos vom urmari operatiile pe care le-am facut si cu nltk, doar ca de data asta vom folosi spaCy.

Impartirea pe fraze: >>> text_procesat=sp_en("I saw a cat. The cat was white. It was running on the street.")
>>> list(text_procesat.sents)
[I saw a cat., The cat was white., It was running on the street.]

Tokenizare: >>> for token in text_procesat:
    print(str(token.idx)+" "+token.text)

    
0 I
2 saw
6 a
8 cat
11 .
13 The
17 cat
21 was
25 white
30 .
32 It
35 was
39 running
47 on
50 the
54 street
60 .
>>>

Analiza morfologica >>> for token in text_procesat:
    print(token.pos_,end=" ")

    
PRON VERB DET NOUN PUNCT DET NOUN VERB ADJ PUNCT PRON VERB VERB ADP DET NOUN PUNCT
>>>

Analiza sintactica bazata pe dependente: >>> text_procesat=sp_en("The mouse saw a beautiful white cat running on the street.")
>>> for token in text_procesat:
    print(token.dep_, "(", token.head.text, ", ", token.text,")")

    
det ( mouse ,  The )
nsubj ( saw ,  mouse )
ROOT ( saw ,  saw )
det ( cat ,  a )
amod ( cat ,  beautiful )
amod ( cat ,  white )
dobj ( saw ,  cat )
acl ( cat ,  running )
prep ( running ,  on )
det ( street ,  the )
pobj ( on ,  street )
punct ( saw ,  . )
>>>

Folosirea tagurilor spacy (expandati sectiunea pentru limba engleza) pentru a obtine informatii despre tokeni. De exemplu:

>>> for token in text_procesat:
    print(token.tag_,end=" ")

    
PRP VBD DT NN . DT NN VBD JJ . PRP VBD VBG IN DT NN .
>>>
>>> spacy.explain("PRP")
'pronoun, personal'
>>> spacy.explain("VBD")
'verb, past tense'
>>> spacy.explain("NN")
'noun, singular or mass'
>>>

Pentru a obtine forma unui substantiv la singular/plural, sau conjugarea unui verb pentru o anumita persoana si un anumit timp, folosim modulul pattern. Se cloneaza/downloadeaza din folderul git

Pentru a instala pattern: pip install pattern

Daca aveti probleme la instalare, puteti lua modulul de pe git. Dupa ce ati instalat git, dati comanda: git clone -b development https://github.com/clips/pattern Si apoi instalati pattern.

Daca va da o eraore legata de faptul ca nu poate deschide mysql.h, downloadati whl-ul pentru Mysqlclient si reincercati instalarea modulului pattern.

De exemplu, daca dorim sa obtinem forma la plural a substantivului "cat", scriem: >>> import pattern.en
>>> pattern.en.pluralize("cat")
'cats'
iar pentru singularul lui "cats": >>> pattern.en.singularize("cats")
'cat'

Atentie, pattern nu verifica daca exista cuvantul dat ca rgument ci doar ii aplica reguli de obtinere a pluralului, implementand si niste exceptii. De exemplu daca vrem pluralul pentru "cats" sau pentru sirul "abcdefghij": >>> pattern.en.pluralize("cats")
'catss'
>>> pattern.en.pluralize("abcdefghij")
'abcdefghijs'

Putem folosi pattern si pentru a conjuga verbe: >>> pattern.en.conjugate(verb="be",tense=pattern.en.PRESENT,number=pattern.en.SG)
'is'
>>> pattern.en.conjugate(verb="be",tense=pattern.en.PRESENT,number=pattern.en.PLURAL)
'are'
>>> pattern.en.conjugate(verb="run",tense=pattern.en.PAST,number=pattern.en.PLURAL)
'ran'
>>> pattern.en.conjugate(verb="run",tense=pattern.en.PARTICIPLE,number=pattern.en.PLURAL)
'running'
>>>