◇ OpenCyber Academy
Técnico · Capítulo 8 · Português

Capítulo 8 — Nomes, códigos e padrões

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 8 — Nomes, códigos e padrões

Mapa da aula

Aula 08 publicada. Mapa, exemplo, EX029.

flowchart TD
  N0["8.1 Nomes de pontos inconsistentes"]
  N1["8.2 Normalizando"]
  N2["8.4 Uma lista padrão"]
  N0 --> N1 --> N2
  N2 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX029"]

Desenho lógico

flowchart LR
  N0["8.1 Nomes de pontos inconsistentes"]
  N1["8.2 Normalizando"]
  N2["8.4 Uma lista padrão"]
  N0 --> N1 --> N2 --> Q["EX029"]
[8.1 Nomes de pontos inconsistentes]
    |
    v
[8.2 Normalizando]
    |
    v
[8.4 Uma lista padrão]
    |
    v
[Exemplo resolvido] --> [Exercício EX029]

Objetivos de aprendizagem

Você vai (1) identificar nomes inconsistentes; (2) normalizar textos com regras simples; (3) acordar uma lista padrão com um dono.

8.1 Nomes de pontos inconsistentes

Os passageiros reclamam que o site mostra nomes diferentes para o mesmo ponto. Marta reúne os nomes dos pontos da tabela de horários, do site e do sistema de reclamações e encontra variações como High St, High Street e high street com um espaço no fim. Cada sistema foi configurado separadamente, e as pessoas digitaram os nomes do seu jeito. Ela explica que nomes inconsistentes confundem os passageiros e dividem os relatórios, porque um mesmo ponto aparece como vários nas contagens. Marta conta as variações de cada ponto em uma tabela curta, que usa depois para conferir os resultados.

"""Normalise synthetic bus stop names and count distinct stops before and after (stdlib only)."""
import re
raw = ["High St", "High Street", "high street ", "Station Rd", "Station Road", "STATION ROAD",
       "Market Sq", "Market Square", "Park Ave", "Park Avenue", "Church Lane", "Church Ln"]
abbr = {"st": "street", "rd": "road", "sq": "square", "ave": "avenue", "ln": "lane"}
def norm(s):
    w = re.sub(r"\s+", " ", s.strip().lower()).split(" ")
    return " ".join(abbr.get(x, x) for x in w)
print(f"names {len(raw)}; distinct raw {len(set(raw))}; distinct after normalising {len({norm(s) for s in raw})}")
print(sorted({norm(s) for s in raw}))

Execute com python3 lab_stops.py. Saída verificada:

names 12; distinct raw 12; distinct after normalising 5
['church lane', 'high street', 'market square', 'park avenue', 'station road']

8.2 Normalizando

O laboratório normaliza doze nomes sintéticos de pontos. Ele remove espaços extras, converte para minúsculas e expande abreviações comuns em inglês, como st para street e rd para road. Os doze nomes originais são todos distintos como foram escritos, mas, depois da normalização, restam apenas cinco pontos distintos: church lane, high street, market square, park avenue e station road. Marta observa que regras simples podem revelar quantos pontos reais existem por trás de muitas grafias diferentes. Ela executa o script na lista completa de nomes dos três sistemas e compartilha os resultados com o Sr. Hughes.

8.3 Limites das regras

Marta avisa que regras automáticas podem errar. St pode significar street, rua, ou saint, santo, como em St Mary's Church. Ela confere a lista normalizada com o Sr. Hughes antes de usá-la. Ele confirma os cinco pontos e acrescenta que um ponto perto da igreja deve manter a palavra saint. Marta acrescenta ao script uma lista de exceções. Ela aprende que normalizar é um primeiro passo útil, mas que uma pessoa que conhece os dados precisa conferir o resultado. A lista de exceções fica guardada ao lado do script, com uma nota explicando o motivo de cada exceção.

8.4 Uma lista padrão

O Sr. Hughes se torna dono de uma lista oficial de pontos, com um código, um nome oficial e a localização de cada ponto. Todos os sistemas devem usar o código e o nome oficial. Marta ajuda a atualizar o site e o sistema de reclamações a partir da lista. O Sr. Osei explica que uma lista única, com dono, impede que os nomes voltem a se afastar, e que pontos novos precisam entrar na lista antes de aparecer em qualquer outro lugar. Marta confere o site um mês depois e vê que todos os pontos mostram o nome oficial, e as reclamações dos passageiros sobre os nomes param.

Exemplo resolvido

Marta encontra variações nos nomes dos pontos entre os sistemas, normaliza doze nomes em cinco pontos, acrescenta uma exceção para saint depois de conferir com o Sr. Hughes e ajuda a adotar uma lista oficial de pontos com dono.

Caso sintético. Os nomes são sintéticos; as saídas vêm de lab_stops.py.

Erros e limites

Normalizar automaticamente sem revisão pode juntar coisas diferentes.

Exercícios

Continue estudando — aula 08 (capítulo 08 de 18)

← Capítulo 07 · Índice das aulas · Capítulo 09 →

Continue para a próxima aula já escrita.