{"id":56,"date":"2024-04-03T15:00:00","date_gmt":"2024-04-03T15:00:00","guid":{"rendered":"https:\/\/site.sauter.digital\/?p=56"},"modified":"2024-06-04T20:31:17","modified_gmt":"2024-06-04T20:31:17","slug":"modelagem-de-topicos-em-python-utilizando-o-modelo-de-alocacao-latente-de-dirichlet-lda","status":"publish","type":"post","link":"https:\/\/site.sauter.digital\/?p=56","title":{"rendered":"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA)"},"content":{"rendered":"\n<p>A modelagem de t\u00f3picos \u00e9 um m\u00e9todo que extrai t\u00f3picos ocultos de grandes volumes de texto. Ela utiliza as aplica\u00e7\u00f5es do processamento de linguagem natural para extrair os t\u00f3picos que as pessoas est\u00e3o mais discutindo, dentre os volumes de texto apresentados.<\/p>\n\n\n\n<p>E o modelo Latent Dirichlet Allocation (LDA) \u00e9 um algoritmo utilizado para modelagem de t\u00f3picos que tem implementa\u00e7\u00f5es no pacote Gensim do Python.<\/p>\n\n\n\n<p>Esse processo \u00e9 bem importante para as empresas que querem criar estrat\u00e9gias de monetiza\u00e7\u00e3o e melhoria de servi\u00e7os, por exemplo, seja analisando avalia\u00e7\u00f5es de clientes, feedbacks de usu\u00e1rios, not\u00edcias, redes sociais, etc.<\/p>\n\n\n\n<p>Sendo assim, o objetivo deste artigo \u00e9 de criar um algoritmo automatizado que possa ler documentos e gerar os t\u00f3picos mais discutidos.<\/p>\n\n\n\n<p>Para isso, \u00e9 de extrema import\u00e2ncia que os dados tenham qualidade no pr\u00e9-processamento do texto e na melhor estrat\u00e9gia para encontrar o n\u00famero de t\u00f3picos. Isso pode garantir uma qualidade maior, clareza e signific\u00e2ncia nos t\u00f3picos extra\u00eddos.<\/p>\n\n\n\n<p>Esta an\u00e1lise foi realizada com dados extra\u00eddos de um reposit\u00f3rio do Github nomeado \u201cManchetes Brasil\u201d, de Paula Dornhofer Paro Costa (Costa, PDP), 2017. Essa base conta com dados de 500 manchetes de jornais brasileiros em datas espec\u00edficas de dezembro de 2016 a agosto de 2017. Os jornais s\u00e3o: Valor Econ\u00f4mico, O Globo, Folha de S. Paulo e O Estado de S. Paulo.<\/p>\n\n\n\n<p>O link para a base de dados pode ser acessada no <a href=\"https:\/\/github.com\/pdpcosta\/manchetesBrasildatabase\">https:\/\/github.com\/pdpcosta\/manchetesBrasildatabase<\/a><\/p>\n\n\n\n<p>Como ser\u00e1 estruturado este documento:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Importa\u00e7\u00e3o de pacotes<\/li>\n\n\n\n<li>Coleta de dados<\/li>\n\n\n\n<li>Limpeza de dados<\/li>\n\n\n\n<li>Modelagem de bigramas e trigramas<\/li>\n\n\n\n<li>Transforma\u00e7\u00e3o de dados: corpus e dicion\u00e1rio<\/li>\n\n\n\n<li>Aplica\u00e7\u00e3o do modelo LDA<\/li>\n\n\n\n<li>M\u00e9tricas: coer\u00eancia e complexidade<\/li>\n\n\n\n<li>Encontrando o n\u00famero ideal de t\u00f3picos<\/li>\n\n\n\n<li>Conclus\u00e3o<\/li>\n\n\n\n<li>Refer\u00eancias<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">1. IMPORTA\u00c7\u00c3O DE BIBLIOTECAS<\/h4>\n\n\n\n<p>Para come\u00e7ar, foi necess\u00e1rio importar algumas bibliotecas importantes, dentre elas o pandas, numpy, matplotlib, nltk, re e gensim:<\/p>\n\n\n\n<p><code>import re<\/code><br><code>import numpy as np<\/code><br><code>import pandas as pd<\/code><br><code>from pprint import pprint<\/code><br><code>import unicodedata<\/code><br><br><code># Importando a library Natural Language Toolkit - NLTK para tratamento de linguagem natural.<\/code><br><code>import nltk<\/code><br><code>nltk.download('wordnet')<\/code><br><code>nltk.download('punkt')<\/code><br><br><code>#Importando as stopwords<\/code><br><code>from nltk.corpus import stopwords<\/code><br><code>nltk.download('stopwords')<\/code><br><code>language = 'portuguese'<\/code><br><code>stopwords = stopwords.words(language)<\/code><br><code>stopwords = list(set(stopwords))<\/code><br><br><code>#Gensim<\/code><br><code>import gensim<\/code><br><code>import gensim.corpora as corpora<\/code><br><code>from gensim.utils import simple_preprocess<\/code><br><code>from gensim.models import CoherenceModel<\/code><br><br><code>#Plotagem<\/code><br><code>import matplotlib.pyplot as plt<\/code><br><code>import matplotlib.colors as mcolors<\/code><br><code>from wordcloud import WordCloud, STOPWORDS<\/code><br><code>%matplotlib inline<\/code><br><br><code>import logging<\/code><br><code>logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.ERROR)<\/code><br><br><code>import warnings<\/code><br><code>warnings.filterwarnings(\"ignore\",category=DeprecationWarning)<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. COLETA DE DADOS<\/h4>\n\n\n\n<p>O conjunto de dados utilizado, como foi mencionado anteriormente, \u00e9 a base de manchetes brasileiras.<\/p>\n\n\n\n<p>Portanto, foi importado para dentro do Google Colab o arquivo&nbsp;<code>csv<\/code>, atrav\u00e9s do c\u00f3digo abaixo. O arquivo cont\u00e9m colunas de dia, m\u00eas, ano, jornal e as headlines(not\u00edcias).<\/p>\n\n\n\n<p>Para visualizar, foi aplicado o m\u00e9todo&nbsp;<code>head()<\/code>&nbsp;que traz os 5 primeiros dados do nosso dataset:<\/p>\n\n\n\n<p><code>caminho = '\/content\/manchetesBrasildatabase.csv'<\/code><br><code>dataframe = pd.read_csv(caminho, quotechar=\"'\", header = None, names = [\"Day\", \"Month\", \"Year\", \"Company\", \"Headline\"]) dataframe.head()<\/code><\/p>\n\n\n\n<p>Para este artigo, foi realizada a modelagem de t\u00f3picos somente para o jornal Folha de S\u00e3o Paulo, portanto, aplicou-se o m\u00e9todo loc() para selecionar somente este jornal, atribuindo a uma nova vari\u00e1vel, como mostra abaixo:<\/p>\n\n\n\n<p><code>dataframe_folha = dataframe.loc[dataframe['Company'] == 'Folha'] dataframe_folha<\/code><\/p>\n\n\n\n<p>Sendo assim, o dataframe ficou com 127 colunas e 5 colunas.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. LIMPEZA DOS DADOS<\/h4>\n\n\n\n<p>Como \u00e9 poss\u00edvel visualizar na coluna&nbsp;<code>Headline<\/code>, os textos apresentam pontua\u00e7\u00f5es, acentua\u00e7\u00f5es, letras mai\u00fasculas, stopwords\u2026 Para aplica\u00e7\u00e3o do modelo LDA \u00e9 necess\u00e1rio que as palavras estejam sem essas distra\u00e7\u00f5es.<\/p>\n\n\n\n<p>Al\u00e9m disso, para ser consumido pelo LDA, \u00e9 necess\u00e1rio fazer uma quebra de cada frase em palavras atrav\u00e9s da tokeiniza\u00e7\u00e3o.<\/p>\n\n\n\n<p>Portando o seguinte processo foi realizado:<\/p>\n\n\n\n<p><em>a) Convers\u00e3o da coluna para lista, remo\u00e7\u00e3o de novas linhas e distra\u00e7\u00f5es:<\/em><\/p>\n\n\n\n<p><code># Convertendo para lista<br>data = dataframe_folha.Headline.values.tolist()<br># Removendo novas linhas<br>data = [re.sub('\\s+', ' ', sent) for sent in data] <br># Removendo distra\u00e7\u00f5es<br>data = [re.sub(\"\\'\", \"\", sent) for sent in data]<\/code><\/p>\n\n\n\n<p><em>b) Substitui\u00e7\u00e3o de letras mai\u00fasculas por letras min\u00fasculas:<\/em><\/p>\n\n\n\n<p><code>#Aplicando fun\u00e7\u00e3o para deixar somente letras min\u00fasculas.<br>def to_lowercase(words):<br><br>    new_words = [] for word in words:<br>    new_word = word.lower()<br>    new_words.append(new_word)<br>    return new_words<\/code><\/p>\n\n\n\n<p><em>c) Remo\u00e7\u00e3o de caracteres NON-ASCII:<\/em><\/p>\n\n\n\n<p><code>#Aplicando fun\u00e7\u00e3o para remover os caracteres Non ASCII<br>def remove_non_ascii(words):<br>    \"\"\"Remove non-ASCII characters from list of tokenized words\"\"\"<br>    new_words = []<br>    for word in words:<br>        new_word = unicodedata.normalize('NFKD', word).encode('ascii', 'ignore').decode('utf-8', 'ignore')<br>        new_words.append(new_word)<br>    return new_words<\/code><\/p>\n\n\n\n<p><em>d) Remo\u00e7\u00e3o de stop words:<\/em><\/p>\n\n\n\n<p>As stop words (ou palavras de parada) s\u00e3o palavras que podem ser consideradas irrelevantes para um conjunto de documentos. Ex: e, os, de, para, com, sem, foi.<\/p>\n\n\n\n<p><code>def remove_stopwords(texts):<br>    return [[word for word in simple_preprocess(str(doc)) if word not in stopwords] for doc in texts]<br># Removendo Stop Words<br>data_words_nostops = remove_stopwords(data_words)<\/code><\/p>\n\n\n\n<p>Somente aplicando as stopwords do NLTK n\u00e3o \u00e9 suficiente para as palavras em portugu\u00eas, pois n\u00e3o possui uma base t\u00e3o boa. Por isso, aplicou-se o m\u00e9todo&nbsp;<strong>append()<\/strong>&nbsp;para algumas palavras identificadas na an\u00e1lise, adicionando-as \u00e0 biblioteca de stopwords.<\/p>\n\n\n\n<p><code>#Adicionando novas stopwords em portugu\u00eas<br>stopwords = nltk.corpus.stopwords.words('portuguese') stopwords.append('ja')<br>stopwords.append('viu')<br>stopwords.append('vai')<br>stopwords.append('ne')<br>stopwords.append('ai') <br>stopwords.append('ta')<br>stopwords.append('gente')<br>stopwords.append('nao')<br>stopwords.append('aqui')<br>stopwords.append('tambem')<br>stopwords.append('vc')<br>stopwords.append('voce')<br>stopwords.append('entao')<br>stopwords.append('ate')<br>stopwords.append('agora')<br>stopwords.append('ser')<br>stopwords.append('sempre')<br>stopwords.append('ter')<br>stopwords.append('so')<br>stopwords.append('porque')<br>stopwords.append('sobre')<br>stopwords.append('ainda')<br>stopwords.append('la')<br>stopwords.append('tudo')<br>stopwords.append('ninguem')<br>stopwords.append('de')<\/code><\/p>\n\n\n\n<p><em>e) Remo\u00e7\u00e3o de pontua\u00e7\u00e3o e tokeiniza\u00e7\u00e3o atrav\u00e9s do simple_preprocess do Geisim:<\/em><\/p>\n\n\n\n<p><code>#Removendo pontua\u00e7\u00e3o e fazendo a tokeiniza\u00e7\u00e3o (para conseguir aplicar o modelo LDA)<br>def sent_to_words(sentences):<br>    for sentence in sentences:      <br>         yield(gensim.utils.simple_preprocess(str(sentence), deacc=True)) # deacc=True removes punctuations<br><br>data_words = list(sent_to_words(data))<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A modelagem de t\u00f3picos \u00e9 um m\u00e9todo que extrai t\u00f3picos ocultos de grandes volumes de texto. Ela utiliza as aplica\u00e7\u00f5es do processamento de linguagem natural para extrair os t\u00f3picos que as pessoas est\u00e3o mais discutindo, dentre os volumes de texto apresentados. E o modelo Latent Dirichlet Allocation (LDA) \u00e9 um algoritmo utilizado para modelagem de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":54,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,7,1],"tags":[],"class_list":["post-56","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artigos-tecnicos","category-dados","category-geral"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA) - Site Headless<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/site.sauter.digital\/?p=56\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA) - Site Headless\" \/>\n<meta property=\"og:description\" content=\"A modelagem de t\u00f3picos \u00e9 um m\u00e9todo que extrai t\u00f3picos ocultos de grandes volumes de texto. Ela utiliza as aplica\u00e7\u00f5es do processamento de linguagem natural para extrair os t\u00f3picos que as pessoas est\u00e3o mais discutindo, dentre os volumes de texto apresentados. E o modelo Latent Dirichlet Allocation (LDA) \u00e9 um algoritmo utilizado para modelagem de [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/site.sauter.digital\/?p=56\" \/>\n<meta property=\"og:site_name\" content=\"Site Headless\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-03T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-04T20:31:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin_sauter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin_sauter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/site.sauter.digital\/?p=56\",\"url\":\"https:\/\/site.sauter.digital\/?p=56\",\"name\":\"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA) - Site Headless\",\"isPartOf\":{\"@id\":\"http:\/\/site.sauter.digital\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/site.sauter.digital\/?p=56#primaryimage\"},\"image\":{\"@id\":\"https:\/\/site.sauter.digital\/?p=56#primaryimage\"},\"thumbnailUrl\":\"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg\",\"datePublished\":\"2024-04-03T15:00:00+00:00\",\"dateModified\":\"2024-06-04T20:31:17+00:00\",\"author\":{\"@id\":\"http:\/\/site.sauter.digital\/#\/schema\/person\/7131452232530c217d3845ca0d3d8e0f\"},\"breadcrumb\":{\"@id\":\"https:\/\/site.sauter.digital\/?p=56#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/site.sauter.digital\/?p=56\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/site.sauter.digital\/?p=56#primaryimage\",\"url\":\"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg\",\"contentUrl\":\"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg\",\"width\":2000,\"height\":1250},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/site.sauter.digital\/?p=56#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"http:\/\/site.sauter.digital\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA)\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/site.sauter.digital\/#website\",\"url\":\"http:\/\/site.sauter.digital\/\",\"name\":\"Site Headless\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/site.sauter.digital\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/site.sauter.digital\/#\/schema\/person\/7131452232530c217d3845ca0d3d8e0f\",\"name\":\"admin_sauter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"http:\/\/site.sauter.digital\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/582fb2b5bb633ff23cde09e366e3701d2e2b5b9ab596b5c2b445f086d11fe5d6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/582fb2b5bb633ff23cde09e366e3701d2e2b5b9ab596b5c2b445f086d11fe5d6?s=96&d=mm&r=g\",\"caption\":\"admin_sauter\"},\"sameAs\":[\"http:\/\/site.sauter.digital\"],\"url\":\"https:\/\/site.sauter.digital\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA) - Site Headless","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/site.sauter.digital\/?p=56","og_locale":"pt_BR","og_type":"article","og_title":"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA) - Site Headless","og_description":"A modelagem de t\u00f3picos \u00e9 um m\u00e9todo que extrai t\u00f3picos ocultos de grandes volumes de texto. Ela utiliza as aplica\u00e7\u00f5es do processamento de linguagem natural para extrair os t\u00f3picos que as pessoas est\u00e3o mais discutindo, dentre os volumes de texto apresentados. E o modelo Latent Dirichlet Allocation (LDA) \u00e9 um algoritmo utilizado para modelagem de [&hellip;]","og_url":"https:\/\/site.sauter.digital\/?p=56","og_site_name":"Site Headless","article_published_time":"2024-04-03T15:00:00+00:00","article_modified_time":"2024-06-04T20:31:17+00:00","og_image":[{"width":2000,"height":1250,"url":"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg","type":"image\/jpeg"}],"author":"admin_sauter","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin_sauter","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/site.sauter.digital\/?p=56","url":"https:\/\/site.sauter.digital\/?p=56","name":"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA) - Site Headless","isPartOf":{"@id":"http:\/\/site.sauter.digital\/#website"},"primaryImageOfPage":{"@id":"https:\/\/site.sauter.digital\/?p=56#primaryimage"},"image":{"@id":"https:\/\/site.sauter.digital\/?p=56#primaryimage"},"thumbnailUrl":"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg","datePublished":"2024-04-03T15:00:00+00:00","dateModified":"2024-06-04T20:31:17+00:00","author":{"@id":"http:\/\/site.sauter.digital\/#\/schema\/person\/7131452232530c217d3845ca0d3d8e0f"},"breadcrumb":{"@id":"https:\/\/site.sauter.digital\/?p=56#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/site.sauter.digital\/?p=56"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/site.sauter.digital\/?p=56#primaryimage","url":"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg","contentUrl":"https:\/\/site.sauter.digital\/wp-content\/uploads\/2024\/04\/modelagem.jpg","width":2000,"height":1250},{"@type":"BreadcrumbList","@id":"https:\/\/site.sauter.digital\/?p=56#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"http:\/\/site.sauter.digital\/"},{"@type":"ListItem","position":2,"name":"Modelagem de T\u00f3picos em Python utilizando o Modelo de Aloca\u00e7\u00e3o Latente de Dirichlet (LDA)"}]},{"@type":"WebSite","@id":"http:\/\/site.sauter.digital\/#website","url":"http:\/\/site.sauter.digital\/","name":"Site Headless","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/site.sauter.digital\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"http:\/\/site.sauter.digital\/#\/schema\/person\/7131452232530c217d3845ca0d3d8e0f","name":"admin_sauter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"http:\/\/site.sauter.digital\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/582fb2b5bb633ff23cde09e366e3701d2e2b5b9ab596b5c2b445f086d11fe5d6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/582fb2b5bb633ff23cde09e366e3701d2e2b5b9ab596b5c2b445f086d11fe5d6?s=96&d=mm&r=g","caption":"admin_sauter"},"sameAs":["http:\/\/site.sauter.digital"],"url":"https:\/\/site.sauter.digital\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/posts\/56","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=56"}],"version-history":[{"count":2,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/posts\/56\/revisions"}],"predecessor-version":[{"id":60,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/posts\/56\/revisions\/60"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=\/wp\/v2\/media\/54"}],"wp:attachment":[{"href":"https:\/\/site.sauter.digital\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=56"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=56"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/site.sauter.digital\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=56"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}