Exercícios da Apostila 1

Apostila 1 Exercitando 01

Execute o que se pede. Logo após, cole a solução do exercício neste documento. Lembre-se de salvar seu programa, para estudos posteriores.


Imprima as palavras dos documentos neg/cv002_tok-3321.txt e pos/cv003_tok-8338.txt

Implementado em textanalysis.booklet.booklet1.Ex01.words()

 1    def words(self, fileid: str, category: Optional[str] = None) -> iter[str]:
 2        """Iterador das palavras do corpus com ID ``fileid``
 3
 4        :param fileid: ID desejado
 5        :type fileid: str
 6
 7        :param category: Categoria desejada
 8        :type category: str
 9
10        :return: Iterador de string
11        """
12        for fid in self.findid(fileid, category):
13            for word in self.corpus.wordlist(fid):
14                yield word

Apostila 1 Exercitando 02

Execute o que se pede. Logo após, cole a solução do exercício neste documento. Lembre-se de salvar seu programa, para estudos posteriores.

Utilize o arquivo Noticia_1 disponível na pasta de dados da turma e liste os 50 bigramas e trigramas mais frequentes obtidos do texto.

Implementado em textanalysis.booklet.booklet1.Ex02.top_bigrams()

 1    def top_bigrams(self, top: Optional[int] = 20) -> iter[BiGramFreq]:
 2        """
 3
 4        :param top:
 5        :type top: int
 6
 7        :return: Iterador de tupla
 8        """
 9        for obj, freq in nltk.FreqDist(self.bigrams).most_common(top):
10            yield obj, freq

Implementado em textanalysis.booklet.booklet1.Ex02.top_trigrams()

 1    def top_trigrams(self, top: Optional[int] = 20) -> iter[TriGramFreq]:
 2        """
 3
 4        :param top:
 5        :type top: int
 6
 7        :return: Iterador de tupla
 8        """
 9        for obj, freq in nltk.FreqDist(self.trigrams).most_common(top):
10            yield obj, freq

Apostila 1 Exercitando 03

Execute o que se pede. Logo após, cole a solução do exercício neste documento. Lembre-se de salvar seu programa, para estudos posteriores.


Analise a frequência das palavras ['the', 'that'] no arquivo singles.txt e, depois, no arquivo pirates.txt.

Implementado em textanalysis.booklet.booklet1.Ex03.tokens_freq()

1    @property
2    def tokens_freq(self) -> nltk.FreqDist:
3        return nltk.FreqDist(self.tokens)

Inclua a geração do gráfico de frequência.

Implementado em textanalysis.booklet.booklet1.Ex03.tokens_freq_plot()

 1    def tokens_freq_plot(self) -> str:
 2        out = dsutils.datadir.join(self.file.split('.')[0] + '.png')
 3
 4        fig = pyplot.figure(figsize=(10, 4))
 5        pyplot.ion()
 6        self.tokens_freq.plot(50, cumulative=False)
 7        fig.savefig(out, bbox_inches="tight")
 8        pyplot.ioff()
 9
10        return out

Gere a lista dos 15 bigramas mais frequentes do texto.

Implementado em textanalysis.booklet.booklet1.Ex03.top_bigrams()

1    @property
2    def top_bigrams(self) -> list[BiGramFreq]:
3        return nltk.FreqDist(self.bigrams).most_common(15)

Gere a lista dos 20 quadrigramas gramas mais frequentes que possuam a palavra life.

Implementado em textanalysis.booklet.booklet1.Ex03.top_life_quadrigrams()

1    @property
2    def top_life_quadrigrams(self) -> list[QuadriGramFreq]:
3        return nltk.FreqDist(self.quadrigrams('life')).most_common(20)

Apostila 1 Exercitando 04

Execute o que se pede. Logo após, cole a solução do exercício neste documento. Lembre-se de salvar seu programa, para estudos posteriores.

O NLTK possui um corpus com as obras de Machado de Assis (from nltk.corpus import machado):

  1. Execute print(machado.readme()) para conhecer melhor o corpus

  2. Utilizando o corpus machado, elabore um programa que atenda aos requisitos:

    1. Quais são as categorias presentes no corpus?

    2. Quais são os documentos dentro desse corpus?

    3. Imprima o conteúdo do arquivo do documento que contem a obra Memórias Postumas de Braz Cubas.

    4. Analise a frequência das palavras ['olhos', 'estado'] em Memórias Postumas de Bras Cubas.

    5. Quantas palavras há no texto? Use len(texto).

    6. Quantas palavras distintas há na obra?

    7. Qual é o vocabulário (palavras) presentes na obra?

    8. Quais são os 15 termos mais repetidos no texto de Machado de Assis?

    9. Tabular a frequência de palavras.

    10. Gerar um gráfico com os 15 termos mais repetidos.

    11. Remova os termos indesejados e repita as questões h a j.

    12. Obter a lista de todos os trigramas do texto.

    13. Obter a lista dos 15 bigramas que contenham a palavra olhos.

    14. Gerar o gráfico dos bigramas com a palavra olhos.

Implementado na função textanalysis.booklet.booklet1.ex04()

 1def ex04():
 2    # Execute print(machado.readme()) para conhecer melhor o corpus
 3    print(machado.readme())
 4
 5    # Utilizando o corpus machado, elabore um programa que atenda aos
 6    # requisitos:
 7
 8    # a. Quais são as categorias presentes no corpus?
 9    print('Categorias: {}'.format(machado.categories()))
10
11    # b. Quais são os documentos dentro desse corpus?
12    print('Documentos: {}'.format(machado.fileids()))
13
14    # c. Imprima o conteúdo do arquivo do documento que contem a obra
15    #    Memórias Postumas de Braz Cubas
16    book_fileid = 'romance/marm05.txt'
17    print(machado.raw(book_fileid))
18
19    # d. Analise a frequência das palavras [‘olhos’,’estado’] em
20    #    Memórias Postumas de Bras Cubas
21    book_text = machado.raw(book_fileid)
22    book_tokens = tokenize.word_tokenize(book_text)
23    book_freq = nltk.FreqDist(book_tokens)
24
25    for w in ['olhos', 'estado']:
26        print('Frequência da palavra {:>8s} : {:03}'.format(w, book_freq[w]))
27
28    # e. Quantas palavras há no texto? Use len(texto)
29    print('Total de palavras: {}'.format(len(book_text)))
30
31    # f. Quantas palavras distintas há na obra?
32    print('Total de palavras distintas: {}'.format(len(book_freq)))
33
34    # g. Qual é o vocabulário (palavras) presentes na obra?
35    print('Vocabulário: {}'.format(book_freq.keys()))
36
37    # h. Quais são os 15 termos mais repetidos no texto de Machado de Assis?
38    print('\n{:25s} {}'.format('Top 15', 'Frequência'))
39    for w, f in book_freq.most_common(15):
40        print('{:25s} {:03}'.format(w, f))
41
42    # i. Tabular a frequência de palavras
43    print('\n')
44    book_freq.tabulate(15, cumulative=False)
45
46    # j. Gerar um gráfico com os 15 termos mais repetidos
47    book_freq.plot(15, title='Top 15 words', cumulative=False)
48
49    # k. Remova os termos indesejados  e repita as questões 'h' a 'j'
50    book_stopwords = stopwords.wordlist('portuguese')
51    book_stopwords += ['\x97', '...', 'd.']
52    book_stopwords += [p for p in string.punctuation]
53    book_tokens = [t.lower() for t in book_tokens
54                   if t.lower() not in book_stopwords]
55    book_freq = nltk.FreqDist(book_tokens)
56
57    print('\n{:25s} {}'.format('Top 15', 'Frequência'))
58    for w, f in book_freq.most_common(15):
59        print('{:25s} {:03}'.format(w, f))
60
61    print('\n')
62    book_freq.tabulate(15, cumulative=False)
63
64    book_freq.plot(15, title='Top 15 words', cumulative=False)
65
66    # l. Obter a lista de todos os trigramas do texto
67    for trigram in ngrams(book_tokens, 3):
68        print('{:35s}'.format(str(trigram)))
69
70    # m. Obter a lista dos 15 bigramas que contenham a palavra 'olhos'
71    olhos_bigram = [ng for ng in ngrams(book_tokens, 2) if 'olhos' in ng]
72    olhos_freq = nltk.FreqDist(olhos_bigram)
73    print('\n{:30s} {}'.format('Top 15 Olhos', 'Frequência'))
74    for b, f in olhos_freq.most_common(15):
75        print('{:30s} {:03}'.format(str(b), f))
76
77    # n. Gerar o gráfico dos bigramas com a palavra 'olhos'
78    olhos_freq.plot(15, cumulative=True)