Tirar maiuscula apos o ponto

Boa noite a todos Primeiro de tudo quero pedir desculpas por uma duvida tao basica considerem o seguinte exemplo: texto <- 'Deus abencoou Noe e seus filhos, e lhes disse: "Sede fecundos, multiplicai-vos, enchei a terra. Sede o medo e o pavor de todos os animais da terra e de todas as aves do ceu, como de tudo o que se move na terra e de todos os peixes do mar: eles sao entregues nas vossas maos. Tudo o que se move e possui a vida vos servira de alimento, tudo isso eu vos dou, como vos dei a verdura das plantas. Mas nao comereis a carne com sua alma, isto e, o sangue. Pedirei contas porem, do sangue de cada um de vos. Pedirei contas a todos os animais e ao homem, aos homens entre si, eu pedirei contas da alma do homem. Quem derrama o sangue do homem pelo homem terra seu sangue derramado. Pois a imagem de Deus o homem foi feito. Quanto a vos, sede fecundos, multiplicai-vos, povoai a terra e dominai-a." Agora desejo transformar as maiusculas apos o ponto em minusuclas, por exemplo: ". Sede o medo" em ". sede o medo" sei que posso fazer com gsub e pensei que gsub('. [A-Z]','. [a-z]',texto) seria suficiente, mas nao foi. Onde estou errando? Antecipadamente agradeco aos R-mestres []s Tura

A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar *\\.* no lugar Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0 Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes) 2014-03-22 21:28 GMT-03:00 Bernardo Rangel Tura <tura@centroin.com.br>:
Boa noite a todos
Primeiro de tudo quero pedir desculpas por uma duvida tao basica
considerem o seguinte exemplo:
texto <- 'Deus abencoou Noe e seus filhos, e lhes disse: "Sede fecundos, multiplicai-vos, enchei a terra. Sede o medo e o pavor de todos os animais da terra e de todas as aves do ceu, como de tudo o que se move na terra e de todos os peixes do mar: eles sao entregues nas vossas maos. Tudo o que se move e possui a vida vos servira de alimento, tudo isso eu vos dou, como vos dei a verdura das plantas. Mas nao comereis a carne com sua alma, isto e, o sangue. Pedirei contas porem, do sangue de cada um de vos. Pedirei contas a todos os animais e ao homem, aos homens entre si, eu pedirei contas da alma do homem. Quem derrama o sangue do homem pelo homem terra seu sangue derramado. Pois a imagem de Deus o homem foi feito. Quanto a vos, sede fecundos, multiplicai-vos, povoai a terra e dominai-a."
Agora desejo transformar as maiusculas apos o ponto em minusuclas, por exemplo: ". Sede o medo" em ". sede o medo"
sei que posso fazer com gsub e pensei que gsub('. [A-Z]','. [a-z]',texto) seria suficiente, mas nao foi.
Onde estou errando?
Antecipadamente agradeco aos R-mestres
[]s Tura
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

On 03/22/2014 09:54 PM, Rodrigo Coster wrote:
A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar *\\.* no lugar
Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0
Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes)
Rodrigo, Antes de tudo muito obrigado! Este sitio é muito interessante,gostei da dica. O que eu faço para resolver as palavras com acento é tirar os acentos tenho até uma rotina para isto ... Infelizmente ainda ocorre um erro: quando temos frases como "Sede fecundos, multiplicai-vos a rotina transforma em \"Sede fecundos, multiplicai-vos mas vou resolver retirando as aspas... Obrigado []s Tura

Saudações Rodrigo Coster, On Sat, Mar 22, 2014 at 09:54:35PM -0300, Rodrigo Coster wrote:
A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar \\. no lugar
Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0
Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes) Você pode usar algumas soluções para resolver este problema:
- Ao invés de usar "[A-Z]" como intervalo, usar a classe POSIX "[:upper:]". - Declarar explicitamente quais caracteres deseja modificar o caso. Exemplo: "[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]" - Usar a unicode property \p{Lu}. Todas essas soluções são bastante genéricas e podem apresentar efeitos colaterais dependendo do conteúdo de "texto". Um exemplo que já posso prever agora será quando "texto" tiver abreviações, "Dr. José ..." ficará como "Dr. josé ...". -- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------ http://tecnoveneno.blogspot.com

Sempre achei que [:upper:] e A-Z fossem equivalentes... valeu! 2014-03-23 12:31 GMT-03:00 jimmy <jimmy.tty@gmail.com>:
Saudações Rodrigo Coster,
On Sat, Mar 22, 2014 at 09:54:35PM -0300, Rodrigo Coster wrote:
A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar \\. no lugar
Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0
Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes) Você pode usar algumas soluções para resolver este problema:
- Ao invés de usar "[A-Z]" como intervalo, usar a classe POSIX "[:upper:]".
- Declarar explicitamente quais caracteres deseja modificar o caso. Exemplo: "[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]"
- Usar a unicode property \p{Lu}.
Todas essas soluções são bastante genéricas e podem apresentar efeitos colaterais dependendo do conteúdo de "texto". Um exemplo que já posso prever agora será quando "texto" tiver abreviações, "Dr. José ..." ficará como "Dr. josé ...".
-- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------ http://tecnoveneno.blogspot.com _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Se você usar o comando tolower(), Não, resolve o problema? tolower(texto) # Coloca todo texto em minúsculo. *Att,Gerson R. Primo Jr* Em 23 de março de 2014 15:30, Rodrigo Coster <rcoster@gmail.com> escreveu:
Sempre achei que [:upper:] e A-Z fossem equivalentes... valeu!
2014-03-23 12:31 GMT-03:00 jimmy <jimmy.tty@gmail.com>:
Saudações Rodrigo Coster,
On Sat, Mar 22, 2014 at 09:54:35PM -0300, Rodrigo Coster wrote:
A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar \\. no lugar
Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0
Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes) Você pode usar algumas soluções para resolver este problema:
- Ao invés de usar "[A-Z]" como intervalo, usar a classe POSIX "[:upper:]".
- Declarar explicitamente quais caracteres deseja modificar o caso. Exemplo: "[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]"
- Usar a unicode property \p{Lu}.
Todas essas soluções são bastante genéricas e podem apresentar efeitos colaterais dependendo do conteúdo de "texto". Um exemplo que já posso prever agora será quando "texto" tiver abreviações, "Dr. José ..." ficará como "Dr. josé ...".
-- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------ http://tecnoveneno.blogspot.com _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

On 03/24/2014 08:07 AM, Gerson R. Primo Jr wrote:
Se você usar o comando tolower(), Não, resolve o problema?
tolower(texto) # Coloca todo texto em minúsculo.
/Att, Gerson R. Primo Jr/*
Gerson Se fizer nomes próprios perderiam sua característica. Veja o texto: "O senhor José" se utilizar tolower fica "o senhor josé" e queremos "o senhor José" Entendeu? []s Tura

On 03/23/2014 12:31 PM, jimmy wrote:
Saudações Rodrigo Coster,
On Sat, Mar 22, 2014 at 09:54:35PM -0300, Rodrigo Coster wrote:
A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar \\. no lugar
Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0
Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes) Você pode usar algumas soluções para resolver este problema:
- Ao invés de usar "[A-Z]" como intervalo, usar a classe POSIX "[:upper:]".
- Declarar explicitamente quais caracteres deseja modificar o caso. Exemplo: "[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]"
- Usar a unicode property \p{Lu}.
Todas essas soluções são bastante genéricas e podem apresentar efeitos colaterais dependendo do conteúdo de "texto". Um exemplo que já posso prever agora será quando "texto" tiver abreviações, "Dr. José ..." ficará como "Dr. josé ...".
-- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------ http://tecnoveneno.blogspot.com
jimmy, Nesta caso a comando ficaria assim: gsub('(?<=\\. )([:upper:])', '\\L\\1', texto, perl =TRUE) Mas aqui não funcionou ... Onde está o meu erro ? []s Tura

eu ja' perdi o bonde ha' algum tempo, mas usaria algo como: gsub("(\\.\\s)(\\s*)([[:alpha:]])+", "\\1\\U\\3", texto, perl=TRUE) (onde "\\s*" e' so' p resolver casos de multiplos espacos apos o ponto final) b Em 24 de março de 2014 16:29, Bernardo Rangel Tura <tura@centroin.com.br>escreveu:
On 03/23/2014 12:31 PM, jimmy wrote:
Saudações Rodrigo Coster,
On Sat, Mar 22, 2014 at 09:54:35PM -0300, Rodrigo Coster wrote:
A tua expressão tem alguns problemas... A expressão ". [A-Z]" captura qualquer caractere (e não somente ponto), seguido por um espaço e uma letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto, precisa usar \\. no lugar
Segue uma solução: gsub('(?<=\\. )([A-Z])', '\\L\\1', texto, perl = TRUE) e a explicação em: http://regex101.com/r/xV7zE0
Único problema é que frases que iniciam com letras acentuadas não funciona (se alguém souber resolver, eu agradeço, pq isso me da uma baita dor de cabeça as vezes)
Você pode usar algumas soluções para resolver este problema:
- Ao invés de usar "[A-Z]" como intervalo, usar a classe POSIX "[:upper:]".
- Declarar explicitamente quais caracteres deseja modificar o caso. Exemplo: "[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]"
- Usar a unicode property \p{Lu}.
Todas essas soluções são bastante genéricas e podem apresentar efeitos colaterais dependendo do conteúdo de "texto". Um exemplo que já posso prever agora será quando "texto" tiver abreviações, "Dr. José ..." ficará como "Dr. josé ...".
-- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------ http://tecnoveneno.blogspot.com
jimmy,
Nesta caso a comando ficaria assim: gsub('(?<=\\. )([:upper:])', '\\L\\1', texto, perl =TRUE) Mas aqui não funcionou ... Onde está o meu erro ?
[]s Tura
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

On Mon, Mar 24, 2014 at 04:29:47PM -0300, Bernardo Rangel Tura wrote: [...]
jimmy,
Nesta caso a comando ficaria assim: gsub('(?<=\\. )([:upper:])', '\\L\\1', texto, perl =TRUE) Mas aqui não funcionou ... Onde está o meu erro ? O erro aí foi semântico. Uma classe posix também é uma lista e precisa ser declarada dentro dos colchetes, ficando '[[:upper:]]', assim:
gsub('(?<=\\. )([[:upper:]])', '\\L\\1', texto, perl = TRUE )
[]s Tura

On 03/24/2014 08:42 PM, jimmy wrote:
On Mon, Mar 24, 2014 at 04:29:47PM -0300, Bernardo Rangel Tura wrote: [...]
jimmy,
Nesta caso a comando ficaria assim: gsub('(?<=\\. )([:upper:])', '\\L\\1', texto, perl =TRUE) Mas aqui não funcionou ... Onde está o meu erro ? O erro aí foi semântico. Uma classe posix também é uma lista e precisa ser declarada dentro dos colchetes, ficando '[[:upper:]]', assim:
gsub('(?<=\\. )([[:upper:]])', '\\L\\1', texto, perl = TRUE )
Agora entendi ! Muito obrigado Jimmy. Porém ainda tem um problema neste exemplo, existe uma parte que deu erro: : "Sede fecundos, ficou : \"Sede fecundos Você sabe dizer porque? []s Tura

Bernado, note que ao escrever 'teste' no R, aparece "teste" (ele troca as aspas simples por dupla). Se o texto tem aspas dupla dentro ('teste "teste'), vai aparecer a \ antes dela para diferenciar aquela aspa - que faz parte do texto - das aspas que marcam inicio e fim dela. Mas isso é só no R, ao exportar para fora a \ (e as " do inicio e fim ) somem 2014-03-25 6:19 GMT-03:00 Bernardo Rangel Tura <tura@centroin.com.br>:
On 03/24/2014 08:42 PM, jimmy wrote:
On Mon, Mar 24, 2014 at 04:29:47PM -0300, Bernardo Rangel Tura wrote: [...]
jimmy,
Nesta caso a comando ficaria assim: gsub('(?<=\\. )([:upper:])', '\\L\\1', texto, perl =TRUE) Mas aqui não funcionou ... Onde está o meu erro ?
O erro aí foi semântico. Uma classe posix também é uma lista e precisa ser declarada dentro dos colchetes, ficando '[[:upper:]]', assim:
gsub('(?<=\\. )([[:upper:]])', '\\L\\1', texto, perl = TRUE )
Agora entendi ! Muito obrigado Jimmy.
Porém ainda tem um problema neste exemplo, existe uma parte que deu erro:
: "Sede fecundos,
ficou
: \"Sede fecundos
Você sabe dizer porque?
[]s Tura
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Bernado, Veja se isso ajuda. Basicamente, separamos o texto pelo '. ', transforma a primeira letra em minúsculo e depois concatena o texto novamente. ### texto <- unlist(strsplit('Deus abencoou Noe e seus filhos, e lhes disse: "Sede fecundos, multiplicai-vos, enchei a terra. Sede o medo e o pavor de todos os animais da terra e de todas as aves do ceu, como de tudo o que se move na terra e de todos os peixes do mar: eles sao entregues nas vossas maos. Tudo o que se move e possui a vida vos servira de alimento, tudo isso eu vos dou, como vos dei a verdura das plantas. Mas nao comereis a carne com sua alma, isto e, o sangue. Pedirei contas porem, do sangue de cada um de vos. Pedirei contas a todos os animais e ao homem, aos homens entre si, eu pedirei contas da alma do homem. Quem derrama o sangue do homem pelo homem terra seu sangue derramado. Pois a imagem de Deus o homem foi feito. Quanto a vos, sede fecundos, multiplicai-vos, povoai a terra e dominai-a.', ". ", fixed = TRUE)) substring(texto, 1) <- c(tolower(substring(texto, 1,1))) cat(texto, sep=". ") ### Aqui fica falho, quando depois do '.' vem um nome próprio. Abraços *Att,Gerson R. Primo Jr* Em 25 de março de 2014 08:48, Rodrigo Coster <rcoster@gmail.com> escreveu:
Bernado,
note que ao escrever 'teste' no R, aparece "teste" (ele troca as aspas simples por dupla). Se o texto tem aspas dupla dentro ('teste "teste'), vai aparecer a \ antes dela para diferenciar aquela aspa - que faz parte do texto - das aspas que marcam inicio e fim dela. Mas isso é só no R, ao exportar para fora a \ (e as " do inicio e fim ) somem
2014-03-25 6:19 GMT-03:00 Bernardo Rangel Tura <tura@centroin.com.br>:
On 03/24/2014 08:42 PM, jimmy wrote:
On Mon, Mar 24, 2014 at 04:29:47PM -0300, Bernardo Rangel Tura wrote: [...]
jimmy,
Nesta caso a comando ficaria assim: gsub('(?<=\\. )([:upper:])', '\\L\\1', texto, perl =TRUE) Mas aqui não funcionou ... Onde está o meu erro ?
O erro aí foi semântico. Uma classe posix também é uma lista e precisa ser declarada dentro dos colchetes, ficando '[[:upper:]]', assim:
gsub('(?<=\\. )([[:upper:]])', '\\L\\1', texto, perl = TRUE )
Agora entendi ! Muito obrigado Jimmy.
Porém ainda tem um problema neste exemplo, existe uma parte que deu erro:
: "Sede fecundos,
ficou
: \"Sede fecundos
Você sabe dizer porque?
[]s Tura
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Bernardo e colegas, boa noite! Eu tive sucesso da seguinte forma: texto2 <- 'Ação. Árvore, Èden, Texto. Ótimo, Excelente, Bom. È, Ççççç! ÇÇÇÇÇÇÇ. ÇÇÇÇÇÇ' gsub('(?<=\\. )(*[*[:upper:]*]*)', '\\L\\1', texto2, perl = TRUE) # [1] "Ação. árvore, Èden, Texto. ótimo, Excelente, Bom. è, Ççççç! ÇÇÇÇÇÇÇ.çÇÇÇÇÇ" Sys.getlocale() # [1] "LC_COLLATE=Portuguese_Brazil.1252;LC_CTYPE=Portuguese_Brazil.1252;LC_MONETARY=Portuguese_Brazil.1252;LC_NUMERIC=C;LC_TIME=Portuguese_Brazil.1252" Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
participantes (6)
-
Benilton Carvalho
-
Bernardo Rangel Tura
-
Gerson R. Primo Jr
-
jimmy
-
Rodrigo Coster
-
Éder Comunello