-
Notifications
You must be signed in to change notification settings - Fork 2
/
txt4cs.tex
2279 lines (1758 loc) · 103 KB
/
txt4cs.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor}
%
\documentclass[]{book}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provides euro and other symbols
\else % if luatex or xelatex
\usepackage{unicode-math}
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{
pdftitle={Text as Data para Ciências Sociais},
pdfauthor={Davi Moreira},
colorlinks=true,
linkcolor=Maroon,
filecolor=Maroon,
citecolor=Blue,
urlcolor=blue,
breaklinks=true}
\urlstyle{same} % don't use monospace font for urls
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\usepackage{framed}
\definecolor{shadecolor}{RGB}{248,248,248}
\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.94,0.16,0.16}{#1}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.77,0.63,0.00}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{0.64,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\usepackage{longtable,booktabs}
% Fix footnotes in tables (requires footnote package)
\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{}
\usepackage{graphicx,grffile}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{5}
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi
% set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother
\usepackage{booktabs}
\usepackage{etoolbox}
\makeatletter
\providecommand{\subtitle}[1]{% add subtitle to \maketitle
\apptocmd{\@title}{\par {\large #1 \par}}{}{}
}
\makeatother
\usepackage[]{natbib}
\bibliographystyle{apalike}
\title{\emph{Text as Data} para Ciências Sociais}
\providecommand{\subtitle}[1]{}
\subtitle{guia prático com aplicações}
\author{Davi Moreira}
\date{Criado em 02-08-2019. Atualizado em: 10-09-2020}
\begin{document}
\maketitle
{
\hypersetup{linkcolor=}
\setcounter{tocdepth}{1}
\tableofcontents
}
\hypertarget{prefuxe1cio}{%
\chapter*{Prefácio}\label{prefuxe1cio}}
\addcontentsline{toc}{chapter}{Prefácio}
\begin{center}\includegraphics{txt4cs_files/figure-latex/unnamed-chunk-1-1} \end{center}
A partir da produção de material para o curso \emph{Text as Data}: análise automatizada de conteúdo que ministrei no \href{http://www.fafich.ufmg.br/~mq/}{MQ-UFMG} em 2019 e no artigo que publiquei em coautoria com \href{http://lattes.cnpq.br/2546701843557096}{Maurício Izumi} \citep{izumi_o_2018}, esse livro tem como propósito difundir nas ciências sociais e humanidades técnicas e métodos de análise automatizada de conteúdo usando a linguagem \texttt{R}.
\hypertarget{objetivo}{%
\section*{Objetivo}\label{objetivo}}
\addcontentsline{toc}{section}{Objetivo}
O principal objetivo do livro é ser tutorial prático de uso e aplicação de técnicas e métodos de análise automatizada de conteúdo na língua portuguesa através da linguagem \texttt{R} .
\hypertarget{sobre-o-autororganizador}{%
\section*{Sobre o autor/organizador}\label{sobre-o-autororganizador}}
\addcontentsline{toc}{section}{Sobre o autor/organizador}
Davi Moreira é Professor Adjunto da Escola de Relações Internacionais da Fundação Getulio Vargas. Ph.D.~em Ciência Política pela Universidade de São Paulo (USP) e vencedor do Prêmio CAPES de tese 2017 na área de Ciência Política e Relações Internacionais. Atua nas seguintes áreas: políticas públicas, estudos legislativos, métodos quantitativos em ciências sociais e análise automatizada de conteúdo.
Para mais informações:
\begin{itemize}
\item
\href{https://davimoreira.com/}{Página pessoal}.
\item
\href{https://github.com/davi-moreira}{GitHub}
\item
\href{https://scholar.google.com.br/citations?hl=pt-BR\&user=dS9bbdMAAAAJ}{Google Scholar}.
\end{itemize}
\hypertarget{licenuxe7a}{%
\section*{Licença}\label{licenuxe7a}}
\addcontentsline{toc}{section}{Licença}
Este livro é distribuído de acordo com a licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (\href{https://creativecommons.org/licenses/by-nc-sa/4.0/}{CC BY-NC-SA 4.0}).
\hypertarget{agradecimentos}{%
\section*{Agradecimentos}\label{agradecimentos}}
\addcontentsline{toc}{section}{Agradecimentos}
Agradeço aos organizadores do MQ-UFMG 2019 pela oportunidade de ministrar o curso e assim me estimular a empreender esse projeto. Também agradeço aos amigos \href{https://sites.google.com/site/galdinomcz/}{Manoel Galdino}, \href{http://lattes.cnpq.br/8040086656965973}{Rafael Magalhães}, Lincon Ribeiro e \href{https://umbertomig.com/}{Umberto Mignozzetti} pelo apoio e incentivo ao longo de toda minha trajetória como cientista. Por fim, agradeço à fantástica cientista de dados \href{https://rdados.netlify.app/}{Mônica Rocabado}, sem a qual esse projeto continuaria na gaveta.
Este livro é escrito com o uso do pacote \textbf{bookdown} \citep{R-bookdown}, através do \texttt{R\ Markdown} e \textbf{knitr} \citep{xie2015}.
\hypertarget{intro}{%
\chapter{Introdução}\label{intro}}
\hypertarget{o-r-e-o-rstudio}{%
\section{\texorpdfstring{O \texttt{R} e o \texttt{RStudio}}{O R e o RStudio}}\label{o-r-e-o-rstudio}}
Com o objetivo de ser um tutorial prático de uso e aplicação de técnicas e métodos de análise automatizada de conteúdo para ciências sociais e humanidades este livro fará uso da linguagem \texttt{R}.
\texttt{R} é uma linguagem de programação e também um ambiente de desenvolvimento integrado
para cálculos estatísticos e gráficos. Ele pode ser facilmente instalado através do link: \url{https://cran.r-project.org/}.
Para auxiliar no desenvolvimento das análises, este livro incentiva o uso do \href{https://www.rstudio.com/}{RStudio}. Trata-se de um software livre de ambiente de desenvolvimento integrado (IDE) para o \texttt{R}\footnote{IDE, do inglês \emph{Integrated Development Environment}, é um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo.}.
De forma ilustrativa, o \texttt{R} e o \texttt{RStudio} operam como a figura abaixo:
\begin{center}\includegraphics{txt4cs_files/figure-latex/fig:rrstudio-1} \end{center}
Com o \texttt{RStudio}, você estará diante do seguinte dashboard:
\begin{center}\includegraphics{txt4cs_files/figure-latex/fig:rstudio-1} \end{center}
Se está começando a usar o \texttt{R} para análise de dados, recomendo o seguinte material:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
\href{https://r4ds.had.co.nz/}{R for Data Science};
\item
\href{https://moderndive.com/index.html}{Modern Dive - Statistical Inference via Data Science};
\item
\href{http://material.curso-r.com/rbase/}{Curso R};
\item
\href{http://electionsbr.com/livro/}{Usando R: Um Guia para Cientistas Políticos};
\end{enumerate}
Em caso de dúvidas, use e abuse de fóruns como o \href{https://stackoverflow.com/}{Stackoverflow}. Para aprimorar seu código e otimizar o desenvolvimento de suas análises, os guias de estilo do \href{https://google.github.io/styleguide/Rguide.xml}{Google} e do \href{http://adv-r.had.co.nz/Style.html}{RStudio} são ótimas referências.
\hypertarget{o-pacote-txt4cs-e-outros}{%
\section{\texorpdfstring{O Pacote \texttt{txt4cs} e outros}{O Pacote txt4cs e outros}}\label{o-pacote-txt4cs-e-outros}}
\begin{center}\includegraphics{txt4cs_files/figure-latex/unnamed-chunk-2-1} \end{center}
Este livro conta com o pacote \texttt{txt4cs}. Ele traz consigo funções específicas e bases de dados utilizadas nos exemplos apresentados. Um dos acervos de exemplo se refere ao conteúdo proferido em 17 de abril de 2016, dia de aprovação do impeachment da então Presidenta Dilma Rousseff na Câmara dos Deputados.
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-3-1}
}
\caption{Fonte: Empresa Brasil de Comunicação - EBC}\label{fig:unnamed-chunk-3}
\end{figure}
Para instalação, use os comandos abaixo:
\begin{Shaded}
\begin{Highlighting}[]
\ControlFlowTok{if}\NormalTok{(}\KeywordTok{require}\NormalTok{(devtools) }\OperatorTok{==}\StringTok{ }\NormalTok{F) }\KeywordTok{install.packages}\NormalTok{(}\StringTok{'devtools'}\NormalTok{); }\KeywordTok{require}\NormalTok{(devtools);}
\NormalTok{devtools}\OperatorTok{::}\KeywordTok{install_github}\NormalTok{(}\StringTok{"davi-moreira/txt4cs-pkg"}\NormalTok{)}
\KeywordTok{require}\NormalTok{(txt4cs)}
\end{Highlighting}
\end{Shaded}
Ademais, os seguintes pacotes são essenciais para o desenvolvimento da análise automatizada de conteúdo com o \texttt{R}. Conforme forem necessários, serão apresentados no livro.
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{install.packages}\NormalTok{(}\StringTok{"tidyverse"}\NormalTok{)}
\KeywordTok{install.packages}\NormalTok{(}\StringTok{"stringr"}\NormalTok{)}
\KeywordTok{install.packages}\NormalTok{(}\StringTok{"quanteda"}\NormalTok{)}
\KeywordTok{install.packages}\NormalTok{(}\StringTok{"readtext"}\NormalTok{)}
\KeywordTok{install.packages}\NormalTok{(}\StringTok{"stringi"}\NormalTok{)}
\KeywordTok{install.packages}\NormalTok{(}\StringTok{"tm"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}
\hypertarget{material-de-apoio}{%
\section{Material de apoio}\label{material-de-apoio}}
Este livro não é feito do zero e resulta de inspiração em diferentes fontes. As principais são:
\hypertarget{referuxeancias-para-processamento-de-sequuxeancias-de-caracteres-com-o-r}{%
\subsection{\texorpdfstring{Referências para processamento de sequências de caracteres com o \texttt{R}}{Referências para processamento de sequências de caracteres com o R}}\label{referuxeancias-para-processamento-de-sequuxeancias-de-caracteres-com-o-r}}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
\href{https://www.gastonsanchez.com/Handling_and_Processing_Strings_in_R.pdf}{Handling and Processing Strings in R} e \href{https://www.gastonsanchez.com/r4strings/}{Handling Strings with R}
\item
\href{http://en.wikibooks.org/wiki/R_Programming/Text_Processing}{R Wikibook: Programming and Text Processing}
\item
\href{https://journal.r-project.org/archive/2010-2/RJournal_2010-2_Wickham.pdf}{stringr: modern, consistent string
processing}
\end{enumerate}
\hypertarget{referuxeancias-em-anuxe1lise-de-conteuxfado-com-o-r}{%
\subsection{\texorpdfstring{Referências em análise de conteúdo com o \texttt{R}:}{Referências em análise de conteúdo com o R:}}\label{referuxeancias-em-anuxe1lise-de-conteuxfado-com-o-r}}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\href{https://tutorials.quanteda.io/}{Quanteta Tutorials}
\item
\href{https://www.tidytextmining.com/}{Text Mining with R}
\end{enumerate}
\hypertarget{tada}{%
\chapter{Text as data: o texto como dado}\label{tada}}
\hypertarget{panorama-da-uxe1rea}{%
\section{Panorama da área}\label{panorama-da-uxe1rea}}
A análise de conteúdo possui grande relevância para as ciências sociais. Contudo, sua abordagem manual sempre limitou o volume de documentos sob análise. São raros os projetos como o \href{https://manifestoproject.wzb.eu/}{\emph{Manifesto Research Group}} que, desde os anos 1970, analisa a ênfase temática de manifestos partidários ou o \href{http://www.comparativeagendas.net/}{\emph{Comparative Agendas Project}}, que coleta e analisa dados sobre agendas de políticas públicas em diferentes países.
O avanço tecnológico e científico permitiu que técnicas automatizadas de análise do conteúdo fossem desenvolvidas e aplicadas de forma simples a grandes acervos. Este avanço não foi realizado sem a contribuição das ciências sociais. Só a \href{https://www.cambridge.org/core/journals/political-analysis}{\emph{Political Analysis}}, principal revista de métodos em ciência política, possui dois \emph{special issues} dedicados ao tema (\href{https://www.cambridge.org/core/journals/political-analysis/article/introduction-to-the-special-issue-the-statistical-analysis-of-political-text/E3D4575845083A506B2177F3F1152100}{\emph{Special Issue}}, \href{https://www.cambridge.org/core/journals/political-analysis/issue/FF88EF06ABD5D421202E8284F67DE2F7}{\emph{Virtual Issue}}).
\hypertarget{oportunidades}{%
\section{Oportunidades}\label{oportunidades}}
Com o desenvolvimento de métodos para análise automatizada de conteúdo, hoje o leque de oportunidades as ciências sociais é diverso e promissor. Agora, é possível:
\begin{itemize}
\tightlist
\item
\textbf{Analisar grandes acervos} de forma ágil e barata, otimizando o trabalho do pesquisador.
\end{itemize}
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-5-1}
}
\caption{Biblioteca Florestan Fernandes - FFLCH - USP}\label{fig:unnamed-chunk-5}
\end{figure}
\begin{itemize}
\tightlist
\item
\textbf{Pesquisar novos acervos} para inferir o conteúdo presente e assim guiar pesquisas através de atalhos informacionais.
\end{itemize}
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-6-1}
}
\caption{Acervo da CIA: <https://www.cia.gov/library/readingroom/advanced-search-view>}\label{fig:unnamed-chunk-6}
\end{figure}
\begin{itemize}
\tightlist
\item
\textbf{Analisar processos políticos contemporâneos.}
\end{itemize}
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-7-1}
}
\caption{Trecho de fala do Deputado Federal Glauber Braga (PSOL-RJ) durante seu voto no processo de impeachment da então Presidenta da República Dilma Rousseff em 2016.}\label{fig:unnamed-chunk-7}
\end{figure}
\begin{itemize}
\tightlist
\item
\textbf{Redes sociais.}
\end{itemize}
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-8-1}
}
\caption{Foto de Pedro Ladeira, Folha de São Paulo, maio de 2019.}\label{fig:unnamed-chunk-8}
\end{figure}
\begin{itemize}
\tightlist
\item
\textbf{Fake news!}
\end{itemize}
\begin{center}\includegraphics{txt4cs_files/figure-latex/unnamed-chunk-9-1} \end{center}
\begin{itemize}
\tightlist
\item
\textbf{Olhar o passado com as lentes do presente}. Questões que antes não podiam ser enunciadas agora podem ser respondidas! Processos políticos conhecidos podem ganhar novas interpretações através do uso de métodos e técnicas contemporâneas de análise automatizada de conteúdo.
\end{itemize}
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-10-1}
}
\caption{Liberdade Guiando o Povo - Eugène Delacroix - 1830}\label{fig:unnamed-chunk-10}
\end{figure}
\begin{itemize}
\tightlist
\item
\textbf{Contribuir socialmente:} \href{http://retorica.labhackercd.leg.br/}{Retórica Parlamentar} - Projeto experimental desenvolvido no primeiro Hackathon da Câmara dos Deputados em 2013 por Davi Moreira, Manoel Galdino e Luis Carli. Posteriormente incubado pelo Laboratório Hacker da Câmara dos Deputados.
\end{itemize}
\begin{center}\includegraphics{txt4cs_files/figure-latex/unnamed-chunk-11-1} \end{center}
\hypertarget{quadro-geral-de-metodologias}{%
\section{Quadro geral de metodologias}\label{quadro-geral-de-metodologias}}
Dada a complexidade da linguagem, o processo de geração, produção e seleção de dados que resultam na comunicação humana é ainda um mistério para a ciência \citep{izumi_o_2018, grimmer_text_2013}. Logo, modelos estatísticos desenvolvidos falham na tarefa de prover um relato preciso do processo de geração de dados utilizados na produção de conteúdo e, principalmente, em seu significado.
Os modelos de análise de conteúdo, portanto, não devem ser avaliados pelo quanto explicam do processo de geração dos dados. Transformar palavras em números não substitui a leitura cuidadosa e atenta de documentos. Reconhecendo que ``métodos de análise automatizada de conteúdo são modelos incorretos de linguagem'' \citep[p.~2]{grimmer_text_2013}, a performance de qualquer método automatizado não é garantida sem a consideração de ao menos quatro princípios:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
Todos os modelos quantitativos de análise de conteúdo estão errados, mas alguns são úteis;
\item
Métodos quantitativos de análise de conteúdo amplificam a capacidade humana, mas não a substitui;
\item
Não há um método global para a análise automatizada de conteúdo;
\item
Validar, validar, validar.
\end{enumerate}
A escolha do modelo, da família de modelos ou de eventuais combinações a serem utilizadas é resultado dos objetivos almejados. Há uma variedade de modelos disponíveis e nenhum deles se sobrepõe aos demais.
Além de estatísticas e outras informações que podem ser obtidas através da mineração do texto enquanto dados, nesse livro será dado foco aos métodods de escalonamento e classificação de conteúdo. Assim, como indicado pelo quadro de Grimmer e Stewart \citeyearpar{grimmer_text_2013} métodos de análise supervisionada e não supervisionada serão abordados.
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-12-1}
}
\caption{Quadro geral de metodologias para análise automatizada de conteúdo (Grimmer e Stewart, 2013)}\label{fig:unnamed-chunk-12}
\end{figure}
\hypertarget{o-processo-de-anuxe1lise-do-texto-como-dado}{%
\section{O processo de análise do texto como dado}\label{o-processo-de-anuxe1lise-do-texto-como-dado}}
O processo de trabalho para análise quantitativa de texto é muito similar a qualquer tipo de fluxo de trabalho para análise de dados em geral. Como indicado no livro \href{https://www.tidytextmining.com/topicmodeling.html}{Text Mining with R: a tidy approach} \citep{silge_text_2017}, o seguinte fluxograma será adotado nesse livro:
\begin{figure}
{\centering \includegraphics{txt4cs_files/figure-latex/unnamed-chunk-13-1}
}
\caption{Fonte: Text Mining with R}\label{fig:unnamed-chunk-13}
\end{figure}
\hypertarget{regex}{%
\chapter{R e o Processamento de Linguagem Natural}\label{regex}}
O \href{https://en.wikipedia.org/wiki/Natural_language_processing}{processamento de linguagem natural (NLP)} é um subcampo da ciência da computação relacionado às interações entre computadores e a linguagem humana. O \texttt{R} dispõe de uma \href{https://cran.r-project.org/web/views/NaturalLanguageProcessing.html}{série de pacotes} dedicados a essa área e apresenta grande potencial ao conectar o processamento de linguagem natural a todo seu arcabouço de pacotes estatísticos\footnote{Este capítulo tem inspiração nesse \href{https://en.wikibooks.org/wiki/R_Programming/Text_Processing}{Wikibook}.}.
\hypertarget{encoding---codificauxe7uxe3o-de-caracteres}{%
\section{Encoding - Codificação de caracteres}\label{encoding---codificauxe7uxe3o-de-caracteres}}
Um repertório de caracteres é representado por algum tipo de sistema de codificação ( \href{https://en.wikipedia.org/wiki/Character_encoding\#cite_note-1}{Wiki} ). Exemplo comum de sistema de codificação é o código Morse que codifica as letras do alfabeto latino e os numerais como sequências de pulsos elétricos de longa e curta duração. Outro exemplo é o sistema de codificação \href{https://en.wikipedia.org/wiki/UTF-8}{UTF-8}, capaz de codificar todos os 1.112.064 pontos de código válidos em Unicode usando até 8 bits.
O \texttt{R} fornece funções para lidar com diferentes sistemas de codificação. Isso é útil se você lida com arquivos de texto que foram criados com outro sistema operacional e especialmente se o idioma não for o inglês e tiver muitos acentos e caracteres específicos. Por exemplo, o esquema de codificação padrão no Linux é \href{https://en.wikipedia.org/wiki/UTF-8}{UTF-8}, enquanto o esquema de codificação padrão no Windows é \href{https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)}{Latin1}.
A função \texttt{Encoding()} retorna a codificação de uma sequência de caracteres. Por sua vez, a função \texttt{iconv()} é usado para converter a codificação. Vejamos um exemplo de identificação do encoding de uma sequência de caracteres:
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{chr <-}\StringTok{ "olê, olê, olê, olá, Lula, Lula"}
\KeywordTok{Encoding}\NormalTok{(chr) <-}\StringTok{ "UTF-8"}
\KeywordTok{Encoding}\NormalTok{(chr)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "UTF-8"
\end{verbatim}
Utilizando o resultado do código do bloco acima, vamos agora converter o sistema de codificação para \href{https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)}{Latin1}:
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{chr <-}\StringTok{ }\KeywordTok{iconv}\NormalTok{(chr, }\DataTypeTok{from =} \StringTok{"UTF-8"}\NormalTok{, }\DataTypeTok{to =} \StringTok{"latin1"}\NormalTok{)}
\KeywordTok{Encoding}\NormalTok{(chr)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "latin1"
\end{verbatim}
Para conhecer a lista de sistemas de codificação de seu computador, use a função \texttt{iconvlist()}.
\hypertarget{encoding-para-remover-acentos}{%
\section{Encoding para remover acentos}\label{encoding-para-remover-acentos}}
Conhecer o sistema de codificação e como utilizá-lo é útil se você lida com arquivos de texto criados com outro sistema operacional e/ou em idiomas que utilizam acentos e caracteres específicos. A depender da análise que deseja fazer, pode ser do seu interesse remover os acentos de uma sequência de caracteres. Nesse caso, vejamos um exemplo com o uso do pacote \texttt{stringi}:
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{library}\NormalTok{(stringi)}
\NormalTok{chr <-}\StringTok{ "olê, olê, olê, olá, Lula, Lula"}
\KeywordTok{stri_trans_general}\NormalTok{(chr, }\StringTok{"Latin-ASCII"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "ole, ole, ole, ola, Lula, Lula"
\end{verbatim}
No exemplo acima, removemos os acentos da sequência de caracteres utilizando o
American Standard Code for Information Interchange - \href{https://en.wikipedia.org/wiki/ASCII}{ASCII}.
Se desejar uma solução caseira, o pacote \texttt{txt4cs}, que acompanha o livro, possui a função \texttt{remove\_accent()}. Abaixo a sua aplicação:
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{library}\NormalTok{(txt4cs)}
\NormalTok{chr <-}\StringTok{ "olê, olê, olê, olá, Lula, Lula"}
\KeywordTok{remove_accent}\NormalTok{(chr)}
\end{Highlighting}
\end{Shaded}
\hypertarget{stringR}{%
\chapter{\texorpdfstring{Strings no \texttt{R}}{Strings no R}}\label{stringR}}
Na ciência da computação chamamos uma sequência de caracteres de \texttt{string}. Para
o desenvolvimento de análises automatizadas de conteúdo, é necessário saber como processar esse tipo especial de dado (o texto como dado)\footnote{Esse capítulo do material é inspirado no livro \href{https://www.gastonsanchez.com/r4strings/}{Handling Strings with R}}. Nesse sentido, três coisas são importantes de serem lembradas aqui:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
Computadores não interpretam letras. No limite, todos os caracteres são transformados em sequências compostas por zeros e uns. Logo, é através de padrões que caracteres são interpretados e os computadores armazenam os dados que retornam a nossos olhos.
\item
Programar é escrever! Não é à toa que chamamos as formas de escrita em programação de linguagens de programação. Nesse livro, por exemplo, usamos a linguagem \texttt{R}. Sabendo disso, o desafio de se trabalhar com o texto como dado é o desafio de fazer com que o computador diferencie \texttt{código\ escrito} do \texttt{"texto\ como\ dado"} que ele precisará processar de acordo com os interesses do analista.
\item
Como nós brasileiros lemos, o código e texto é processado pelo computador no seguinte sentido: da esquerda para a direita e de cima para baixo. Logo, ao desenvolver seu \texttt{script} é importante ter atenção em relação à ordem de escrita para que o computador possa desempenhar corretamente suas tarefas.
\end{enumerate}
É possível utilizar toda a versatilidade de estruturas de dados no \texttt{R} (vetores, matrizes, listas, data.frame, etc.) para processar sequências de caracteres. Como trabalhar com \texttt{strings} no \texttt{R}, portanto?
\hypertarget{strings-e-vetores}{%
\section{Strings e vetores}\label{strings-e-vetores}}
Para declarar uma string, utilizamos aspas simples \texttt{\textquotesingle{}} ou aspas dupla ""``. Vejamos o caso dos dois vetores abaixo, ambos recebendo a letra''a".
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Vetores de caracteres }
\NormalTok{caracter1 <-}\StringTok{ "a"}
\NormalTok{caracter2 <-}\StringTok{ 'A'}
\KeywordTok{class}\NormalTok{(caracter1)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "character"
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{class}\NormalTok{(caracter2)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "character"
\end{verbatim}
Ambos são da classe \texttt{character}.
\hypertarget{o-r-uxe9-case-sensitive}{%
\subsection{\texorpdfstring{O \texttt{R} é case sensitive}{O R é case sensitive}}\label{o-r-uxe9-case-sensitive}}
O \texttt{R} diferencia letras maiúsculas de letras minúsculas. Se compararmos os dois objetos criados acima, temos:
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{caracter1 }\OperatorTok{==}\StringTok{ }\NormalTok{caracter2}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] FALSE
\end{verbatim}
\hypertarget{sequuxeancias-de-caracteres}{%
\subsection{Sequências de caracteres}\label{sequuxeancias-de-caracteres}}
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# string}
\NormalTok{txt <-}\StringTok{ "uma string é uma sequência de caracteres"}
\NormalTok{txt <-}\StringTok{ 'também pode ser utilizada com aspas simples'}
\NormalTok{txt <-}\StringTok{ "no caso de aspas dupla, usa-se 'aspas simples' na string"}
\NormalTok{txt <-}\StringTok{ 'no caso de aspas simples, usa-se "aspas dupla" na string'}
\end{Highlighting}
\end{Shaded}
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{txt <-}\StringTok{ "para usar }\CharTok{\textbackslash{}"}\StringTok{aspas dupla}\CharTok{\textbackslash{}"}\StringTok{ na string é necessário usar }\CharTok{\textbackslash{}\textbackslash{}}\StringTok{"}
\KeywordTok{cat}\NormalTok{(txt) }
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## para usar "aspas dupla" na string é necessário usar \
\end{verbatim}
O \texttt{R} armazena a sequência de caracteres conforme ela é apresentada. Porém, é possível fazer uso de caracteres especiais para que o computador interprete e apresente o texto de forma adequada. Como vimos acima, o objeto \texttt{txt} armazena a string conforme foi redigida, mas com o uso da função \texttt{cat()} podemos apresentá-lo de forma adequada. Perceba a diferença entre o resultado e a sequência de caracteres que, de fato, foi armazenada no objeto \texttt{txt}.
\hypertarget{operauxe7uxf5es-buxe1sicas-com-vetores-de-strings}{%
\subsection{Operações básicas com vetores de strings}\label{operauxe7uxf5es-buxe1sicas-com-vetores-de-strings}}
É possível declarar um vetor de caracteres vazio.
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# vetor de caracteres com 5 strings vazias}
\NormalTok{palmeiras <-}\StringTok{ }\KeywordTok{character}\NormalTok{(}\DecValTok{5}\NormalTok{)}
\NormalTok{palmeiras}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "" "" "" "" ""
\end{verbatim}
Vejamos seu tamanho:
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{length}\NormalTok{(palmeiras) }\CommentTok{# verificando o tamanho do vetor}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] 5
\end{verbatim}
Vemos que o objeto \texttt{palmeiras} possui 5 elementos, todos sem qualquer conteúdo, mas da classe \texttt{character}.
Será que é possível inserir conteúdo em elementos específicos do vetor? Vejamos:
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# incluindo string no primeiro e terceiro elementos do vetor}
\NormalTok{palmeiras[}\DecValTok{1}\NormalTok{] <-}\StringTok{ "Quando surge o alviverde imponente"}
\NormalTok{palmeiras[}\DecValTok{3}\NormalTok{] <-}\StringTok{ "Sabe bem o que vem pela frente"}
\NormalTok{palmeiras}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "Quando surge o alviverde imponente" ""
## [3] "Sabe bem o que vem pela frente" ""
## [5] ""
\end{verbatim}
Ótimo! Significa que podemos ter um vetor no com o \href{http://www.palmeiras.com.br/historia/hino}{Hino do Palmeiras}, sendo cada um de seus elementos um verso dessa bela poesia.
E seria possível ter um vetor cujos elementos fossem os hinos (sequências de caracteres/strings) de todos os times do país? Sim!
\hypertarget{atenuxe7uxe3o}{%
\subsubsection{Atenção}\label{atenuxe7uxe3o}}
Um vetor com uma string vazia é diferente de um vetor sem strings
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Atenção:}
\NormalTok{str_vazia <-}\StringTok{ ""} \CommentTok{# string vazia}
\NormalTok{char_vazio <-}\StringTok{ }\KeywordTok{character}\NormalTok{(}\DecValTok{0}\NormalTok{) }\CommentTok{# caracter vazio}
\KeywordTok{length}\NormalTok{(str_vazia)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] 1
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{length}\NormalTok{(char_vazio)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] 0
\end{verbatim}
\hypertarget{caracteres-e-outros-tipos-de-dados}{%
\subsection{Caracteres e outros tipos de dados}\label{caracteres-e-outros-tipos-de-dados}}
É importante saber como o \texttt{R} processa o texto como dado (\texttt{character}) em conjunto com outros formatos.
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{frase <-}\StringTok{ "Campeonatos Brasileiros vencidos pelo Palmeiras."}
\KeywordTok{is.numeric}\NormalTok{(frase)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] FALSE
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{is.character}\NormalTok{(frase)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] TRUE
\end{verbatim}
Acima verificamos que a classe do objeto \texttt{frase} é de tipo \texttt{character}.
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{quantidade <-}\StringTok{ }\DecValTok{5} \OperatorTok{+}\StringTok{ }\DecValTok{5}
\NormalTok{quantidade}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] 10
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{is.numeric}\NormalTok{(quantidade)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] TRUE
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{is.character}\NormalTok{(quantidade)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] FALSE
\end{verbatim}
Acima verificamos que a classe do objeto \texttt{quantidade} é de tipo \texttt{numeric}. Seria possível converter de um tipo para outro?
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# convertendo quantidade}
\NormalTok{quantidade <-}\StringTok{ }\KeywordTok{as.character}\NormalTok{(quantidade)}
\NormalTok{quantidade}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "10"
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{is.character}\NormalTok{(quantidade)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] TRUE
\end{verbatim}
Sim! Veja que agora o valor 10 aparece entre aspas, pois o objeto \texttt{quantidade} foi convertido para a classe \texttt{character}.
E se um vetor possuir números e caracteres em diferentes elementos, como o \texttt{R} interpreta a classe desse vetor?
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# vetor com números e strings}
\NormalTok{brasileiros <-}\StringTok{ }\KeywordTok{c}\NormalTok{(}\DecValTok{10}\NormalTok{, }\StringTok{"Campeonatos Brasileiros vencidos pelo Palmeiras."}\NormalTok{)}
\NormalTok{brasileiros}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "10"
## [2] "Campeonatos Brasileiros vencidos pelo Palmeiras."
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{class}\NormalTok{(brasileiros)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "character"
\end{verbatim}
Perceba que o vetor é declarado com o número 10 no primeiro elemento e uma string no segundo elemento. Contudo, o \texttt{R} adota um critério de coerção de dados para que o vetor seja da classe \texttt{character}. Por isso, o número 10 é automaticamente convertido como caracter.
O R segue duas regras básicas de coerção de tipos de dados:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
Se uma cadeia de caracteres estiver presente em um vetor, todo o resto do vetor será convertido em cadeias de caracteres.
\item
Se um vetor tiver apenas elementos lógicos e números, os elementos lógicos serão convertidos em números; Valores TRUE se tornam 1 e os valores FALSE se tornam 0.
\end{enumerate}
\hypertarget{strings-e-matrizes}{%
\section{Strings e matrizes}\label{strings-e-matrizes}}
No \texttt{R} matrizes são estruturas de dados que suportam apenas um tipo de classe de dados. Logo, assim como no caso do vetor visto anteriormente, ao constatar a presenção de alguma entrada de classe \texttt{character} automaticamente todos os elementos da matriz são convertidos.
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Matrizes ----}
\NormalTok{m <-}\StringTok{ }\KeywordTok{rbind}\NormalTok{(}\KeywordTok{c}\NormalTok{(}\DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{), letters[}\DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{])}
\NormalTok{m}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [,1] [,2] [,3] [,4] [,5]
## [1,] "1" "2" "3" "4" "5"
## [2,] "a" "b" "c" "d" "e"
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{class}\NormalTok{(m)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "matrix"
\end{verbatim}
\hypertarget{strings-e-data.frames}{%
\section{Strings e data.frames}\label{strings-e-data.frames}}
\texttt{data.frames} são as estruturas de dados mais utilizadas no \texttt{R}. Sua versatilidade permite ter no mesmo objeto dados de classes diferentes num formato de matriz (matriz de dados). Vejamos:
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Data Frames ----}
\NormalTok{df1 <-}\StringTok{ }\KeywordTok{data.frame}\NormalTok{(}\DataTypeTok{numeros =} \DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{, }\DataTypeTok{letras =}\NormalTok{ letters[}\DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{])}
\KeywordTok{str}\NormalTok{(df1)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## 'data.frame': 5 obs. of 2 variables:
## $ numeros: int 1 2 3 4 5
## $ letras : Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
\end{verbatim}
Como padrão da função \texttt{data.frame()} strings são transformadas em fatores. Para manter strings como caracteres deve-se usar o argumento: \texttt{stringsAsFactors\ =\ FALSE}.
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{df1 <-}\StringTok{ }\KeywordTok{data.frame}\NormalTok{(}\DataTypeTok{numeros =} \DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{, }\DataTypeTok{letras =}\NormalTok{ letters[}\DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{], }\DataTypeTok{stringsAsFactors =} \OtherTok{FALSE}\NormalTok{)}
\KeywordTok{str}\NormalTok{(df1)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## 'data.frame': 5 obs. of 2 variables:
## $ numeros: int 1 2 3 4 5
## $ letras : chr "a" "b" "c" "d" ...
\end{verbatim}
\hypertarget{strings-e-listas}{%
\section{Strings e listas}\label{strings-e-listas}}
Das estruturas de objetos mais populares no \texttt{R}, listas são as mais complexas. Sua grande vantagem em relação às demais estruturas é permitir uma organização hierárquica dos dados independente de sua classe e tamanho. Vejamos um exemplo:
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# Listas ----}
\CommentTok{# listas contemplam qualquer tipo de estrutura de dados}
\NormalTok{ls <-}\StringTok{ }\KeywordTok{list}\NormalTok{(}\DecValTok{1}\OperatorTok{:}\DecValTok{10}\NormalTok{, letters[}\DecValTok{1}\OperatorTok{:}\DecValTok{5}\NormalTok{], }\KeywordTok{rnorm}\NormalTok{(}\DecValTok{5}\NormalTok{), m)}
\NormalTok{ls}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
##
## [[2]]
## [1] "a" "b" "c" "d" "e"
##
## [[3]]
## [1] -1.80469336 0.01645178 0.98916708 0.33331719 -0.37837248
##
## [[4]]
## [,1] [,2] [,3] [,4] [,5]
## [1,] "1" "2" "3" "4" "5"
## [2,] "a" "b" "c" "d" "e"
\end{verbatim}
No exemplo acima, o objeto \texttt{ls} é composto por quatro elementos que contêm, cada um, diferentes tamanhos e diferentes estruturas de dados.
\hypertarget{processamento-buxe1sico}{%
\section{Processamento básico}\label{processamento-buxe1sico}}
\hypertarget{contando-caracteres}{%
\subsection{Contando caracteres}\label{contando-caracteres}}
A função \texttt{nchar()} é um forma ágil e fácil de se obter o número de caracteres de uma string ou de strings de um vetor.
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{nchar}\NormalTok{(}\KeywordTok{c}\NormalTok{(}\StringTok{"Quantos"}\NormalTok{, }\StringTok{"caracteres?"}\NormalTok{))}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] 7 11
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{nchar}\NormalTok{(}\StringTok{"Quantos caracteres?"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] 19
\end{verbatim}
No exemplo acima, perceba que a função contabiliza o espaço entre palavras como caracter. Por isso, a soma do total de caracteres do primeiro caso (\(7 + 11 = 18\) caracteres) não é igual ao total de caracteres do segundo (\(19\) caracteres).
\hypertarget{toupper-tolower}{%
\subsection{\texorpdfstring{\texttt{toupper()}, \texttt{tolower()}}{toupper(), tolower()}}\label{toupper-tolower}}
Sendo o \texttt{R} \emph{case sensitive}, para o processamento do texto como dado, pode ser de interesse do pesquisador harmonizar o conteúdo sob análise com o objetivo de ter todos os caracteres em formato maiúsculo ou minúsculo. As funções \texttt{toupper()} e \texttt{tolower()} desempenham bem esse papel.
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{tolower}\NormalTok{(}\KeywordTok{c}\NormalTok{(}\StringTok{"TUdo eM MinúsCuLA", "}\NormalTok{ABCDE}\StringTok{"))}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "tudo em minúscula" "abcde"
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{toupper}\NormalTok{(}\KeywordTok{c}\NormalTok{(}\StringTok{"TUdo eM mAiúsCula", "}\NormalTok{ABCDE}\StringTok{"))}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "TUDO EM MAIÚSCULA" "ABCDE"
\end{verbatim}
\hypertarget{recortando-strings-substr-substring.}{%
\subsubsection{\texorpdfstring{Recortando strings: \texttt{substr()}, \texttt{substring()}.}{Recortando strings: substr(), substring().}}\label{recortando-strings-substr-substring.}}
Para o processamento do texto como dado, também pode ser de interesse do pesquisador a seleção de trechos de uma sequência de caracteres. Isso pode ser facilmente feito com as funções \texttt{substr()} e \texttt{substring()} indicando como parâmetros a posição nas quais a string deve ser recortada.
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{substr}\NormalTok{(}\StringTok{"O Palmeiras é o time da virada, o Palmeiras é o time do amor."}\NormalTok{, }\DecValTok{1}\NormalTok{, }\DecValTok{30}\NormalTok{)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "O Palmeiras é o time da virada"
\end{verbatim}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{substring}\NormalTok{(}\StringTok{"O Palmeiras é o time da virada, o Palmeiras é o time do amor."}\NormalTok{, }\DecValTok{33}\NormalTok{, }\DecValTok{60}\NormalTok{)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "o Palmeiras é o time do amor"
\end{verbatim}
\hypertarget{uniuxe3o-intersecuxe7uxe3o-diferenuxe7a-igualdade}{%
\subsubsection{União, Intersecção, Diferença, Igualdade}\label{uniuxe3o-intersecuxe7uxe3o-diferenuxe7a-igualdade}}
Operações com vetores de forma geral podem ser aplicadas a vetores com strings. Podemos, por exemplo, unir diferentes vetores.
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{# União }
\NormalTok{vec1 <-}\StringTok{ }\KeywordTok{c}\NormalTok{(}\StringTok{"algumas"}\NormalTok{, }\StringTok{"palavras"}\NormalTok{, }\StringTok{"aleatória", "}\NormalTok{aqui}\StringTok{")}
\StringTok{vec2 <- c("}\NormalTok{e}\StringTok{", "}\NormalTok{algumas}\StringTok{", "}\NormalTok{palavras}\StringTok{", "}\NormalTok{ali}\StringTok{")}
\StringTok{union(vec1, vec2)}
\end{Highlighting}
\end{Shaded}
\begin{verbatim}
## [1] "algumas" "palavras" "aleatória" "aqui" "e" "ali"
\end{verbatim}
Verificar a intersecção entre dois vetores.