{"id":16578877,"url":"https://github.com/chainsawriot/automatedcontentanalysis","last_synced_at":"2026-02-14T21:02:03.550Z","repository":{"id":146232906,"uuid":"235125552","full_name":"chainsawriot/automatedcontentanalysis","owner":"chainsawriot","description":"Write a paragraph everyday, you have a book in a year. Write a tweet everyday, you have mental illnesses in a year.","archived":false,"fork":false,"pushed_at":"2022-01-02T13:49:34.000Z","size":4058,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-08T19:03:59.586Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.automatedcontentanalysis.com","language":"TeX","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chainsawriot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-20T14:51:23.000Z","updated_at":"2024-07-09T01:59:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"a0a599b1-ceaf-4b7a-8c38-7d53cc2f2a9e","html_url":"https://github.com/chainsawriot/automatedcontentanalysis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chainsawriot/automatedcontentanalysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chainsawriot%2Fautomatedcontentanalysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chainsawriot%2Fautomatedcontentanalysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chainsawriot%2Fautomatedcontentanalysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chainsawriot%2Fautomatedcontentanalysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chainsawriot","download_url":"https://codeload.github.com/chainsawriot/automatedcontentanalysis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chainsawriot%2Fautomatedcontentanalysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29455597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T15:52:44.973Z","status":"ssl_error","status_checked_at":"2026-02-14T15:52:11.208Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T22:16:02.050Z","updated_at":"2026-02-14T21:02:03.531Z","avatar_url":"https://github.com/chainsawriot.png","language":"TeX","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Automated Content Analysis\n\nA book project by Dr. Chung-hong Chan\n(\\[@chainsawriot\\](\u003chttps://github.com/chainsawriot\u003e))\n\nMake Automated Content Analysis uncool again\\! No more hype\\!\n\nComing soon\\!\n\n# Introduction\n\nWhen I was a high-school student, biology was my favourite subject. My\nbigger brother used the same textbook in a outline edition and thus I\ndidn’t need to buy it. Meanwhile my classmates were using the newer\nedition, I enjoyed reading the old edition from my brother. That book\nhad over 1000 pages and was completely in black and white. Students and\nteachers alike spotted me reading that book almost all the time at the\ncorner of the spectator stand.\n\n# A Whole game\n\nWe are going to use an example to illustrate the whole process of a\ntypical automated content analysis scenario. In this example, we start\nwith a simple research question or hypothesis. Let’s say I want to\nreproduce a very famous analysis of Donald Trump’s tweets. This example\nis very well-known in the data science scene, probably because one of\nthe authors of the tidytext package used this example to demonstrate the\npower of his package (and made him on the television). The research\nquestion is very simple: are tweets from Donald Trump’s twitter account\ntweeted using an iPhone less angry than those tweeted using an Android\nphone?\n\nThere are many elements to unpack in the above paragraph. The utmost\nimportant issue is that, all automated content analysis project should\nhave hypotheses to test or research questions to answer. If a project\nwithout hypotheses or research questions, it can hardly be called\nautomated content analysis (see Chapter 2 for longer discussion). Then\nwe can think of the context we are interested to analyze (Donald Trump\nand his Twitter), operationalization of variables (what is angry?), data\ncollection plan and data analysis strategy.\n\nIn this book, however, we are not going to focus on 1) how to form\nhypotheses or research questions and 2) how to collect your (text) data.\nThe reason for excluding the former is that, it needs to be supported by\ncommunication theories. As a book that is intented as an research\nmethods book, it is an off-shoot. For the latter, the exclusion of it is\ndue to the fact that there are good papers and textbooks available. The\nbook chapter by Liang \u0026 Zhu (2017) is probably a good start. Simon\nMunzert et al (2015) ’s Automated Data collection is an indepth manual.\n\nIn the companion website of this book, you can find the tweets from\nDonald Trump’s tweet account before he assumes duty as the president of\nthe United States. The data looks like this:\n\n``` r\nrequire(tidyverse)\n```\n\n    ## Loading required package: tidyverse\n\n    ## ── Attaching packages ────────────────────────────────── tidyverse 1.2.1 ──\n\n    ## ✔ ggplot2 3.2.1     ✔ purrr   0.3.3\n    ## ✔ tibble  2.1.3     ✔ dplyr   0.8.3\n    ## ✔ tidyr   0.8.3     ✔ stringr 1.4.0\n    ## ✔ readr   1.3.1     ✔ forcats 0.4.0\n\n    ## ── Conflicts ───────────────────────────────────── tidyverse_conflicts() ──\n    ## ✖ dplyr::filter() masks stats::filter()\n    ## ✖ dplyr::lag()    masks stats::lag()\n\n``` r\nrequire(quanteda)\n```\n\n    ## Loading required package: quanteda\n\n    ## Package version: 1.5.2\n\n    ## Parallel computing: 2 of 4 threads used.\n\n    ## See https://quanteda.io for tutorials and examples.\n\n    ## \n    ## Attaching package: 'quanteda'\n\n    ## The following object is masked from 'package:utils':\n    ## \n    ##     View\n\n``` r\nrequire(rio)\n```\n\n    ## Loading required package: rio\n\n    ## \n    ## Attaching package: 'rio'\n\n    ## The following object is masked from 'package:quanteda':\n    ## \n    ##     convert\n\n``` r\nrequire(lubridate)\n```\n\n    ## Loading required package: lubridate\n\n    ## \n    ## Attaching package: 'lubridate'\n\n    ## The following object is masked from 'package:base':\n    ## \n    ##     date\n\n``` r\ntrump_tweets \u003c- import('./data/trump.json') %\u003e% as_tibble\ntrump_tweets\n```\n\n    ## # A tibble: 17,936 x 7\n    ##    source  text   created_at retweet_count favorite_count is_retweet id_str\n    ##    \u003cchr\u003e   \u003cchr\u003e  \u003cchr\u003e              \u003cint\u003e          \u003cint\u003e \u003clgl\u003e      \u003cchr\u003e \n    ##  1 Twitte… Heads… Mon Dec 3…         20519          74566 FALSE      10798…\n    ##  2 Twitte… ....S… Mon Dec 3…         17027          63013 FALSE      10798…\n    ##  3 Twitte… It’s … Mon Dec 3…         29355         125931 FALSE      10797…\n    ##  4 Twitte… I’m i… Mon Dec 3…         30742         131151 FALSE      10797…\n    ##  5 Twitte… I’m i… Mon Dec 3…          1123           4217 FALSE      10797…\n    ##  6 Twitte… I am … Mon Dec 3…         25252         111582 FALSE      10797…\n    ##  7 Twitte… I cam… Mon Dec 3…         21960          90883 FALSE      10797…\n    ##  8 Twitte… .....… Mon Dec 3…         15081          72353 FALSE      10797…\n    ##  9 Twitte… ...I … Mon Dec 3…         22000         100819 FALSE      10797…\n    ## 10 Twitte… If an… Mon Dec 3…         17379          79095 FALSE      10797…\n    ## # … with 17,926 more rows\n\n# What is automated content analysis?\n\n## What is Content analysis\n\nAs a super express summary of Krippendorff and Neuendorf. But don’t do\nit like Leetaru\\!\n\n## What get automated?\n\nWhat the current literature says about ACA.\n\n## Best practice\n\n  - Validation\n\n  - Contrasting Confirmatory / exploratory\n\n  - Methodological transparency\n\n# Creating gold standard \u0026 validation\n\n  - avocate a workflow of making gold standard first\\!\n\n# Typical automated content analytic methods\n\n## dictionary-based method\n\n  - how it works\n  - off-the-shelf\n  - creating domain specific one\n\n### validation\n\n  - suggestions\n\n## topic-model\n\n### validation\n\n  - daniel maier / Chang\n\n# Advance topics\n\n## bag-of-embeddings\n\n## semantic network\n\n## machine learning\n\n## multimodal analysis\n\n## crosslingual analysis\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchainsawriot%2Fautomatedcontentanalysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchainsawriot%2Fautomatedcontentanalysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchainsawriot%2Fautomatedcontentanalysis/lists"}