{"id":398682,"date":"2024-06-29T14:13:07","date_gmt":"2024-06-29T14:13:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=398682"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T14:13:07","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=398682","title":{"rendered":"<span>How to create bilingual books. Part 2. Lingtrain Alignment Studio<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/cy\/bw\/qc\/cybwqcl-zij4xaiexu7ix8rktqo.jpeg\" alt=\"title\" data-src=\"https:\/\/habrastorage.org\/webt\/cy\/bw\/qc\/cybwqcl-zij4xaiexu7ix8rktqo.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/medium.com\/@averoo\/how-to-make-a-parallel-book-for-language-learning-part-1-python-and-colab-version-cff09e379d8c\" rel=\"nofollow noopener noreferrer\">How to make a parallel book for language learning. Part 1. Python and Colab version<\/a><\/p>\n<p>  <\/p>\n<p>This is a second article on making parallel books. Today we will use the more advanced tool which will bring rich UI functionality. Lingtrain Alignment Studio is a web application written on Vue and Python. The main purpose of it is to extract the parallel corpora from two raw texts and make a bilingual (or even multilingual) parallel book. This is an open-source project and I will be glad to hear all of your bright ideas. Links to the sources and our community contacts can be found below. Los geht&#8217;s!<\/p>\n<p>  <\/p>\n<h2 id=\"setup\">Setup<\/h2>\n<p>  <\/p>\n<p>The app is packed into the docker container. It&#8217;s a simple technology to deploy your stuff anywhere from the server to your local machine. It&#8217;s available across all the operating systems. So at first, you need a docker installed locally. Then you need to run two simple commands. The first will download the container:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">docker pull lingtrain\/aligner:v4<\/code><\/pre>\n<p>  <\/p>\n<p>And the second one will run the application:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">docker run -v C:\\app\\data:\/app\/data -v C:\\app\\img:\/app\/static\/img -p 80:80 lingtrain\/aligner:v4<\/code><\/pre>\n<p>  <\/p>\n<p><strong>C:\\app\\data<\/strong> and <strong>C:\\app\\img<\/strong> \u2014 your <em>local<\/em> folders.<\/p>\n<p>  <\/p>\n<p>The app will be available on the 80th port. Let&#8217;s open the <em>localhost<\/em> page in your favorite browser.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/l8\/4y\/29\/l84y29mmfv4yp343nsn-zmaiif4.jpeg\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/l8\/4y\/29\/l84y29mmfv4yp343nsn-zmaiif4.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>We will make three simple steps: Load, Align, Create<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"languages\">Languages<\/h2>\n<p>  <\/p>\n<p>You can choose the languages on the top menu. There are 16 languages are available now. The model itself does not consider such parameters as language because of the common dictionary between all of them. But the choice of it will add language-specific preprocessing which can be critical for the quality of alignment. If you didn&#8217;t find the needed language try to choose English.<\/p>\n<p>  <\/p>\n<h2 id=\"prepare-and-load-texts\">Prepare and load texts<\/h2>\n<p>  <\/p>\n<p>After you choose the languages prepare the two text files for loading. If they have a header, quotes, title, and author you need to add some markup to these lines. The markup language is pretty simple and consists of a list of tags. These tags need to be added <em>to the end<\/em> of the line. Tagged lines will be extracted and not be considered during the alignment process. They will be useful when will generate the final book.<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>Tag<\/th>\n<th>Purpose<\/th>\n<th>Mode<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>%%%%%title.<\/td>\n<td>Title<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%author.<\/td>\n<td>Author<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%h1. %%%%%h2. %%%%%h3. %%%%%h4. %%%%%h5.<\/td>\n<td>Headings<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%qtext.<\/td>\n<td>Quote<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%qname.<\/td>\n<td>Text under the quote<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%image.<\/td>\n<td>Image<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%translator.<\/td>\n<td>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%divider.<\/td>\n<td>Divider<\/td>\n<td>Manual<\/td>\n<\/tr>\n<tr>\n<td>%%%%%.<\/td>\n<td>New paragraph<\/td>\n<td>Auto<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>Look at the example below. After you add the tags your text files should be something like this:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">Arkady and Boris Strugatsky%%%%%author. Monday Begins on Saturday%%%%%title.  Fairy tale for primary scientists%%%%%h2.  \u201cBut what is the strangest, the most incomprehensible of all, is the fact that authors can undertake such themes\u2014I confess this is altogether beyond me, really\u2026 No, no, I don\u2019t understand it at all.\u201d%%%%%qtext.      N.V. Gogol%%%%%qname.  THE FIRST TALE. Run Around a Sofa%%%%%h1.  https:\/\/habrastorage.org\/webt\/6l\/cn\/bc\/6lcnbcgdqa6z1jdgfsibnvzxypm.png%%%%%image.  Chapter 1%%%%%h2.  Teacher: Children, write down the proposition: \u201cThe fish was sitting in a tree.\u201d%%%%%qtext. Pupil: But is it true that fish sit in trees?%%%%%qtext. Teacher: Well\u2026 it was a crazy fish.%%%%%qtext.  School Joke%%%%%qname.  I was approaching my destination. All around, pressing up against the very edge of the road, the green of the forest yielded now and then to a meadow overgrown with yellow sedge. The sun had been setting for an    hour and still couldn\u2019t make it, hanging low on the horizon. The car rolled along, crunching on a gravel surface. I steered around the bigger rocks, and each maneuver caused the empty canisters to rattle and clang in the trunk. A couple of men came out of the woods on the right and stopped on the shoulder, looking in my direction. One of them raised his hand. I took my foot off the gas, scrutinizing the pair. They seemed to be hunters, young, and maybe a bit older than myself. Deciding I liked their looks, I stopped. The one who had raised his hand stuck his swarthy, hawk-nosed face through the window and asked, grinning, \u201cCould you give us a lift to Solovetz?\u201d  ...<\/code><\/pre>\n<p>  <\/p>\n<p>All tags except the <strong>author<\/strong> and <strong>title<\/strong> are optional. If you don&#8217;t want to see headers and quotes in your book (or parallel corpora) simply remove all of these lines from your files.<\/p>\n<p>  <\/p>\n<p>Loaded texts will be split into sentences. You will see the lines and all of your markups in the following section. You also need to validate the count of the tags. The amount of them must be equal for loaded texts.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/pq\/o-\/zb\/pqo-zbfsnl5pm7dtrr_a1_-4mu8.jpeg\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/pq\/o-\/zb\/pqo-zbfsnl5pm7dtrr_a1_-4mu8.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<h2 id=\"align\">Align<\/h2>\n<p>  <\/p>\n<p>On the second tab, we will choose the loaded documents and see how much the number of lines in the documents differs. If it&#8217;s below 10% or so, then it&#8217;s probably fine, because of the style of the exact translator or because of the specific language.<\/p>\n<p>  <\/p>\n<p>If the number of lines differs more than 10% you need to check that both texts are complete. In other words, there are no lost chapters or other parts.<\/p>\n<p>  <\/p>\n<p>So, choose the texts and create the alignment. After that will appear the settings of the newly created project \u2014 the number of batches, shift, and window.<\/p>\n<p>  <\/p>\n<h3 id=\"settings\">Settings<\/h3>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/au\/k7\/xu\/auk7xuw7yop_5dzzjaedodzi89k.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/au\/k7\/xu\/auk7xuw7yop_5dzzjaedodzi89k.png\"\/><\/p>\n<p>  <\/p>\n<p><em>Amount of batches.<\/em> The alignment is an iterative process. Batches with a default size of 200 for the first text and proportionally amount of lines from the second one will be aligned together. You can run batch processing in parallel.<\/p>\n<p>  <\/p>\n<p><em>Window.<\/em> You can adjust the overlap of the batches so that the correct options can be found by the alignment algorithm for sure.<\/p>\n<p>  <\/p>\n<p><em>Shift.<\/em> If the number of sentences between texts differs too much in some area, then the correct options may not get into the window and the model will produce random matches. These breaks will be visible on the visualization and you can either enlarge the window or adjust the flow by shifting the second text forward or backward.<\/p>\n<p>  <\/p>\n<h3 id=\"visualization\">Visualization<\/h3>\n<p>  <\/p>\n<p>After the initial alignment, a visualization panel will be shown. Here you can see how our model has worked.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ey\/ol\/ug\/eyolugpbrlk-okcaxiqxyreofr8.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/ey\/ol\/ug\/eyolugpbrlk-okcaxiqxyreofr8.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"conflicts\">Conflicts<\/h3>\n<p>  <\/p>\n<p>During the initial alignment, the model is selecting the best match for each sentence based on the embedding similarity. But since the number of options varies, there are conflicts that can be found in the corresponding section. After that, you can automatically resolve them.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zi\/d9\/pd\/zid9pdts9mcacscp2hwfcnfhqqm.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/zi\/d9\/pd\/zid9pdts9mcacscp2hwfcnfhqqm.png\"\/><\/p>\n<p>  <\/p>\n<p>The visualization will also be updated.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/d0\/fy\/kc\/d0fykcniihqlabkptltm_o8mel8.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/d0\/fy\/kc\/d0fykcniihqlabkptltm_o8mel8.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"editor\">Editor<\/h3>\n<p>  <\/p>\n<p>The <strong>editor<\/strong> is the most complicated part of this application. Here you can edit a parallel corpus (this is what we did in the previous stages), add and delete lines, merge them together, and edit. At the same time, the row IDs are saved, which will allow us to keep the binding to the source lines. You can also resolve the conflicts by your hand in the editor if they haven&#8217;t been resolved correctly. It may be at the ends of the alignment because the system focuses on good alignment chains, which may not be at the beginning and at the end.<\/p>\n<p>  <\/p>\n<p>Here is the editor:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/5l\/ts\/vt\/5ltsvtbgh69nmjaptkivqhtn6ng.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/5l\/ts\/vt\/5ltsvtbgh69nmjaptkivqhtn6ng.png\"\/><\/p>\n<p>  <\/p>\n<p>The action buttons appear when you hover over the cell.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/5r\/ow\/ec\/5rowec-3x8trmuqogfl3ybx3cg4.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/5r\/ow\/ec\/5rowec-3x8trmuqogfl3ybx3cg4.png\"\/><\/p>\n<p>  <\/p>\n<p>You can add an existing row to a cell by selecting it from the list.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-8\/ck\/ic\/-8ckicdbskzuakhwqimq49tfupc.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/-8\/ck\/ic\/-8ckicdbskzuakhwqimq49tfupc.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"subscript\">Subscript<\/h3>\n<p>  <\/p>\n<p>In the case of working with languages in which you are not proficient, you can add a translation.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kg\/am\/pu\/kgampu92temgg3vu_odghb37e1y.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/kg\/am\/pu\/kgampu92temgg3vu_odghb37e1y.png\"\/><\/p>\n<p>  <\/p>\n<p>To do this, you need to download the text split by sentences, translate it and upload it back. To translate, you can use a life hack \u2014 open the text in the browser and translate it through the page translation function. Such a function is available in all modern browsers.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ob\/8w\/11\/ob8w11rzx1jh6vehhqrtvyw_kce.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/ob\/8w\/11\/ob8w11rzx1jh6vehhqrtvyw_kce.png\"\/><\/p>\n<p>  <\/p>\n<p>After the editing, you can start creating your book!<\/p>\n<p>  <\/p>\n<h2 id=\"create\">Create<\/h2>\n<p>  <\/p>\n<p>With the alignment, you can either extract parallel corpora from it (useful for machine learning specialists and linguists) or create a book (for students, teachers, and other language fans).<\/p>\n<p>  <\/p>\n<h3 id=\"book\">Book<\/h3>\n<p>  <\/p>\n<p>Before creating a stylized HTML book, you can customize it a little. Choose the side from with we will consider the information about the paragraph structure. Then choose the location of the texts \u2014 which one is on the left and which one is on the right. You can also add highlighting of matching sentences by selecting a style, it&#8217;s my favorite feature.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ue\/6b\/86\/ue6b86vetxuq0_sqznrrs-brwns.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/ue\/6b\/86\/ue6b86vetxuq0_sqznrrs-brwns.png\"\/><\/p>\n<p>  <\/p>\n<p>You can generate the beginning of the book right on the page. Stylized headings, separators, quotes, and so on will be created from the tags we have added. The plain text will be combined into paragraphs, according to the automatic markup.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wo\/qk\/zc\/woqkzcxcltbrqn5omygthbr86gs.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/wo\/qk\/zc\/woqkzcxcltbrqn5omygthbr86gs.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"parallel-corpora\">Parallel corpora<\/h3>\n<p>  <\/p>\n<p>You can extract parallel texts either separately from the alignment as plain texts, or in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Translation_Memory_eXchange\" rel=\"nofollow noopener noreferrer\">TMX<\/a> format. The corpus can be used in teaching language models and other scientific and applied tasks.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dx\/vk\/1e\/dxvk1ezfoa8mh0r_d7l26e8s7yc.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/dx\/vk\/1e\/dxvk1ezfoa8mh0r_d7l26e8s7yc.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"download\">Download<\/h3>\n<p>  <\/p>\n<p>You can download the book and corpora in the final section.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4c\/ak\/me\/4cakmebddjvjegeiveh18asy3vc.png\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/4c\/ak\/me\/4cakmebddjvjegeiveh18asy3vc.png\"\/><\/p>\n<p>  <\/p>\n<h2 id=\"outro\">Outro<\/h2>\n<p>  <\/p>\n<p>It&#8217;s hard to find a good bilingual book especially if your native language is not English. So it&#8217;s important for me that any language learner will be able to create a parallel book easily. Now you can create it by yourself.<\/p>\n<p>  <\/p>\n<p>Parallel corpora also have great benefits. Feed it to your awesome neural translation and language models.<\/p>\n<p>  <\/p>\n<h2 id=\"to-be-continued\">To be continued<\/h2>\n<p>  <\/p>\n<ul>\n<li>It is an open-source project. You can take a part in it and find the code on ours <a href=\"https:\/\/github.com\/averkij\/a-studio\" rel=\"nofollow noopener noreferrer\">github page<\/a>.<\/li>\n<li>Track the last news in our telegram channel \u2014 <a href=\"http:\/\/t.me\/lingtrain\" rel=\"nofollow noopener noreferrer\">Lingtrain<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>You can also support the project by making a donation <a href=\"https:\/\/www.tinkoff.ru\/collectmoney\/crowd\/averkiev.sergey7\/wYn8f32996\/\" rel=\"nofollow noopener noreferrer\">here<\/a>.<\/p>\n<p>  <\/p>\n<p><em>May the Language Force be with you<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/590549\/\"> https:\/\/habr.com\/ru\/articles\/590549\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/cy\/bw\/qc\/cybwqcl-zij4xaiexu7ix8rktqo.jpeg\" alt=\"title\" data-src=\"https:\/\/habrastorage.org\/webt\/cy\/bw\/qc\/cybwqcl-zij4xaiexu7ix8rktqo.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/medium.com\/@averoo\/how-to-make-a-parallel-book-for-language-learning-part-1-python-and-colab-version-cff09e379d8c\" rel=\"nofollow noopener noreferrer\">How to make a parallel book for language learning. Part 1. Python and Colab version<\/a><\/p>\n<p>  <\/p>\n<p>This is a second article on making parallel books. Today we will use the more advanced tool which will bring rich UI functionality. Lingtrain Alignment Studio is a web application written on Vue and Python. The main purpose of it is to extract the parallel corpora from two raw texts and make a bilingual (or even multilingual) parallel book. This is an open-source project and I will be glad to hear all of your bright ideas. Links to the sources and our community contacts can be found below. Los geht&#8217;s!<\/p>\n<p>  <\/p>\n<h2 id=\"setup\">Setup<\/h2>\n<p>  <\/p>\n<p>The app is packed into the docker container. It&#8217;s a simple technology to deploy your stuff anywhere from the server to your local machine. It&#8217;s available across all the operating systems. So at first, you need a docker installed locally. Then you need to run two simple commands. The first will download the container:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">docker pull lingtrain\/aligner:v4<\/code><\/pre>\n<p>  <\/p>\n<p>And the second one will run the application:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">docker run -v C:\\app\\data:\/app\/data -v C:\\app\\img:\/app\/static\/img -p 80:80 lingtrain\/aligner:v4<\/code><\/pre>\n<p>  <\/p>\n<p><strong>C:\\app\\data<\/strong> and <strong>C:\\app\\img<\/strong> \u2014 your <em>local<\/em> folders.<\/p>\n<p>  <\/p>\n<p>The app will be available on the 80th port. Let&#8217;s open the <em>localhost<\/em> page in your favorite browser.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/l8\/4y\/29\/l84y29mmfv4yp343nsn-zmaiif4.jpeg\" alt=\"Lingtrain app 1\" data-src=\"https:\/\/habrastorage.org\/webt\/l8\/4y\/29\/l84y29mmfv4yp343nsn-zmaiif4.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>We will make three simple steps: Load, Align, Create<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-398682","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=398682"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398682\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}