<jupyter_start><jupyter_text>spaCy para análise de texto O spaCy é Framework de Processamento de linguagem natural (NLP).NLP = analisar linguagem humana através de um sistema de computador, tb chamado de linguística computacional.Com spaCy podemos analisar as estruturas textuais, classes gramaticais, reconhecer entidades, analisar as relações entre os termos, etc. O que vamos aprender hoje:* o que é o spaCy;* instalar, carregar modelos* Criar um `Doc Container`* Trabalhar com sentenças* Entender o que é um `token` e seus atributos* Aplicar reconhecimento de entidades.  Instalando o spaCy<jupyter_code>!pip install spacy<jupyter_output><empty_output><jupyter_text>Carregando modelos<jupyter_code>import spacy

nlp = spacy.load('pt_core_news_lg')<jupyter_output><empty_output><jupyter_text>O que são esses modelos?Ver a [documentação do spaCy](https://spacy.io/models/pt)  Criar um `Doc Container`<jupyter_code># ler o texto
text = open('wlamyra.txt', 'r').read()
# processar o texto
doc = nlp(text)<jupyter_output><empty_output><jupyter_text>Trabalhar com sentenças<jupyter_code># ver as sentenças do texto
print([sent.text for sent in doc.sents])

doc.sents[0].text
# transformar o objeto doc.sents em uma lista de strings
sents = list(doc.sents)<jupyter_output><empty_output><jupyter_text>Tokens<jupyter_code>print (len(doc))
print (len(text))
# imprimir os 10 primeiros tokens
for token in doc[:10]:
    print(token)
# e se fizermos isso com a variável text?
for token in text[:10]:
    print (token)<jupyter_output>W
l
a
m
y
r
a
 
A<jupyter_text>Atributos de um token* .text* .head* .left_edge* .right_edge* .ent_type_* .iob_* .lemma_* .morph* .pos_* .dep_* .lang_<jupyter_code>for token in doc[:10]:
    print(token.text)
# vamos utilizar um token da terceira sentença 
sent5 = sents[4]
sent5
len(sent5)
token1 = sent5[30]
token1
# head = "pai" sintático do token1
token1.head
# entity type do token1
token1.ent_type
token1.ent_type_
# Lemma =  base lematizada do token1 (reduzir ao radical)
token2 = sent5[28]
print(token2.text, token2.lemma_)
# Análise morfológica
print(token2.text, token2.morph)
# Relação de dependência sintática
print(token1.text, token1.dep_)
print(token2.text, token2.dep_)
# Classe gramatical = Part of Speech
print(token1.text, token1.pos_)
print(token2.text, token2.pos_)<jupyter_output>Brasil PROPN
escravizadas VERB<jupyter_text>Visualizar as relações entre tokens<jupyter_code>from spacy import displacy
displacy.render(sent5, style="dep", minify=True, options={'distance': 110, 'compact': True})<jupyter_output><empty_output><jupyter_text>Entidades (Named Entities Recognition)<jupyter_code># imprimir as entidades do texto
for ent in doc.ents:
    print(ent.text, ent.label_)
displacy.render(doc, style="ent")
# imprimiar apenas as entidades do tipo PERSON
for named_entity in doc.ents:
    if named_entity.label_ == "PER":
        print(named_entity)
# imprimir apenas as entidades do tipo VERB e seu lemma
for token in doc:
    if token.pos_ == 'VERB':
        print(token, token.lemma_)<jupyter_output>anda andar
vende vender
anda andar
come comer
dito dizer
lê ler
disparam disparar
têm ter
gastar gastar
ensolarado ensolarado
debater debater
rasa raso
fez fazer
escravizadas escravizar
sentar-se sentar-se
marcados marcar
articuladas articular
fundamentadas fundamentar
temos ter
fundadas fundar
precisam precisar
inspirar inspirar
passa passar
merecem merecer
Deixemos Deixemos
alcança alcançar
escravizadas escravizar
enxerga enxergar
embaçadas embaçar
peço pedir
informem-se informem-se
publicadas publicar
produzida produzir
abandonam abandonar
Basta Basta
corra correr
poderá poder
ler ler
dada dar
vale valer
perguntar perguntar
impresso impresso
abrir abrir
atiçar atiçar
vende vender
saber saber
abrir abrir
sustentam sustentar
enlutado enlutar
arriadas arriar
rende render
podia poder
sustentada sustentar
recusou recusar
sentar sentar
rendidos rendido
aderir aderir
questionar questionar
diziam dizer
defender defender
publicavam publicar
dizia dizer
sei saber
deve dever
haver haver
reivin[...]<jupyter_text>Vamos ver como funciona em inglês?<jupyter_code>corpus = open('pos_1900.txt', 'r').read()
!python -m spacy download en_core_web_sm
nlp_en = spacy.load('en_core_web_sm')
doc_en = nlp_en(corpus)
displacy.render(doc_en, style="ent")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0825051999075572, 'fraction_numerical': 0.011093136122024498, 'mean_word_length': 6.1655629139072845, 'pattern_counts': {'":': 1, '<': 34, '<?xml version=': 0, '>': 34, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '635928', 'license': 'MIT', 'n_tokens_mistral': 1685, 'n_tokens_neox': 1626, 'n_words': 461, 'path': 'sem12-13_Python/spacy_01.ipynb', 'repo_name': 'saaracastro/PPGCS012-materiais', 'size': '4327'}