6 Normalização de texto e Expressões Regulares

Objetivos deste capítulo:

    1. Apresentar as expressões regulares (regex)
    1. Apresentar comandos regex no R

A normalização de texto consiste em converter texto para formatos mais padronizados, e expressões regulares, ou “regex” são uma ferramenta importante neste processo. A normalização de texto, a limpeza dos dados, sua reestruturação no formato necessário pode tomar a maior parte do tempo em um projeto.

Vamos partir de um problema inicial. Quem quiser saber sobre uso de remédios como azitromicina, ivermectina e cloroquina em pacientes com “síndrome respiratória aguda grave”, podemos baixar a tabela csv do opendatasus e olhar a coluna “OUT_ANTIV”. Lá vemos que não há padronização, os dados estão bagunçados (ou “messy data”). Por exemplo, “azitromicina” foi escrita também como “azitronicina”,“az” “azt”, “azitro”, isto é, além de abreviações diferentes, há erros de ortografia. Em casos assim, expressões regulares podem ajudar a normalizar este campo, isto é, deixando tudo num mesmo padrão.

Esta parte de limpeza, padronização, também chamada de cleaning e data wrangling (algo como “manipulação de dados”) consome boa parte do tempo

“É dito, frequentemente, que 80% da análise de dados é gasto no processo de limpeza e preparação dos dados. A preparação dos dados é não só o primeiro passo, como deve ser repetido tantas vezes no curso da análise na medida que novos problemas aparecem ou novos dados são coletados.”

It is often said that 80% of data analysis is spent on the process of cleaning and preparing the data (Dasu and Johnson 2003). Data preparation is not just a first step, but must be repeated many times over the course of analysis as new problems come to light or new datais collected. fonte: WICKHAM, Hadley. Tidy Data. Journal of Statistical Software. August 2014, Volume 59, Issue 10

Apesar desse número “80%” parecer ser ficcioso, ou que varie conforme as condições e destreza do pesquisador (veja aqui), não deixa de ser uma verdade que grande parte do tempo é gasto neste processo e processo de arrumar e rearrumar os dados.

6.1 Expressões regulares (RegEx)

Certa vez Jamie Zawinski fez uma piada sobre regex que se tornou bastante conhecida ao se mencioar regex:

Algumas pessoas, ao se defrontarem com um problema, pensam “Acho que vou usar expressões regulares”. Agora elas tem dois problemas.

Talvez um pouco exagerada a piada, expressões regulares podem ser um pouco difíceis no início, mas depois que se aprende, fica difícil viver sem elas. Em editores de texto como Microsoft Word, OpenOffice, LibreOffice, GoogleDocs etc. é possível buscar por trechos de texto idênticos, é possível tornar a busca sensível a termos em maiúsculo e minúsculo. A busca utilizando regex permite isto e muito mais.

Busca e subtituição com regex no Libre Office Calc

Busca e subtituição com regex no Rstudio em Edit/Replace Find

Regex trata-se de uma ferramenta coringa na hora de limpar ou transformar texto, estando presente nas mais diversas linguagens de programação, com sintaxe mais ou menos comum a todas elas. As expressões regulares (regular expressions), ou RegEx, RegExp, etc., mas mais conhecidas como regex, trata-se de busca e substituição avançada usando não só o texto exato, mas usando padrões de texto. Perguntas das expressões regulares:

  • O quê? Números? Letras? Letras minúsculas ou maiúsculas? Palavras? Símbolos ou caracteres específicos? Quebras de linha? Tabulação?
  • Quantas vezes? Um vez? Uma ou nenhuma? Uma ou várias vezes? Uma quantidade específica? Em regex chama-se isso de quantificadores.
  • Onde? Antes ou de depois do quê? No início ou no fim da sentença? Em regex isso chama-se âncora.

É possível delimitar a busca por letras específicas, por escopo de letras e/ou números, pode-se especificar a quantidade de caracteres, tirar ou acrescentar quebra de linha, acrescentar/retirar algo no início ou fim da linha.

As regras do Regex são padronizadas em diversas linguagens de programação, apesar de algumas peculiaridades em cada uma, há uma gramática comum. Assim, aprendendo em uma linguagem, você aprendeu em outras.s

Supondo que queira ter uma ferramenta simples de consulta do Qualis de revistas da área de sociologia. Baixando o relatório qualis capes de sociologia neste link é possível filtrar com base no nome ou na avaliação.

Com regex podemos transformar uma tabela em csv

Estado;sigla;capital;região;
Acre;AC;Rio Branco;Norte;
Alagoas;AL;Maceió;Nordeste;
Amapá;AP;Macapá;Norte;
Amazonas;AM;Manaus;Norte;
Bahia;BA;Salvador;Nordeste;
Ceará;CE;Fortaleza;Nordeste;

para o formato de tabela em markdwon

|Estado | sigla | capital| região|
|------|----|-----|-----|
|Acre |AC |Rio Branco |Norte|
|Alagoas |AL |Maceió |Nordeste|
|Amapá |AP |Macapá |Norte|
|Amazonas |AM |Manaus |Norte|
|Bahia |BA |Salvador |Nordeste|

Com regex é possível fazer transformações, por exemplo, como pegar datas como “20/03/2020” ,“13/01/1990” ,“04/06/2001”, que estão no formado dd/mm/aaaa (dia/mês/ano) e mudá-las para outra disposição, como aaaa-mm-dd (ano/mês/dia), passando para “2020-03-20”, “1990-01-13”, “2001-06-04”.

Há uma sessão nesse manual dedicada a manipulação de datas, com pacotes específicos.

Vejamos os parâmetros que usamos com regex

6.1.1 Parâmetros das Regex

6.1.1.1 Metacaracteres especiais

Alguns caracteres tem significado especial

  • \n usado para quebra de linha, ou “newline”.
  • \t caractere de tabulação.
  • \\ para usar a própria barra
  • \r retorno de carro ou “carriage return”, que move o cursor para a próxima linha, mas sem aparecer em seu início. De uso no Windows.
  • \v tab vertical
  • \f form feed

Destes, os mais comuns são o \n, \t, \\ e por vezes o \r.

6.1.1.2 Âncoras

símbolo descrição exemplo
\^a Início da string ^a busca “aaa aaa”
a$ Fim da string a$ busca “aaaa aaa
\b limite de palavra \b[A-Za-z]\b
\B NÃO limite de palavra
\\< Início de uma palavra
\\> Fim de uma palavra

Exemplo de substituição com regex no Google Docs: acrescentou-se “Disse:” no início das células demarcadas

6.1.1.3 Operadores

Descrição Exemplo
. Pega um caractere único, qualquer um. Dado aba, abc, asa, a busca por ab. retorna aba, abc. A busca de a.. retorna aba, asa
[..] Lista de caracteres, podendo usar a barra - para definir um escopo. Dado abcdefgh a busca por [a-d], retorna abcd
[^..] Inversão do caso anterior. Pega todos os elementos, exceto os especificados ali Dado abcdefgh a busca por [^a-d], retorna efgh.
| Operador booleano do tipo “ou”. Dado "bananada, bananeira, bandolim", a busca utilizando "eira|dol", retorna "bananeira, bandolim"
(...) Agrupamento. É bastante usado com “backreference” Dado "banana, bananada, bananeira", a busca utilizando "banan(ada|eira)", retorna "bananada, bananeira"

Podemos usar os colchetes [] para pegarmos um escopo. Se usamos [a-f], então nossa expressão pega qualquer coisa que contenha a,b,c,d,e, ou f, em minúscula. Assim, se quisermos pegar todas as letras minúsculas, usamos [a-z], se quisermos pegar todas as maiúsculas e minúsculas, usamos [A-Za-z]. Mas atenção, desta forma não detectamos caracteres acentuados, como “à”, “ç”, “ã”, etc. Para isso, acrescentamos à-ÿ que pega o escopo de caracteres acentuados.

6.1.1.4 Quantificadores

Os quantificadores especificam quantas vezes o padrão anterior é repetido

símbolo explicação exemplo
* busca o item anterior zero ou mais vezes
+ busca o item anterior uma ou mais vezes
? o item anterior é opcional, e pode aparecer no máximo uma vez. O padrão bananas? encontra “banana” “bananas” “bananal” “bananada”
{n} busca o item anterior exatamente n vezes
{n,} busca o item anterior n vezes ou mais
{n,m} busca o item anterior com no mínimo n vezes e com no máximo m vezes. (Faz sentido usálo com delimitadores como \b) no_vec <- c("no", "nono", "nonono", "nononono", "nonato") grep("(no){2,3}", no_vec, value=TRUE) [1] "nono" "nonono" "nononono"

Os quantificadores podem ser combinados. Por exemplo, a partir do texto:

texto <- "O SR. PRESIDENTE (Omar Aziz. PSD - AM. Fala da Presidência.) – Os Srs. Senadores que as aprovam permaneçam como se encontram. (Pausa.)"

Possui dois textos entre parênteses. Assim se usarmos:

stringr::str_extract(texto, '\\(.*\\)') 
## [1] "(Omar Aziz. PSD - AM. Fala da Presidência.) – Os Srs. Senadores que as aprovam permaneçam como se encontram. (Pausa.)"

Pegamos o texto desde o primeiro parêntese até o último. Isto acontece por o símbolo de asterisco * ser “greedy” (voraz, guloso, segundo a terminologia de regex). Precisamos torná-lo “lazy” (preguiçoso) se quisermos pegar apenas o primeiro caso. O fazemos com a sequência de quantificadores *?

stringr::str_extract(texto, '\\(.*?\\)') 
## [1] "(Omar Aziz. PSD - AM. Fala da Presidência.)"

Exemplos:

banana_vec <- c("banana", "bananas", "bananal", "bananada", "bananeira", "bandolim")

grep("ban.*", banana_vec, value=T)
## [1] "banana"    "bananas"   "bananal"   "bananada"  "bananeira" "bandolim"

grep("banan.*", banana_vec, value=T)
## [1] "banana"    "bananas"   "bananal"   "bananada"  "bananeira"
grep("banana.*", banana_vec, value=T)
## [1] "banana"   "bananas"  "bananal"  "bananada"

grep("banana.?", banana_vec, value=TRUE)
## [1] "banana"   "bananas"  "bananal"  "bananada"
grep("banana.?$", banana_vec, value=TRUE)
## [1] "banana"  "bananas" "bananal"

# A sequência "an" pode aparecer uma ou mais vezes repetida, como "ban", "banan", "bananan", "banananan", etc.
grep("b(an)+", banana_vec, value=T)
## [1] "banana"    "bananas"   "bananal"   "bananada"  "bananeira" "bandolim"

grep("b[an]{2}", banana_vec, value=T) 
## [1] "banana"    "bananas"   "bananal"   "bananada"  "bananeira" "bandolim"

grep("b(an){2}", banana_vec, value=T)
## [1] "banana"    "bananas"   "bananal"   "bananada"  "bananeira"

# se quiser delimitar a busca, restringindo a encontrar apenas o termo exato (exact match), deve-se usar o delimitador de palavra "\b". E para usá-lo aqui, deve-se acrescentar mais uma barra para o escape, ficando "\\b".
grep("\\bbanana\\b", banana_vec, value=T)
## [1] "banana"

grep("\\bbanana.\\b", banana_vec, value=T)
## [1] "bananas" "bananal"

A História do comando GREP:

O comando grep exite graças à uma demanda da análise textual. Na década de 1960, um problema intrigava diversos pesquisadores. Quem são os autores de cada texto dos textos dos Federalistas? Os Federalist Papers foram 85 textos publicados de modo anônimo sob pseudônimo de “Publius”, podendo ser de autoria de James Madinson, Alexander Hamilton, John Jay em 1787 e 1788. Mas quem escreveu quais textos? Lee McMahon comentou deste problema com seus colegas. Ele queria buscar por certas palavras através de vários textos. Ken Thompson - personagem importante na história da programação - escutou aquilo e no dia seguinte voltou com o programa que veio a ser chamado grep:

  • “g” de “Global”, procurar em vários documentos
  • “re” de regular expressions
  • “p” de print. Se achar o padrão de regex, então imprima na tela. Poderia ainda ser apagar, ou substituir também.

O grep se tornou parte obrigatória do arcabouço computacional na programação em geral, principalmente nos sistemas baseados em Unix (Mac e Linux).

Esta história foi contada em Where GREP Came From - Computerphile. Outros detalhes mais técnicos podem ser vistos aqui A identificação de autoria pelo padrão de escrita veio a ser chamado de “digitais linguísticas” (linguistic fingerprint). Posteriormente, um grupo de pesquisadores da Universidade de Aston usaram de técnica semelhante (porém mais avançada) para identificar a identidade real de Satoshi Nakamoto, criador do Bitcoin e da tecnologia de blockchain.

6.1.1.5 Escapando (escaping)

Vimos que os símbolos [, ], (, ), {, }, os operadores *, +, ? ., |, - possuem um significado especial nas expressões regulares. E para usar estes mesmos símbolos literalmente? Para isto, usamos o “escape”, usando uma barra '\' antes destes símbolos. Assim, se quisermos indicar o ponto final, usamos \.. No caso do R, usamos barra dupla. O exemplo anterior ficaria \\..

6.1.1.6 Classes POSIX

POSIX Descrição Equivalente
[:digit:] ou \\d Dígitos: 0 1 2 3 4 5 6 7 8 9. [0-9]
[:lower:] letras em minúsculo (Lower-case) [a-z]
[:upper:] Caracteres maiúsculos [A-Z]
[:alpha:] Caracteres alfabéticos: [:lower:] and [:upper:]. [a-zA-Z]
[:alnum:] ou \w Caracteres alfanuméricos: [:alpha:] e [:digit:]. [a-zA-Z0-9] ou [A-z0-9]
\W Não palavra [^A-z0-9]
[:blank:] Caracteres vazios, como espaço e tab.
[:cntrl:] Caracteres de controle, como \n, \r, [\x00-\x1F\x7F]
[:graph:] Caracteres gráficos : [:alnum:] e [:punct:].
[:print:] Caracteres impimíveis: [:alnum:], [:punct:] and space.
[:space:] Caracteres de espaço: tab \t, nova linha \n, tab vertical, form feed, carriage return \r, espaço e outros similares
[:xdigit:] Dígitos hexadecimais: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
\s espaço em branco [ ]
\S (maiúsculo) tudo, exceto espaço em branco [^ ]
[:punct:] Caracteres de pontuação: ‘! ” # $ % & ' ( ) * + , - . / : ; < = > ? @ [  ] ^ _ ` { } ~ . |’

Mas no R, para usar esta classe posix, deve-se reforçar as colchetes. Assim, para usarmos [:punct:] no R, devemos fazê-lo assim: [[:punct:]]

6.1.1.7 Backreference

Podemos reaproveitar trechos através de backreference. Ao fazer substituições nos textos, um modo de delimitar ou reorganizar os elementos é feita com o uso de backreference. Indicamos o que queremos reutilizar com os parênteses, e reutilizamos através de numeração como ‘\1’, ‘\2’.

nome <- "Fulano Silva"
gsub('(.*) (.*)', '\\2,\\1.', nome)
## [1] "Silva,Fulano."

Onde \\0 indica toda a string, \\1 indica o primeiro caso, \\2 indica o segundo e assim por diante.

6.1.2 Dicas/Sugestões

6.1.3 Indicação de leitura sobre Regex

Softwares Para lidar com dados bagunçados (“messy data”), uma sugestão é usar o OpenRefine. Antes “Google Refine”, mas após a Google abandonar o projeto, virou “Open Refine”, livre e de código aberto, ajuda a padronizar dados de tabelas, planilhas, limpando, corrigindo, filtrando (com regex), clusterizando ou transformando em outro formato. No site há tutoriais. Ele abre no seu navegador de internet, mas roda direto do seu computador. Usam esta ferramenta do OpenRefine, por exemplo, o Basômetro do Estadão Dados, que mede o apoio que o governo federal tem no legislativo e o ProPublica de jornalismo investigativo independente, No próprio site do OpenRefine há tutoriais e no ProPublica, ambos em inglês).

6.2 RegEx no R

O uso de regex vem por padrão no R, no pacote base, mas há também uma expansão de regex com o pacote stringr que veremos mais à frente.

6.2.1 Grep

Como vimos, o grep serve para filtrar linhas que contenham algo que buscamos. Primeiro, vamos criar duas variáveis com texto.

nosso_texto <- "Estamos aprendendo expressão regular no R. Bla bla bla no no no."
poema <- c("E agora, José?", "A festa acabou," , "a luz apagou,", "o povo sumiu,", "a noite esfriou", "e agora, José?")

Usaremos estas frases como exemplos a seguir:

6.2.1.1 grepl()

Com o grepl("Termo", Nome_variável) verificamos se uma expressão está presente em nosso texto e ele nos retorna booleanos TRUE(verdadeiro, termo encontrado) ou FALSE (falso, termo não encontrado).

grepl("Estamos", nosso_texto)
## [1] TRUE
grepl("paralelepípedo", nosso_texto)
## [1] FALSE
grepl("festa", poema)
## [1] FALSE  TRUE FALSE FALSE FALSE FALSE

6.2.1.2 grep(“padrão”, variável)

Tendo várias linhas em um vetor, como por exemplo:

grep("festa", poema)
## [1] 2
grep("José", poema)
## [1] 1 6
grep("josé", poema)
## integer(0)

No primeiro e segundo exemplo, buscamos por “festa” e “José” e o R nos retornou o local do termo buscado no vetor. No terceiro exemplo, o termo “josé” - todo em minúsculo - não existia, e por isso o R retornou integer(0). Se quisermos ver as respectivas linhas, fazemos assim:

poema[grep("José", poema)]
## [1] "E agora, José?" "e agora, José?"
poema[grep("festa", poema)]
## [1] "A festa acabou,"

Ou ainda, usando value = TRUE) para mostrar o texto encontrado, e não apenas o índice.

grep("José", poema, value = TRUE)
## [1] "E agora, José?" "e agora, José?"
grep("festa", poema, value = TRUE)
## [1] "A festa acabou,"

O grep em sua versão completa no R, pode ter ainda as seguintes designações: > grep(padrão, nome_variável, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE)

Campo do grep Descrição
padrão padrão regex a ser buscado
nome_variável Nome da variável. Se o grep vier após um pipe (%>%), é substituído por ponto .
ignore.case = FALSE se ignore.case = TRUE , então a busca não distinguirá maiúscula de minúscula
perl = FALSE usa o padrão Perl de regex
value = FALSE Imprime os índices. Se TRUE, mostra os elementos. `| |fixed = FALSE| considera a busca como texto puro, sem nenhuma expressão regex| |useBytes = FALSE| seTRUEa busca é feita byte-a-byte ao invés de caractere a caractere| |invert = FALSE| Seinvert = TRUE`, então serão exibidas todas as linhas, exceto as que contenham o padrão buscado.

https://stat.ethz.ch/R-manual/R-devel/library/base/html/grep.html

6.2.2 gsub()

Se quisermos substituir trechos de nossa frase, usamos gsub("o que será retirado", "O que queremos colocar no lugar", nome_variável)

gsub("Bla", "paralelepípedo", nosso_texto)
## [1] "Estamos aprendendo expressão regular no R. paralelepípedo bla bla no no no."
gsub("bla", "paralelepípedo", nosso_texto)
## [1] "Estamos aprendendo expressão regular no R. Bla paralelepípedo paralelepípedo no no no."

Também podemos usar gsub para limpar nosso texto, colocando "" no campo intermediário da nossa função gsub. Por exemplo, se quisermos retirar os “no”:

gsub("no", "", nosso_texto)
## [1] "Estamos aprendendo expressão regular  R. Bla bla bla   ."

Ou se quisermos retirar os “bla”:

gsub("bla", "", nosso_texto)
## [1] "Estamos aprendendo expressão regular no R. Bla   no no no."
gsub("[bB]la", "", nosso_texto)
## [1] "Estamos aprendendo expressão regular no R.    no no no."
gsub("?", "", poema)
## [1] "E agora, José?"  "A festa acabou," "a luz apagou,"   "o povo sumiu,"  
## [5] "a noite esfriou" "e agora, José?"
gsub(",", "", poema)
## [1] "E agora José?"   "A festa acabou"  "a luz apagou"    "o povo sumiu"   
## [5] "a noite esfriou" "e agora José?"

A retirada da vírgula ocorreu normalmente. Já a interrogação continuou, uma vez que é um caractere usado com significado específico no regex. Devemos então indicar que se trata de uma interrogação comum.

gsub("\\?", "", poema)
## [1] "E agora, José"   "A festa acabou," "a luz apagou,"   "o povo sumiu,"  
## [5] "a noite esfriou" "e agora, José"

E retirando também a vírgula:

gsub("[\\?,]", "", poema)
## [1] "E agora José"    "A festa acabou"  "a luz apagou"    "o povo sumiu"   
## [5] "a noite esfriou" "e agora José"

6.2.3 Exercício: Qual o Qualis de certas revistas? Quais revistas possuem certo Qualis?

Vamos montar um script de busca dos Qualis de revistas de sociologia. Vasculhando a internet, encontrei uma lista com os Qualis das revistas de sociologia em pdf. Precisamos extrair a informação do pdf, precisamos dos pacotes pdftools e tidyverse. O comando pdf_text() do pacote pdf tools carrega tanto arquivos locais, em seu computador, como direto da internet.

library(pdftools)
library(tidyverse)

# O endereço de nosso pdf
PDF.url = "https://www2.ufjf.br/ppgcso/wp-content/uploads/sites/133/2015/04/1-Qualis-Sociologia-Atualizado.pdf"
# Carregando o conteúdo do pdf na variável "meupdf"
meupdf <- pdf_text(PDF.url)
# Vamos checar se deu tudo certo, imprimindo apenas as primeiras linhas
head(meupdf)
## [1] "                                                  Consulta por Classificação / Área Avaliação\nISSN        TÍTULO                                                                              ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0335-5322   Actes de la Recherche en Sciences Sociales                                          A1      SOCIOLOGIA              Atualizado\n\n0002-7294   American Anthropologist                                                             A1      SOCIOLOGIA              Atualizado\n\n1042-0533   American Journal of Human Biology                                                   A1      SOCIOLOGIA              Atualizado\n\n0003-2573   Análise Social                                                                      A1      SOCIOLOGIA              Atualizado\n\n1573-3416   An International Journal of Politics, Culture and Society (Dordrecht. Online)       A1      SOCIOLOGIA              Atualizado\n\n0004-0002   Archives of Sexual Behavior                                                         A1      SOCIOLOGIA              Atualizado\n\n0261-3050   Bulletin of Latin American Research                                                 A1      SOCIOLOGIA              Atualizado\n\n1983-8239   Caderno CRH (Online)                                                                A1      SOCIOLOGIA              Atualizado\n\n0103-4979   Caderno CRH (UFBA. Impresso)                                                        A1      SOCIOLOGIA              Atualizado\n\n0104-8333   Cadernos Pagu (UNICAMP. Impresso)                                                   A1      SOCIOLOGIA              Atualizado\n\n0010-4159   Comparative Politics                                                                A1      SOCIOLOGIA              Atualizado\n\n1351-0487   Constellations (Oxford. Print)                                                      A1      SOCIOLOGIA              Atualizado\n\n0094-3061   Contemporary Sociology (Washington)                                                 A1      SOCIOLOGIA              Atualizado\n\n1354-067X   Culture & Psychology                                                                A1      SOCIOLOGIA              Atualizado\n\n0011-3204   Current Anthropology                                                                A1      SOCIOLOGIA              Atualizado\n\n0011-3921   Current Sociology (Print)                                                           A1      SOCIOLOGIA              Atualizado\n\n0011-5258   Dados (Rio de Janeiro. Impresso)                                                    A1      SOCIOLOGIA              Atualizado\n\n1351-0347   Democratization (London)                                                            A1      SOCIOLOGIA              Atualizado\n\n0101-7330   Educação & Sociedade (Impresso)                                                     A1      SOCIOLOGIA              Atualizado\n\n1044-3983   Epidemiology (Cambridge, Mass., Print)                                              A1      SOCIOLOGIA              Atualizado\n\n0185-4186   Estudios Sociológicos                                                               A1      SOCIOLOGIA              Atualizado\n\n0141-9870   Ethnic and Racial Studies (Print)                                                   A1      SOCIOLOGIA              Atualizado\n\n0873-6561   Etnográfica (Lisboa                                                                 A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                                            1                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"
## [2] "ISSN        TÍTULO                                                       ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0014-2182   Etudes Rurales                                               A1      SOCIOLOGIA              Atualizado\n\n1368-4310   European Journal of Social Theory                            A1      SOCIOLOGIA              Atualizado\n\n0104-5970   História, Ciências, Saúde-Manguinhos (Impresso)              A1      SOCIOLOGIA              Atualizado\n\n1678-4758   História, Ciências, Saúde-Manguinhos (Online)                A1      SOCIOLOGIA              Atualizado\n\n1806-9983   Horizontes Antropológicos (Online)                           A1      SOCIOLOGIA              Atualizado\n\n0104-7183   Horizontes Antropológicos (UFRGS. Impresso)                  A1      SOCIOLOGIA              Atualizado\n\n0539-0184   Information sur les Sciences Sociales (Paris)                A1      SOCIOLOGIA              Atualizado\n\n0891-4486   International Journal of Politics, Culture and Society       A1      SOCIOLOGIA              Atualizado\n\n2182-4096   International Journal on Working Conditions                  A1      SOCIOLOGIA              Atualizado\n\n0192-5121   International Political Science Review                       A1      SOCIOLOGIA              Atualizado\n\n0269-2171   International Review of Applied Economics                    A1      SOCIOLOGIA              Atualizado\n\n0020-8701   International Social Science Journal (Print)                 A1      SOCIOLOGIA              Atualizado\n\n0268-5809   International Sociology                                      A1      SOCIOLOGIA              Atualizado\n\n1468-795X   Journal of Classical Sociology                               A1      SOCIOLOGIA              Atualizado\n\n1467-6443   Journal of Historical Sociology (Online)                     A1      SOCIOLOGIA              Atualizado\n\n0022-216X   Journal of Latin American Studies (Print)                    A1      SOCIOLOGIA              Atualizado\n\n0022-4537   Journal of Social Issues (Print)                             A1      SOCIOLOGIA              Atualizado\n\n0094-582X   Latin American Perspectives                                  A1      SOCIOLOGIA              Atualizado\n\n0023-8791   Latin American Research Review                               A1      SOCIOLOGIA              Atualizado\n\n0102-6445   Lua Nova (Impresso)                                          A1      SOCIOLOGIA              Atualizado\n\n1678-4944   Mana (Rio de Janeiro. Online)                                A1      SOCIOLOGIA              Atualizado\n\n0104-9313   Mana (UFRJ. Impresso)                                        A1      SOCIOLOGIA              Atualizado\n\n0101-3300   Novos Estudos CEBRAP (Impresso)                              A1      SOCIOLOGIA              Atualizado\n\n0102-4469   Perspectiva Teológica (Belo Horizonte)                       A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                     2                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [3] "ISSN        TÍTULO                                                                   ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0048-3931   Philosophy of the Social Sciences                                        A1      SOCIOLOGIA              Atualizado\n\n0191-4537   Philosophy & Social Criticism                                            A1      SOCIOLOGIA              Atualizado\n\n0276-5624   Research in Social Stratification and Mobility                           A1      SOCIOLOGIA              Atualizado\n\n0048-7333   Research Policy                                                          A1      SOCIOLOGIA              Atualizado\n\n0102-6909   Revista Brasileira de Ciências Sociais (Impresso)                        A1      SOCIOLOGIA              Atualizado\n\n0254-1106   Revista Crítica de Ciências Sociais                                      A1      SOCIOLOGIA              Atualizado\n\n0034-7701   Revista de Antropologia (USP. Impresso)                                  A1      SOCIOLOGIA              Atualizado\n\n0188-2503   Revista Mexicana de SociologÍa                                           A1      SOCIOLOGIA              Atualizado\n\n0390-6701   Revue Internationale de Sociologie                                       A1      SOCIOLOGIA              Atualizado\n\n0037-7686   Social Compass (Imprimé)                                                 A1      SOCIOLOGIA              Atualizado\n\n0037-7732   Social Forces                                                            A1      SOCIOLOGIA              Atualizado\n\n0303-8300   Social Indicators Research                                               A1      SOCIOLOGIA              Atualizado\n\n0277-9536   Social Science & Medicine (1982)                                         A1      SOCIOLOGIA              Atualizado\n\n0102-6992   Sociedade e Estado (UnB. Impresso)                                       A1      SOCIOLOGIA              Atualizado\n\n0038-0199   Sociologia Ruralis (Print)                                               A1      SOCIOLOGIA              Atualizado\n\n1517-4522   Sociologias (UFRGS. Impresso)                                            A1      SOCIOLOGIA              Atualizado\n\n0735-2751   Sociological Theory                                                      A1      SOCIOLOGIA              Atualizado\n\n0038-0296   Sociologie du Travail                                                    A1      SOCIOLOGIA              Atualizado\n\n1069-4404   Sociology of Religion                                                    A1      SOCIOLOGIA              Atualizado\n\n0340-918X   Soziologie (Opladen)                                                     A1      SOCIOLOGIA              Atualizado\n\n0103-2070   Tempo Social (USP. Impresso)                                             A1      SOCIOLOGIA              Atualizado\n\n0002-7162   The Annals of the American Academy of Political and Social Science       A1      SOCIOLOGIA              Atualizado\n\n0263-2764   Theory, Culture & Society                                                A1      SOCIOLOGIA              Atualizado\n\n0725-5136   Thesis Eleven (Print)                                                    A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                                 3                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                               
## [4] "ISSN        TÍTULO                                                         ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0730-8884   Work and Occupations                                           A1      SOCIOLOGIA              Atualizado\n\n0305-750X   World Development                                              A1      SOCIOLOGIA              Atualizado\n\n0954-0121   Aids Care (Print)                                              A2      SOCIOLOGIA              Atualizado\n\n0889-2229   AIDS Research and Human Retroviruses                           A2      SOCIOLOGIA              Atualizado\n\n1414-753X   Ambiente e Sociedade (Campinas)                                A2      SOCIOLOGIA              Atualizado\n\n1809-4422   Ambiente & Sociedade (Online)                                  A2      SOCIOLOGIA              Atualizado\n\n0044-7447   Ambio (Oslo)                                                   A2      SOCIOLOGIA              Atualizado\n\n1130-2887   América Latina Hoy                                             A2      SOCIOLOGIA              Atualizado\n\n0161-7761   Anthropology & Education Quarterly                             A2      SOCIOLOGIA              Atualizado\n\n0210-1963   Arbor (Madrid)                                                 A2      SOCIOLOGIA              Atualizado\n\n0863-1808   Berliner Journal fur Soziologie                                A2      SOCIOLOGIA              Atualizado\n\n0102-311X   Cadernos de Saúde Pública (ENSP. Impresso)                     A2      SOCIOLOGIA              Atualizado\n\n1298-6046   Cahiers du Genre (Paris)                                       A2      SOCIOLOGIA              Atualizado\n\n0008-0276   Cahiers Internationaux de Sociologie                           A2      SOCIOLOGIA              Atualizado\n\n0826-3663   Canadian Journal of Latin American and Caribbean Studies       A2      SOCIOLOGIA              Atualizado\n\n1188-3774   Canadian Journal of Urban Research                             A2      SOCIOLOGIA              Atualizado\n\n0309-8168   Capital & Class                                                A2      SOCIOLOGIA              Atualizado\n\n0341-8162   Catena (Cremlingen)                                            A2      SOCIOLOGIA              Atualizado\n\n1519-6089   Civitas: Revista de Ciências Sociais (Impresso)                A2      SOCIOLOGIA              Atualizado\n\n0010-4086   Comparative Education Review                                   A2      SOCIOLOGIA              Atualizado\n\n0360-1315   Computers and Education                                        A2      SOCIOLOGIA              Atualizado\n\n0102-8529   Contexto Internacional (PUCRJ. Impresso)                       A2      SOCIOLOGIA              Atualizado\n\n1478-0046   Cultural and Social History (Online)                           A2      SOCIOLOGIA              Atualizado\n\n0419-1633   Diogène (Ed. Française)                                        A2      SOCIOLOGIA              Atualizado\n\n\n\n                                                                       4                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [5] "ISSN        TÍTULO                                                            ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0392-1921   Diogenes (English ed.)                                            A2      SOCIOLOGIA              Atualizado\n\n1362-024X   Durkheimian Studies                                               A2      SOCIOLOGIA              Atualizado\n\n0921-8009   Ecological Economics (Amsterdam)                                  A2      SOCIOLOGIA              Atualizado\n\n0143-831X   Economic and Industrial Democracy                                 A2      SOCIOLOGIA              Atualizado\n\n0142-5455   Employee Relations                                                A2      SOCIOLOGIA              Atualizado\n\n0104-4036   Ensaio (Fundação Cesgranrio. Impresso)                            A2      SOCIOLOGIA              Atualizado\n\n0014-1844   Ethnos (Stockholm)                                                A2      SOCIOLOGIA              Atualizado\n\n0015-704X   Fordham Law Review                                                A2      SOCIOLOGIA              Atualizado\n\n0016-3287   Futures (London)                                                  A2      SOCIOLOGIA              Atualizado\n\n0197-3975   Habitat International                                             A2      SOCIOLOGIA              Atualizado\n\n1468-2737   Hispanic Research Journal                                         A2      SOCIOLOGIA              Atualizado\n\n0018-7615   Humboldt (Spanische Ausg.)                                        A2      SOCIOLOGIA              Atualizado\n\n0265-5012   IDS Bulletin (Brighton. 1984)                                     A2      SOCIOLOGIA              Atualizado\n\n0306-4379   Information Systems (Oxford)                                      A2      SOCIOLOGIA              Atualizado\n\n1469-8412   Innovation: The European Journal of Social Science Research       A2      SOCIOLOGIA              Atualizado\n\n0034-9690   Interamerican Journal of Psychology                               A2      SOCIOLOGIA              Atualizado\n\n1861-1303   International Journal of Action Research                          A2      SOCIOLOGIA              Atualizado\n\n0020-8523   International Review of Administrative Sciences                   A2      SOCIOLOGIA              Atualizado\n\n0037-9174   Journal de la Société des Américanistes                           A2      SOCIOLOGIA              Atualizado\n\n1471-0358   Journal of Agrarian Change (Print)                                A2      SOCIOLOGIA              Atualizado\n\n0168-7034   Journal of Consumer Policy                                        A2      SOCIOLOGIA              Atualizado\n\n1353-7903   Journal of Contemporary Religion                                  A2      SOCIOLOGIA              Atualizado\n\n1533-7928   Journal of Machine Learning Research (Online)                     A2      SOCIOLOGIA              Atualizado\n\n0306-6150   Journal of Peasant Studies                                        A2      SOCIOLOGIA              Atualizado\n\n\n\n                                                                          5                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                                                                                                                                                                                                                     
## [6] "ISSN        TÍTULO                                                      ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0047-2697   Journal of Political & Military Sociology                   A2      SOCIOLOGIA              Atualizado\n\n1053-1858   Journal of Public Administration Research and Theory        A2      SOCIOLOGIA              Atualizado\n\n0022-4200   Journal of Religion in Africa (Print)                       A2      SOCIOLOGIA              Atualizado\n\n0022-4529   Journal of Social History                                   A2      SOCIOLOGIA              Atualizado\n\n1744-2222   Latin American and Caribbean Ethnic Studies (Print)         A2      SOCIOLOGIA              Atualizado\n\n1531-426X   Latin American Politics and Society                         A2      SOCIOLOGIA              Atualizado\n\n0439-4216   L'Homme (Paris. 1961)                                       A2      SOCIOLOGIA              Atualizado\n\n0024-7413   Luso-Brazilian Review                                       A2      SOCIOLOGIA              Atualizado\n\n1548-9957   Luso-Brazilian Review (Online)                              A2      SOCIOLOGIA              Atualizado\n\n1240-1307   Natures Sciences Sociétés                                   A2      SOCIOLOGIA              Atualizado\n\n0028-6060   New Left Review                                             A2      SOCIOLOGIA              Atualizado\n\n1461-4448   New Media & Society (Print)                                 A2      SOCIOLOGIA              Atualizado\n\n0251-3552   Nueva Sociedad                                              A2      SOCIOLOGIA              Atualizado\n\n0104-6276   Opinião Pública (UNICAMP. Impresso)                         A2      SOCIOLOGIA              Atualizado\n\n0146-1672   Personality & Social Psychology Bulletin                    A2      SOCIOLOGIA              Atualizado\n\n1203-9438   Politique et Sociétés (Montréal)                            A2      SOCIOLOGIA              Atualizado\n\n0032-471X   Population Review (Print)                                   A2      SOCIOLOGIA              Atualizado\n\n1544-8444   Population, Space and Place                                 A2      SOCIOLOGIA              Atualizado\n\n0102-7972   Psicologia: Reflexão e Crítica (UFRGS. Impresso)            A2      SOCIOLOGIA              Atualizado\n\n0963-6625   Public Understanding of Science (Print)                     A2      SOCIOLOGIA              Atualizado\n\n0100-8587   Religião & Sociedade (Impresso)                             A2      SOCIOLOGIA              Atualizado\n\n0968-8080   Reproductive Health Matters (Print)                         A2      SOCIOLOGIA              Atualizado\n\n0102-3098   Revista Brasileira de Estudos de População (Impresso)       A2      SOCIOLOGIA              Atualizado\n\n1806-9347   Revista Brasileira de História (Online)                     A2      SOCIOLOGIA              Atualizado\n\n\n\n                                                                    6                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"

Vamos filtrar a tabela; toda linha que tiver “Soziol” irá aparecer na nossa busca. (escolhi este nome por gerar poucos resultados e não encher nossa tela)

grep("Soziolo", meupdf, value=T) 
## [1] "ISSN        TÍTULO                                                                   ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0048-3931   Philosophy of the Social Sciences                                        A1      SOCIOLOGIA              Atualizado\n\n0191-4537   Philosophy & Social Criticism                                            A1      SOCIOLOGIA              Atualizado\n\n0276-5624   Research in Social Stratification and Mobility                           A1      SOCIOLOGIA              Atualizado\n\n0048-7333   Research Policy                                                          A1      SOCIOLOGIA              Atualizado\n\n0102-6909   Revista Brasileira de Ciências Sociais (Impresso)                        A1      SOCIOLOGIA              Atualizado\n\n0254-1106   Revista Crítica de Ciências Sociais                                      A1      SOCIOLOGIA              Atualizado\n\n0034-7701   Revista de Antropologia (USP. Impresso)                                  A1      SOCIOLOGIA              Atualizado\n\n0188-2503   Revista Mexicana de SociologÍa                                           A1      SOCIOLOGIA              Atualizado\n\n0390-6701   Revue Internationale de Sociologie                                       A1      SOCIOLOGIA              Atualizado\n\n0037-7686   Social Compass (Imprimé)                                                 A1      SOCIOLOGIA              Atualizado\n\n0037-7732   Social Forces                                                            A1      SOCIOLOGIA              Atualizado\n\n0303-8300   Social Indicators Research                                               A1      SOCIOLOGIA              Atualizado\n\n0277-9536   Social Science & Medicine (1982)                                         A1      SOCIOLOGIA              Atualizado\n\n0102-6992   Sociedade e Estado (UnB. Impresso)                                       A1      SOCIOLOGIA              Atualizado\n\n0038-0199   Sociologia Ruralis (Print)                                               A1      SOCIOLOGIA              Atualizado\n\n1517-4522   Sociologias (UFRGS. Impresso)                                            A1      SOCIOLOGIA              Atualizado\n\n0735-2751   Sociological Theory                                                      A1      SOCIOLOGIA              Atualizado\n\n0038-0296   Sociologie du Travail                                                    A1      SOCIOLOGIA              Atualizado\n\n1069-4404   Sociology of Religion                                                    A1      SOCIOLOGIA              Atualizado\n\n0340-918X   Soziologie (Opladen)                                                     A1      SOCIOLOGIA              Atualizado\n\n0103-2070   Tempo Social (USP. Impresso)                                             A1      SOCIOLOGIA              Atualizado\n\n0002-7162   The Annals of the American Academy of Political and Social Science       A1      SOCIOLOGIA              Atualizado\n\n0263-2764   Theory, Culture & Society                                                A1      SOCIOLOGIA              Atualizado\n\n0725-5136   Thesis Eleven (Print)                                                    A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                                 3                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"
## [2] "ISSN        TÍTULO                                                         ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0730-8884   Work and Occupations                                           A1      SOCIOLOGIA              Atualizado\n\n0305-750X   World Development                                              A1      SOCIOLOGIA              Atualizado\n\n0954-0121   Aids Care (Print)                                              A2      SOCIOLOGIA              Atualizado\n\n0889-2229   AIDS Research and Human Retroviruses                           A2      SOCIOLOGIA              Atualizado\n\n1414-753X   Ambiente e Sociedade (Campinas)                                A2      SOCIOLOGIA              Atualizado\n\n1809-4422   Ambiente & Sociedade (Online)                                  A2      SOCIOLOGIA              Atualizado\n\n0044-7447   Ambio (Oslo)                                                   A2      SOCIOLOGIA              Atualizado\n\n1130-2887   América Latina Hoy                                             A2      SOCIOLOGIA              Atualizado\n\n0161-7761   Anthropology & Education Quarterly                             A2      SOCIOLOGIA              Atualizado\n\n0210-1963   Arbor (Madrid)                                                 A2      SOCIOLOGIA              Atualizado\n\n0863-1808   Berliner Journal fur Soziologie                                A2      SOCIOLOGIA              Atualizado\n\n0102-311X   Cadernos de Saúde Pública (ENSP. Impresso)                     A2      SOCIOLOGIA              Atualizado\n\n1298-6046   Cahiers du Genre (Paris)                                       A2      SOCIOLOGIA              Atualizado\n\n0008-0276   Cahiers Internationaux de Sociologie                           A2      SOCIOLOGIA              Atualizado\n\n0826-3663   Canadian Journal of Latin American and Caribbean Studies       A2      SOCIOLOGIA              Atualizado\n\n1188-3774   Canadian Journal of Urban Research                             A2      SOCIOLOGIA              Atualizado\n\n0309-8168   Capital & Class                                                A2      SOCIOLOGIA              Atualizado\n\n0341-8162   Catena (Cremlingen)                                            A2      SOCIOLOGIA              Atualizado\n\n1519-6089   Civitas: Revista de Ciências Sociais (Impresso)                A2      SOCIOLOGIA              Atualizado\n\n0010-4086   Comparative Education Review                                   A2      SOCIOLOGIA              Atualizado\n\n0360-1315   Computers and Education                                        A2      SOCIOLOGIA              Atualizado\n\n0102-8529   Contexto Internacional (PUCRJ. Impresso)                       A2      SOCIOLOGIA              Atualizado\n\n1478-0046   Cultural and Social History (Online)                           A2      SOCIOLOGIA              Atualizado\n\n0419-1633   Diogène (Ed. Française)                                        A2      SOCIOLOGIA              Atualizado\n\n\n\n                                                                       4                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                                                    
## [3] "ISSN        TÍTULO                                                  ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0034-8910   Revista de Saúde Pública (Impresso)                     A2      SOCIOLOGIA              Atualizado\n\n1518-8787   Revista de Saúde Pública (Online)                       A2      SOCIOLOGIA              Atualizado\n\n1678-9873   Revista de Sociologia e Política (Online)               A2      SOCIOLOGIA              Atualizado\n\n0104-4478   Revista de Sociologia e Política (UFPR. Impresso)       A2      SOCIOLOGIA              Atualizado\n\n0104-026X   Revista Estudos Feministas (UFSC. Impresso)             A2      SOCIOLOGIA              Atualizado\n\n0378-5548   Revista Internacional del Trabajo (Impresa)             A2      SOCIOLOGIA              Atualizado\n\n0034-9712   Revista Internacional de Sociología                     A2      SOCIOLOGIA              Atualizado\n\n1293-8882   Revue Tiers Monde                                       A2      SOCIOLOGIA              Atualizado\n\n1363-4607   Sexualities (London)                                    A2      SOCIOLOGIA              Atualizado\n\n0097-9740   Signs (Chicago, Ill.)                                   A2      SOCIOLOGIA              Atualizado\n\n1350-4630   Social Identities (Print)                               A2      SOCIOLOGIA              Atualizado\n\n0765-3697   Sociétés (Paris)                                        A2      SOCIOLOGIA              Atualizado\n\n0210-8364   Sociología del Trabajo                                  A2      SOCIOLOGIA              Atualizado\n\n2152-8586   South African Review of Sociology                       A2      SOCIOLOGIA              Atualizado\n\n1654-0204   Stockholm Review of Latin American Studies              A2      SOCIOLOGIA              Atualizado\n\n1477-7487   Surveillance & Society (Online)                         A2      SOCIOLOGIA              Atualizado\n\n0730-479X   The Tocqueville Review                                  A2      SOCIOLOGIA              Atualizado\n\n0143-6597   Third World Quarterly (Print)                           A2      SOCIOLOGIA              Atualizado\n\n1745-641X   Work Organisation, Labour & Globalisation (Print)       A2      SOCIOLOGIA              Atualizado\n\n1935-6226   World Political Science Review                          A2      SOCIOLOGIA              Atualizado\n\n0340-1804   Zeitschrift fur Soziologie                              A2      SOCIOLOGIA              Atualizado\n\n0994-4524   Actuel Marx                                             B1      SOCIOLOGIA              Atualizado\n\n0095-3997   Administration & Society                                B1      SOCIOLOGIA              Atualizado\n\n1057-6290   Advances in Medical Sociology                           B1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                7                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"

Filtrando a tabela, toda linha que tiver “A1” irá aparecer, não importa em que coluna esteja.

grep("A1", meupdf, value=T) 
## [1] "                                                  Consulta por Classificação / Área Avaliação\nISSN        TÍTULO                                                                              ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0335-5322   Actes de la Recherche en Sciences Sociales                                          A1      SOCIOLOGIA              Atualizado\n\n0002-7294   American Anthropologist                                                             A1      SOCIOLOGIA              Atualizado\n\n1042-0533   American Journal of Human Biology                                                   A1      SOCIOLOGIA              Atualizado\n\n0003-2573   Análise Social                                                                      A1      SOCIOLOGIA              Atualizado\n\n1573-3416   An International Journal of Politics, Culture and Society (Dordrecht. Online)       A1      SOCIOLOGIA              Atualizado\n\n0004-0002   Archives of Sexual Behavior                                                         A1      SOCIOLOGIA              Atualizado\n\n0261-3050   Bulletin of Latin American Research                                                 A1      SOCIOLOGIA              Atualizado\n\n1983-8239   Caderno CRH (Online)                                                                A1      SOCIOLOGIA              Atualizado\n\n0103-4979   Caderno CRH (UFBA. Impresso)                                                        A1      SOCIOLOGIA              Atualizado\n\n0104-8333   Cadernos Pagu (UNICAMP. Impresso)                                                   A1      SOCIOLOGIA              Atualizado\n\n0010-4159   Comparative Politics                                                                A1      SOCIOLOGIA              Atualizado\n\n1351-0487   Constellations (Oxford. Print)                                                      A1      SOCIOLOGIA              Atualizado\n\n0094-3061   Contemporary Sociology (Washington)                                                 A1      SOCIOLOGIA              Atualizado\n\n1354-067X   Culture & Psychology                                                                A1      SOCIOLOGIA              Atualizado\n\n0011-3204   Current Anthropology                                                                A1      SOCIOLOGIA              Atualizado\n\n0011-3921   Current Sociology (Print)                                                           A1      SOCIOLOGIA              Atualizado\n\n0011-5258   Dados (Rio de Janeiro. Impresso)                                                    A1      SOCIOLOGIA              Atualizado\n\n1351-0347   Democratization (London)                                                            A1      SOCIOLOGIA              Atualizado\n\n0101-7330   Educação & Sociedade (Impresso)                                                     A1      SOCIOLOGIA              Atualizado\n\n1044-3983   Epidemiology (Cambridge, Mass., Print)                                              A1      SOCIOLOGIA              Atualizado\n\n0185-4186   Estudios Sociológicos                                                               A1      SOCIOLOGIA              Atualizado\n\n0141-9870   Ethnic and Racial Studies (Print)                                                   A1      SOCIOLOGIA              Atualizado\n\n0873-6561   Etnográfica (Lisboa                                                                 A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                                            1                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"
## [2] "ISSN        TÍTULO                                                       ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0014-2182   Etudes Rurales                                               A1      SOCIOLOGIA              Atualizado\n\n1368-4310   European Journal of Social Theory                            A1      SOCIOLOGIA              Atualizado\n\n0104-5970   História, Ciências, Saúde-Manguinhos (Impresso)              A1      SOCIOLOGIA              Atualizado\n\n1678-4758   História, Ciências, Saúde-Manguinhos (Online)                A1      SOCIOLOGIA              Atualizado\n\n1806-9983   Horizontes Antropológicos (Online)                           A1      SOCIOLOGIA              Atualizado\n\n0104-7183   Horizontes Antropológicos (UFRGS. Impresso)                  A1      SOCIOLOGIA              Atualizado\n\n0539-0184   Information sur les Sciences Sociales (Paris)                A1      SOCIOLOGIA              Atualizado\n\n0891-4486   International Journal of Politics, Culture and Society       A1      SOCIOLOGIA              Atualizado\n\n2182-4096   International Journal on Working Conditions                  A1      SOCIOLOGIA              Atualizado\n\n0192-5121   International Political Science Review                       A1      SOCIOLOGIA              Atualizado\n\n0269-2171   International Review of Applied Economics                    A1      SOCIOLOGIA              Atualizado\n\n0020-8701   International Social Science Journal (Print)                 A1      SOCIOLOGIA              Atualizado\n\n0268-5809   International Sociology                                      A1      SOCIOLOGIA              Atualizado\n\n1468-795X   Journal of Classical Sociology                               A1      SOCIOLOGIA              Atualizado\n\n1467-6443   Journal of Historical Sociology (Online)                     A1      SOCIOLOGIA              Atualizado\n\n0022-216X   Journal of Latin American Studies (Print)                    A1      SOCIOLOGIA              Atualizado\n\n0022-4537   Journal of Social Issues (Print)                             A1      SOCIOLOGIA              Atualizado\n\n0094-582X   Latin American Perspectives                                  A1      SOCIOLOGIA              Atualizado\n\n0023-8791   Latin American Research Review                               A1      SOCIOLOGIA              Atualizado\n\n0102-6445   Lua Nova (Impresso)                                          A1      SOCIOLOGIA              Atualizado\n\n1678-4944   Mana (Rio de Janeiro. Online)                                A1      SOCIOLOGIA              Atualizado\n\n0104-9313   Mana (UFRJ. Impresso)                                        A1      SOCIOLOGIA              Atualizado\n\n0101-3300   Novos Estudos CEBRAP (Impresso)                              A1      SOCIOLOGIA              Atualizado\n\n0102-4469   Perspectiva Teológica (Belo Horizonte)                       A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                     2                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [3] "ISSN        TÍTULO                                                                   ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0048-3931   Philosophy of the Social Sciences                                        A1      SOCIOLOGIA              Atualizado\n\n0191-4537   Philosophy & Social Criticism                                            A1      SOCIOLOGIA              Atualizado\n\n0276-5624   Research in Social Stratification and Mobility                           A1      SOCIOLOGIA              Atualizado\n\n0048-7333   Research Policy                                                          A1      SOCIOLOGIA              Atualizado\n\n0102-6909   Revista Brasileira de Ciências Sociais (Impresso)                        A1      SOCIOLOGIA              Atualizado\n\n0254-1106   Revista Crítica de Ciências Sociais                                      A1      SOCIOLOGIA              Atualizado\n\n0034-7701   Revista de Antropologia (USP. Impresso)                                  A1      SOCIOLOGIA              Atualizado\n\n0188-2503   Revista Mexicana de SociologÍa                                           A1      SOCIOLOGIA              Atualizado\n\n0390-6701   Revue Internationale de Sociologie                                       A1      SOCIOLOGIA              Atualizado\n\n0037-7686   Social Compass (Imprimé)                                                 A1      SOCIOLOGIA              Atualizado\n\n0037-7732   Social Forces                                                            A1      SOCIOLOGIA              Atualizado\n\n0303-8300   Social Indicators Research                                               A1      SOCIOLOGIA              Atualizado\n\n0277-9536   Social Science & Medicine (1982)                                         A1      SOCIOLOGIA              Atualizado\n\n0102-6992   Sociedade e Estado (UnB. Impresso)                                       A1      SOCIOLOGIA              Atualizado\n\n0038-0199   Sociologia Ruralis (Print)                                               A1      SOCIOLOGIA              Atualizado\n\n1517-4522   Sociologias (UFRGS. Impresso)                                            A1      SOCIOLOGIA              Atualizado\n\n0735-2751   Sociological Theory                                                      A1      SOCIOLOGIA              Atualizado\n\n0038-0296   Sociologie du Travail                                                    A1      SOCIOLOGIA              Atualizado\n\n1069-4404   Sociology of Religion                                                    A1      SOCIOLOGIA              Atualizado\n\n0340-918X   Soziologie (Opladen)                                                     A1      SOCIOLOGIA              Atualizado\n\n0103-2070   Tempo Social (USP. Impresso)                                             A1      SOCIOLOGIA              Atualizado\n\n0002-7162   The Annals of the American Academy of Political and Social Science       A1      SOCIOLOGIA              Atualizado\n\n0263-2764   Theory, Culture & Society                                                A1      SOCIOLOGIA              Atualizado\n\n0725-5136   Thesis Eleven (Print)                                                    A1      SOCIOLOGIA              Atualizado\n\n\n\n                                                                                 3                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"                                                                                                                                                                                                                                               
## [4] "ISSN        TÍTULO                                                         ESTRATO ÁREA DE AVALIAÇÃO       STATUS\n0730-8884   Work and Occupations                                           A1      SOCIOLOGIA              Atualizado\n\n0305-750X   World Development                                              A1      SOCIOLOGIA              Atualizado\n\n0954-0121   Aids Care (Print)                                              A2      SOCIOLOGIA              Atualizado\n\n0889-2229   AIDS Research and Human Retroviruses                           A2      SOCIOLOGIA              Atualizado\n\n1414-753X   Ambiente e Sociedade (Campinas)                                A2      SOCIOLOGIA              Atualizado\n\n1809-4422   Ambiente & Sociedade (Online)                                  A2      SOCIOLOGIA              Atualizado\n\n0044-7447   Ambio (Oslo)                                                   A2      SOCIOLOGIA              Atualizado\n\n1130-2887   América Latina Hoy                                             A2      SOCIOLOGIA              Atualizado\n\n0161-7761   Anthropology & Education Quarterly                             A2      SOCIOLOGIA              Atualizado\n\n0210-1963   Arbor (Madrid)                                                 A2      SOCIOLOGIA              Atualizado\n\n0863-1808   Berliner Journal fur Soziologie                                A2      SOCIOLOGIA              Atualizado\n\n0102-311X   Cadernos de Saúde Pública (ENSP. Impresso)                     A2      SOCIOLOGIA              Atualizado\n\n1298-6046   Cahiers du Genre (Paris)                                       A2      SOCIOLOGIA              Atualizado\n\n0008-0276   Cahiers Internationaux de Sociologie                           A2      SOCIOLOGIA              Atualizado\n\n0826-3663   Canadian Journal of Latin American and Caribbean Studies       A2      SOCIOLOGIA              Atualizado\n\n1188-3774   Canadian Journal of Urban Research                             A2      SOCIOLOGIA              Atualizado\n\n0309-8168   Capital & Class                                                A2      SOCIOLOGIA              Atualizado\n\n0341-8162   Catena (Cremlingen)                                            A2      SOCIOLOGIA              Atualizado\n\n1519-6089   Civitas: Revista de Ciências Sociais (Impresso)                A2      SOCIOLOGIA              Atualizado\n\n0010-4086   Comparative Education Review                                   A2      SOCIOLOGIA              Atualizado\n\n0360-1315   Computers and Education                                        A2      SOCIOLOGIA              Atualizado\n\n0102-8529   Contexto Internacional (PUCRJ. Impresso)                       A2      SOCIOLOGIA              Atualizado\n\n1478-0046   Cultural and Social History (Online)                           A2      SOCIOLOGIA              Atualizado\n\n0419-1633   Diogène (Ed. Française)                                        A2      SOCIOLOGIA              Atualizado\n\n\n\n                                                                       4                               Quarta-feira 04 Fevereiro 2015 18:33:10\n"

A busca está funcionando! No entanto, vale lembrar, não conseguimos aqui delimitar nossa busca a colunas específicas. Poderíamos fazer com que buscássemos apenas na coluna com classificação. Há outros modos de importarmos estes dados e fazermos esta busca no R. Este foi um modo simples para treinarmos o regex no R.

6.2.4 Transformando strings em vetores com strsplit()

É possível quebrar uma string em vários elementos de um vetor usando um padrão regex

# nosso texto inicial
rato_vetor <- "O rato roeu. Roeu a roupa. A roupa que era do rei. Qual rei? O rei de Roma!"

# Criando um vetor tendo como critério de quebra o ponto final, deve-se usar o símbolo de escape "\\."
strsplit(rato_vetor, "\\.")
## [[1]]
## [1] "O rato roeu"               " Roeu a roupa"            
## [3] " A roupa que era do rei"   " Qual rei? O rei de Roma!"

# Vetores a partir da pontuação
strsplit(rato_vetor, "\\.|\\?")
## [[1]]
## [1] "O rato roeu"             " Roeu a roupa"          
## [3] " A roupa que era do rei" " Qual rei"              
## [5] " O rei de Roma!"

# Uma dica. Os elementos de vetores estão ficando com espaço em branco. Podemos resolver isso:
strsplit(rato_vetor, "(\\.|\\?) ?")
## [[1]]
## [1] "O rato roeu"            "Roeu a roupa"           "A roupa que era do rei"
## [4] "Qual rei"               "O rei de Roma!"

No pacote stringr o comando equivalente é o str_split().

Atenção: Ao tentar usar regex com espaços em branco (whitespace) e ele não funciona, é bom saber que há diversos tipos de espaços em branco. Há diferentes tipos de espaço em branco

6.2.5 Exemplo regex

Voltando ao nosso exemplo anterior, podemos transformar as datas abaixo, que estão no formado dd/mm/aaaa (dia/mês/ano) para o formato aaaa-mm-dd (ano-mês-dia), para que possamos, por exemplo, ordenar as datas de modo fácil.

Original Converter para
20/03/2020 “2020-03-20”
13/01/1990 “1990-01-13”
04/06/2001 “2001-06-04”
datas <- c('20/03/2020', '13/01/1990', '04/06/2001')
gsub('([0-9]{2})/([0-9]{2})/([0-9]{4})','\\3-\\2-\\1', datas)
## [1] "2020-03-20" "1990-01-13" "2001-06-04"

Vale lembrar, o R possui funções (como o strptime() ) e pacotes específicos para lidar com datas. O exemplo acima foi apenas um exercício.

O R possui diversos pacotes para lidar com regex. As funções do base, que já vem com o R possuem diversas funções. Há ainda o pacote Google RE2 que é uma versão rápida desenvolvida pela Google. Outro pacote interessante é o stringr que veremos a seguir.

6.2.6 Lookaround lookadead e lookbehind

É possível fazer com que um padrão passe a valer antes ou depois de outro padrão.

  • Se um padrão deve ser considerado se antes de outro padrão, então usamos lookahead.
  • Se um padrão deve ser considerado se depois de outro padrão, então usamos lookbehind.

Para saber mais sobre, este manual pode ser útil.

6.3 Pacote stringr

Logotipo do pacote Stringr

Há problemas recorrentes com soluções recorrentes em regex. O pacote stringr nos ajuda nisso, tendo em si diversas funções para lidarmos com strings, com soluções simplificadas para problemas que recorrentemente precisamos de fazer algum regex mais complicado, ou uma sequência de comandos. O Stringr possui ainda uma sintaxe um pouco diferente. Toda função do stringr começa com str_.

Na manipulação de strings, o pacote stringr possui diversas funcionalidades que nos poupam tempo

x <- "João foi por ali! (Disse Daniel)"
stringr::str_to_upper(x)
## [1] "JOÃO FOI POR ALI! (DISSE DANIEL)"
stringr::str_to_lower(x)
## [1] "joão foi por ali! (disse daniel)"

Exemplos de algumas funções do stringr:

Função Descrição Função correspondente
str_c() Junta múltiplos strings em um único elemento paste() e stringi::stri_join()
str_conv() Especifica o encoding de uma string. Ex.: str_conv(x, "UTF-8"). Para ver mais encodings disponíveis, rode stringi::stri_enc_list()
str_count() Conta quantas vezes um padrão ocorre .
str_detect() retorna booleanos TRUE ou FALSE da busca .
str_replace() Substitui por padrões na string .
str_subset() Como um grep( padrao, value=TRUE), retorna termos da busca grep( padrao, value=TRUE)

Vejamos um trecho de A Divisão do Trabalho Social.

durkheim.DTS <- "Quanto à questão que originou este trabalho, é a das relações entre a personalidade individual e a solidariedade social. Como é que, ao mesmo passo que se torna mais autônomo, o indivíduo depende mais intimamente da sociedade? Como pode ser, ao mesmo tempo, mais pessoal e mais solidário? Pois é inconteste que esses dois movimentos, por mais contraditórios que pareçam, seguem-se paralelamente."

E exemplos com stringr:

# contando quantas vezes um termo/padrão aparece
stringr::str_count(durkheim.DTS, "indiv")
## [1] 2

# extraindo um termo/padrão: todos os termos que comecem com "indiv"
stringr::str_extract_all(durkheim.DTS, "indiv\\w+")
## [[1]]
## [1] "individual" "indivíduo"

# str_ retorna uma lista. Para termos o resultado em vetor, usamos `unlist()`
stringr::str_extract_all(durkheim.DTS, "indiv\\w+") |> unlist()
## [1] "individual" "indivíduo"

# substituição: apenas da primeira ocorrência do termo
stringr::str_replace(durkheim.DTS, "indiv\\w+", "indiv")
## [1] "Quanto à questão que originou este trabalho, é a das relações entre a personalidade indiv e a solidariedade social. Como é que, ao mesmo passo que se torna mais autônomo, o indivíduo depende mais intimamente da sociedade? Como pode ser, ao mesmo tempo, mais pessoal e mais solidário? Pois é inconteste que esses dois movimentos, por mais contraditórios que pareçam, seguem-se paralelamente."

# substituição: todas as ocorrências do termo
stringr::str_replace_all(durkheim.DTS, "indiv\\w+", "indiv")
## [1] "Quanto à questão que originou este trabalho, é a das relações entre a personalidade indiv e a solidariedade social. Como é que, ao mesmo passo que se torna mais autônomo, o indiv depende mais intimamente da sociedade? Como pode ser, ao mesmo tempo, mais pessoal e mais solidário? Pois é inconteste que esses dois movimentos, por mais contraditórios que pareçam, seguem-se paralelamente."

# podemos fazer várias substituições concatenadas, dentro de um vetor `c()`
# no padrão `regex = substituição`
stringr::str_replace_all(durkheim.DTS, 
                         c("indiv\\w+" = "indiv.",
                           "solid[aá]ri\\w+" = "solidar."
                           ))
## [1] "Quanto à questão que originou este trabalho, é a das relações entre a personalidade indiv. e a solidar. social. Como é que, ao mesmo passo que se torna mais autônomo, o indiv. depende mais intimamente da sociedade? Como pode ser, ao mesmo tempo, mais pessoal e mais solidar.? Pois é inconteste que esses dois movimentos, por mais contraditórios que pareçam, seguem-se paralelamente."

6.3.1 Normalização com stringr

Um problema ao lidar com tabelas pode ser a normalização. Por exemplo, ao pegar dados da saúde em uma tabela que quem preenche o formulário, digita por extenso ao invés de escolher a partir de uma lista pré-definida (como são os fatores) pode ocorrer isto aqui:

remedios <- read.table(header = T, text = '
  n remedio
  1 bogripe
  1 biozina
  1 bidioxicloquina
  1 betametasona
  1 bengripe
  1 benegripi
  1 benegripe
  1 BENEGRIPE
  1 benegripe
  1 Benegripe
  1 BENEFRIPE
  1 bena
  1 bemegripe')

Estes dados vieram da SRAG 2020, o banco de dados de Síndrome Respiratória aguda grave (salvo engano, na coluna OUT_ANTIV). Repare como um mesmo remédio está escrito de diferentes formas. Um modos de tentar padronizar esta variedade de nomes escritos de formas diferentes - mas não o único e não o mais indicado para este caso que tem muitas grafias diferentes, mas que é interessante em termos didáticos da ferramenta - é este a seguir. Podemos resolver isso com str_detect e dplyr::case_when

remedios %>% 
  dplyr::mutate(remedio_novo = dplyr::case_when(
                                      stringr::str_detect(
                                        remedio,"(?i)be[mn]egrip[ei]") ~ "Benegripe"))
##    n         remedio remedio_novo
## 1  1         bogripe         <NA>
## 2  1         biozina         <NA>
## 3  1 bidioxicloquina         <NA>
## 4  1    betametasona         <NA>
## 5  1        bengripe         <NA>
## 6  1       benegripi    Benegripe
## 7  1       benegripe    Benegripe
## 8  1       BENEGRIPE    Benegripe
## 9  1       benegripe    Benegripe
## 10 1       Benegripe    Benegripe
## 11 1       BENEFRIPE         <NA>
## 12 1            bena         <NA>
## 13 1       bemegripe    Benegripe
  • O símbolo (?i) indica que a busca é case insenitive, isto é, não distingue maiúsclas de minúsculas e vice versa.
  • Nosso padrão não detectou todos os casos, ficando para trás “bengripe” e “BENEFRIPE”.
  • case_when(stringr::str_detect( nos dá a condição, se certo padrão for encontrado, faça algo
  • "(?i)be[mn]egrip[ei]") o padrão a ser encontrado e ~ "Benegripe" diz qual valor será usado em substituição.
  • Por fim, a intenção do exemplo acima é mostrar a ferramenta. Mas no caso deste problema, uma abordagem mais adequada seria usar alguma medida de minimum edit distance (como a de Levenstein), onde teríamos uma lista com os nomes corretos e encontraríamos as palavras mais próximas na lista com nomes com grafia errada.

6.4 Dicas/Sugestões: Regex no R