Atividade da Aula

Selecione uma notícia completa, copie-a e salve-a em um arquivo de texto. Utilize a notícia baixada e crie um script que realize o que se pede.


Contar o número de palavras no texto

Implementado em textanalysis.classactivity.News.sents_words_len

1    @property
2    def sents_words_len(self) -> int:
3        """Quantidade de tokens
4
5        Contabiliza a quantidade de tokens de todas as sentenças.
6
7        :return: quantidade de tokens em todas as sentaças
8        """
9        return sum([1 for _ in self.sents for _ in _])
 1    @property
 2    def sents(self) -> Iterator[list[str]]:
 3        """Gera a lista de sentenças tokenizada
 4
 5        Gera um iterador sobre cada sentença encontrada em :attr:`text`. Ao
 6        tokenizar (utilizando as funções :func:`nltk.tokenize.sent_tokenize` e
 7        :func:`nltk.tokenize.word_tokenize`, a sentença se torna uma lista de
 8        tokens.
 9
10        :return: iterador de lista de sentenças tokenizadas
11        """
12        for sent in nltk.tokenize.sent_tokenize(self.text):
13            sent = sent.replace('\n', ' ')
14            sent = nltk.tokenize.word_tokenize(sent)
15            yield sent

Imprimir as 10 palavras mais utilizadas

Implementado em textanalysis.classactivity.News.top_words

 1    def top_words(self, n: int = 10) -> Iterator[tuple[str, int]]:
 2        """Gera as palavras mais frequentes
 3
 4        Gera as palavras (neste caso, tokens) mais frequentes em :attr:`text`
 5        utilizando a classe :class:`nltk.probability.FreqDist`.
 6
 7        :param n: número de palavras a retornar
 8        :type n: int
 9        :return: iterador de tupla (palavra, frequência)
10        """
11        freq = nltk.probability.FreqDist(_ for _ in self.sents_clean for _ in _)
12
13        for word, top in freq.most_common(n):
14            yield word, top
 1    @property
 2    def sents_clean(self) -> Iterator[list[str]]:
 3        """Gera a lista de sentenças tokenizadas sem *stopwords*.
 4
 5        Mesma funcionalidade de :attr:`sents`, porém a sentença não contém
 6        tokens definidos em :attr:`stopwords`.
 7
 8        :return: iterador de lista de sentenças tokenizadas
 9        """
10        for sent in self.sents:
11            for word in sent:
12                if word.lower() in self.stopwords:
13                    sent.remove(word)
14            for word in sent:
15                if word.lower() in self.stopwords:
16                    sent.remove(word)
17            yield sent

Imprimir os 10 bigramas mais utilizados

Implementado em textanalysis.classactivity.News.top_bigram

 1    def top_bigram(self, n: int = 10) -> Iterator[tuple[str, int]]:
 2        """Gera os bigramas mais frequentes no texto utilizando
 3
 4        Gera os bigramas de :attr:`text` utilzando a classe
 5        :class:`nltk.probability.FreqDist` no resultado da função
 6        :func:`nltk.util.ngrams`.
 7
 8        :param n: número de bigramas a retornar
 9        :type n: int
10        :return: iterador de tupla (palavra, frequência)
11        """
12        bigrams = nltk.ngrams([_ for _ in self.sents_clean for _ in _], 2)
13        freq = nltk.probability.FreqDist(bigrams)
14        for bigram, top in freq.most_common(n):
15            yield bigram, top

Contar o número de sentenças no texto

Implementado em textanalysis.classactivity.News.sents_len

1    @property
2    def sents_len(self) -> int:
3        """Quantidade de sentenças
4
5        Retorna o tamanho da lista de sentenças gerado por :attr:`sents`.
6
7        :return: quantidade de sentenças
8        """
9        return sum([1 for _ in self.sents])

Realizar a classificação gramatical (POS e NER)

Implementado em textanalysis.classactivity.News.sents_pos

 1    @property
 2    def sents_pos(self) -> Iterator[list[tuple[str, str]]]:
 3        """Gera a lista de sentenças com tokens POS
 4
 5        Realiza o tagueamento gramatical das sentenças retornadas por
 6        :attr:`sents` utilizando a função :func:`nltk.tag.pos_tag_sents`.
 7
 8        :return: iterador de lista de tokens POS
 9        """
10        for sent in nltk.tag.pos_tag_sents(self.sents):
11            yield sent
 1    @property
 2    def sents_ner(self) -> Iterator[nltk.tree.Tree]:
 3        """Gera a lista de sentenças com tokens NER
 4
 5        Realiza o reconhecimento de entidades nomeadas (NER) das sentenças
 6        retornadas por :attr:`sents` utilizando a função
 7        :func:`nltk.chunk.ne_chunk_sents`.
 8
 9        :return: iterador de lista de tokens NER
10        """
11        for sent in nltk.chunk.ne_chunk_sents(self.sents_pos):
12            yield sent