Exercícios da Apostila 0

Apostila 0 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.


Crie uma string com o conteúdo “Ainda que falasse as línguas dos homens e falasse a língua dos anjos, sem amor eu nada seria.”

Implementado em textanalysis.booklet.booklet0.Ex01.text

1    @text.setter
2    def text(self, text: str) -> None:
3        if text is None:
4            text = ''
5
6        if not isinstance(text, str):
7            raise TypeError("'text' deve ser uma string")
8
9        self._text = text

Imprima cada caractere da string

Implementado em textanalysis.booklet.booklet0.Ex01.text_chars

1    @property
2    def text_chars(self) -> iter[str]:
3        """Cria um gerador para os caracteres individuais do texto.
4
5        :return: Iterador dos caracteres de :attr:`text`
6        """
7        for char in self.text:
8            yield char

Segmente a string em uma lista

Implementado em textanalysis.booklet.booklet0.Ex01.text_split

 1    @property
 2    def text_split(self) -> iter[str]:
 3        """Divide o texto em uma lista de palavras
 4
 5        Divide o texto em uma lista de palavras, separadas por um espaço em
 6        branco, e cria um gerador para os itens da lista.
 7
 8        :return: Iterador das palavras de :attr:`text`
 9        """
10        for item in self.text.split():
11            yield item

Quantas palavras há na lista?

Implementado em textanalysis.booklet.booklet0.Ex01.text_split_len

1    @property
2    def text_split_len(self) -> int:
3        """Contabiliza o tamanho da lista do iterador :attr:`text_split`
4
5        :return: Tamanho da lista :attr:`text_split`
6        """
7        return len(list(self.text_split))

Imprima cada palavra da string

Implementado em textanalysis.booklet.booklet0.Ex01.text_split

 1    @property
 2    def text_split(self) -> iter[str]:
 3        """Divide o texto em uma lista de palavras
 4
 5        Divide o texto em uma lista de palavras, separadas por um espaço em
 6        branco, e cria um gerador para os itens da lista.
 7
 8        :return: Iterador das palavras de :attr:`text`
 9        """
10        for item in self.text.split():
11            yield item

Substitua o termo “dos homens” por “do mundo”

Implementado em textanalysis.booklet.booklet0.Ex01.text_replace()

 1    def text_replace(self, old: str, new: str) -> str:
 2        """Substitui ``old`` por ``new``
 3
 4        Substitui o trecho de :attr:`text` indicado pelo parâmetro ``old`` pelo
 5        texto indicado no parâmetro ``new``
 6
 7        :param old: Texto original a ser substituído.
 8        :type old: str
 9        :param new: Texto novo.
10        :type new: str
11
12        :return: O novo valor de :attr:`text`
13        """
14        self.text = self.text.replace(old, new)
15        return self.text

Imprima o fragmento que vai do 21º até o 30º caracteres

Implementado na propriedade textanalysis.booklet.booklet0.Ex01.text_segment. O método deve ser invocado passando os valores 21 e 30 conforme requisitado neste item.

 1    def text_segment(self, first: int, last: Optional[int] = None) -> str:
 2        """Retorna o segmento do texto entre ``first`` e ``last``
 3
 4        Retorna o segmento do texto indicado, da posição inicial ``first``
 5        até a posição ``last``, ambos *INCLUSIVO*, ou seja, retorna o caracter
 6        das posições indicadas. Se ``last`` for omitido, retorna apenas o
 7        caracter indicado por ``first``
 8
 9        :raises ValueError: Se ``first`` é menor ou igual a zero ou menor que
10            ``last``
11
12        :param first: Posição inicial do segmento (deve ser maior que zero)
13        :type first: int
14        :param last: Posição final do segmento, opcional
15        :type last: int, opcional
16
17        :return: String com o segmento do texto ou uma string vazia se
18            ``first`` for maior que o tamanho do texto
19        """
20        if first <= 0:
21            raise ValueError("'first' deve ser maior ou igual a 1")
22
23        if not last:
24            last = first
25
26        if last < first:
27            raise ValueError("'last' deve ser maior ou igual a 'first'")
28
29        return self.text[first-1:last]

Imprima os últimos 15 caracteres

Implementado em textanalysis.booklet.booklet0.Ex01.text_last()

 1    def text_last(self, n: int) -> str:
 2        """Retorna os últimos caracteres do texto, de tamanho indicado pelo
 3        parâmetro ``n``, que é opcional com valor padrão ``15``.
 4
 5        :param n: Tamanho do segmento.
 6        :type n: int, opcional
 7
 8        :raises IndexError: se o tamanho do segmento é maior que o texto em si.
 9
10        :return: Segmento do texto dos últimos ``n`` caracteres.
11        """
12        return self.text[-n:]

Salve a sentença em um arquivo do tipo txt

Implementado em textanalysis.booklet.booklet0.Ex01.text_save()

 1    def text_save(self, filename: str) -> str:
 2        """Salva o texto em um arquivo indicado pelo parâmetro ``filename``.
 3
 4        :param filename: Caminho do arquivo
 5        :type filename: str
 6
 7        :return: Caminho completo do arquivo salvo
 8        """
 9        filename = dsutils.datadir.join(filename)
10        with open(filename, 'w', encoding='utf8') as f:
11            f.write(self.text + '\n')
12            return filename

Apostila 0 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.


Crie uma lista com os parágrafos do documento

Implementado no construtor da Classe textanalysis.booklet.booklet0.Ex02. O caminho do docx deve ser passado como parâmetro.

 1class Ex02:
 2    """Implementa a atividade descrita em :ref:`Apostila 0 Exercitando 02`
 3
 4    :param docname: Caminho do arquivo ``docx`` a ser carregado.
 5    :type docname: str
 6    """
 7
 8    def __init__(self, docname: str) -> None:
 9        super().__init__()
10        self._doc = docx.Document(dsutils.datadir.join(docname))
11

Crie uma lista com os parágrafos do documento

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_list

1    @property
2    def paragraphs_list(self) -> list[str]:
3        """Cria uma lista contendo cada parágrafo encontrado no documento.
4
5        :return: Lista com os parágrafos.
6        """
7        return list(self.paragraphs)
1    @property
2    def paragraphs(self) -> iter[str]:
3        """Cria um iterador para os parágrafos encontrados no documento.
4
5        :returns: iterador dos parágrafos no documento
6        """
7
8        for paragraph in self._doc.paragraphs:
9            yield paragraph.text

Quantos parágrafos o documento possui?

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_len

1    @property
2    def paragraphs_len(self) -> int:
3        """Contabiliza o tamanho da lista do gerador criado por
4        :func:`Exercitando02.paragraphs`.
5
6        :returns: Tamanho da lista.
7        """
8        return len(self.paragraphs_list)

Imprima o conteúdo do 1º parágrafo do texto

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_segment()

 1    def paragraphs_segment(self, first: int,
 2                           last: Optional[int] = None) -> Union[list[str], str]:
 3        """Retorna os parágrafos do documento, da posição inicial ``first`` até
 4        a posição ``last``, ambos *INCLUSIVO*, ou seja, também retorna os
 5        parágrafos nas posições indicadas. Se ``last`` for omitido, retorna
 6        apenas o parágrafo indicado por ``first``.
 7
 8        :raises ValueError: Erro gerado quando ``first`` é menor ou igual a
 9            zero ou quando ``first`` menor que ``last``.
10
11        :param first: Posição inicial do segmento (deve ser maior que zero).
12        :type first: int
13        :param last: Posição final do segmento.
14        :type last: int, opcional
15
16        :return: Uma lista de string com os parágrafos solicitados, ou uma
17            única string de parágrafo de ``last`` for omitido.
18        """
19        if first <= 0:
20            raise ValueError('first parameter must be greater '
21                             'or equal to one')
22
23        if last and first > last:
24            raise ValueError('last parameter must be greater '
25                             'or equal to first')
26
27        if last:
28            return self.paragraphs_list[first - 1:last]
29        else:
30            return self.paragraphs_list[first - 1]

Imprima os parágrafos 3 a 6, inclusive

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_segment()

 1    def paragraphs_segment(self, first: int,
 2                           last: Optional[int] = None) -> Union[list[str], str]:
 3        """Retorna os parágrafos do documento, da posição inicial ``first`` até
 4        a posição ``last``, ambos *INCLUSIVO*, ou seja, também retorna os
 5        parágrafos nas posições indicadas. Se ``last`` for omitido, retorna
 6        apenas o parágrafo indicado por ``first``.
 7
 8        :raises ValueError: Erro gerado quando ``first`` é menor ou igual a
 9            zero ou quando ``first`` menor que ``last``.
10
11        :param first: Posição inicial do segmento (deve ser maior que zero).
12        :type first: int
13        :param last: Posição final do segmento.
14        :type last: int, opcional
15
16        :return: Uma lista de string com os parágrafos solicitados, ou uma
17            única string de parágrafo de ``last`` for omitido.
18        """
19        if first <= 0:
20            raise ValueError('first parameter must be greater '
21                             'or equal to one')
22
23        if last and first > last:
24            raise ValueError('last parameter must be greater '
25                             'or equal to first')
26
27        if last:
28            return self.paragraphs_list[first - 1:last]
29        else:
30            return self.paragraphs_list[first - 1]

O termo “Machado” está no documento?

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_hastext()

 1    def paragraphs_hastext(self, text: str) -> bool:
 2        """Verifica se a string indicado pelo parâmetro ``text`` existe no
 3        documento.
 4
 5        :param text: Texto a procurar no documento.
 6        :type text: str
 7
 8        :return: Verdadeiro ou falso.
 9        """
10        return text in self.paragraphs_text

Crie um texto corrido a partir dos parágrafos lidos

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_text

1    @property
2    def paragraphs_text(self) -> str:
3        """Retorna uma string com o conteúdo do documento.
4
5        :return: String do documento.
6        """
7        return '\n'.join(self.paragraphs_list)

Substitua o termo “Batista” por “João Batista”

Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_replacetext()

 1    def paragraphs_replacetext(self, old: str, new: str) -> str:
 2        """Retorna uma string com o conteúdo do documento, substiuindo o texto
 3        indicado pelo parâmetro ``old`` por ``new``.
 4
 5        :param old: Texto original a ser substituído.
 6        :type old: str
 7        :param new: Texto novo.
 8        :type new: str
 9
10        :return: String com o texto substituído.
11        """
12        return self.paragraphs_text.replace(old, new)