{"id":1599,"date":"2022-10-27T20:53:24","date_gmt":"2022-10-28T03:53:24","guid":{"rendered":"https:\/\/gantovnik.com\/bio-tips\/?p=1599"},"modified":"2022-10-29T04:15:23","modified_gmt":"2022-10-29T11:15:23","slug":"210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4-2","status":"publish","type":"post","link":"https:\/\/gantovnik.com\/bio-tips\/2022\/10\/210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4-2\/","title":{"rendered":"#306 Analyze sentiment of website comments with binary classification in ML.NET using C#"},"content":{"rendered":"<p>Data file: yelp_labelled.txt<\/p>\n<p>SentimentData.cs<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nusing Microsoft.ML.Data;\r\n\/\/ &lt;\/SnippetAddUsings&gt;\r\n\r\nnamespace SentimentAnalysis\r\n{\r\n    \/\/ &lt;SnippetDeclareTypes&gt;\r\n    public class SentimentData\r\n    {\r\n        &#x5B;LoadColumn(0)]\r\n        public string SentimentText;\r\n\r\n        &#x5B;LoadColumn(1), ColumnName(&quot;Label&quot;)]\r\n        public bool Sentiment;\r\n    }\r\n\r\n    public class SentimentPrediction : SentimentData\r\n    {\r\n\r\n        &#x5B;ColumnName(&quot;PredictedLabel&quot;)]\r\n        public bool Prediction { get; set; }\r\n\r\n        public float Probability { get; set; }\r\n\r\n        public float Score { get; set; }\r\n    }\r\n    \/\/ &lt;\/SnippetDeclareTypes&gt;\r\n}\r\n<\/pre>\n<p>Program.cs<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\/\/ &lt;SnippetAddUsings&gt;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing Microsoft.ML;\r\nusing Microsoft.ML.Data;\r\nusing static Microsoft.ML.DataOperationsCatalog;\r\nusing Microsoft.ML.Trainers;\r\nusing Microsoft.ML.Transforms.Text;\r\n\/\/ &lt;\/SnippetAddUsings&gt;\r\n\r\nnamespace SentimentAnalysis\r\n{\r\n    class Program\r\n    {\r\n        \/\/ &lt;SnippetDeclareGlobalVariables&gt;\r\n        static readonly string _dataPath = Path.Combine(Environment.CurrentDirectory, &quot;Data&quot;, &quot;yelp_labelled.txt&quot;);\r\n        \/\/ &lt;\/SnippetDeclareGlobalVariables&gt;\r\n\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            \/\/ Create ML.NET context\/local environment - allows you to add steps in order to keep everything together\r\n            \/\/ as you discover the ML.NET trainers and transforms\r\n            \/\/ &lt;SnippetCreateMLContext&gt;\r\n            MLContext mlContext = new MLContext();\r\n            \/\/ &lt;\/SnippetCreateMLContext&gt;\r\n\r\n            \/\/ &lt;SnippetCallLoadData&gt;\r\n            TrainTestData splitDataView = LoadData(mlContext);\r\n            \/\/ &lt;\/SnippetCallLoadData&gt;\r\n\r\n            \/\/ &lt;SnippetCallBuildAndTrainModel&gt;\r\n            ITransformer model = BuildAndTrainModel(mlContext, splitDataView.TrainSet);\r\n            \/\/ &lt;\/SnippetCallBuildAndTrainModel&gt;\r\n\r\n            \/\/ &lt;SnippetCallEvaluate&gt;\r\n            Evaluate(mlContext, model, splitDataView.TestSet);\r\n            \/\/ &lt;\/SnippetCallEvaluate&gt;\r\n\r\n            \/\/ &lt;SnippetCallUseModelWithSingleItem&gt;\r\n            UseModelWithSingleItem(mlContext, model);\r\n            \/\/ &lt;\/SnippetCallUseModelWithSingleItem&gt;\r\n\r\n            \/\/ &lt;SnippetCallUseModelWithBatchItems&gt;\r\n            UseModelWithBatchItems(mlContext, model);\r\n            \/\/ &lt;\/SnippetCallUseModelWithBatchItems&gt;\r\n\r\n            Console.WriteLine();\r\n            Console.WriteLine(&quot;=============== End of process ===============&quot;);\r\n        }\r\n\r\n        public static TrainTestData LoadData(MLContext mlContext)\r\n        {\r\n            \/\/ Note that this case, loading your training data from a file,\r\n            \/\/ is the easiest way to get started, but ML.NET also allows you\r\n            \/\/ to load data from databases or in-memory collections.\r\n            \/\/ &lt;SnippetLoadData&gt;\r\n            IDataView dataView = mlContext.Data.LoadFromTextFile&lt;SentimentData&gt;(_dataPath, hasHeader: false);\r\n            \/\/ &lt;\/SnippetLoadData&gt;\r\n\r\n            \/\/ You need both a training dataset to train the model and a test dataset to evaluate the model.\r\n            \/\/ Split the loaded dataset into train and test datasets\r\n            \/\/ Specify test dataset percentage with the `testFraction`parameter\r\n            \/\/ &lt;SnippetSplitData&gt;\r\n            TrainTestData splitDataView = mlContext.Data.TrainTestSplit(dataView, testFraction: 0.2);\r\n            \/\/ &lt;\/SnippetSplitData&gt;\r\n\r\n            \/\/ &lt;SnippetReturnSplitData&gt;\r\n            return splitDataView;\r\n            \/\/ &lt;\/SnippetReturnSplitData&gt;\r\n        }\r\n\r\n        public static ITransformer BuildAndTrainModel(MLContext mlContext, IDataView splitTrainSet)\r\n        {\r\n            \/\/ Create a flexible pipeline (composed by a chain of estimators) for creating\/training the model.\r\n            \/\/ This is used to format and clean the data.\r\n            \/\/ Convert the text column to numeric vectors (Features column)\r\n            \/\/ &lt;SnippetFeaturizeText&gt;\r\n            var estimator = mlContext.Transforms.Text.FeaturizeText(outputColumnName: &quot;Features&quot;, inputColumnName: nameof(SentimentData.SentimentText))\r\n            \/\/&lt;\/SnippetFeaturizeText&gt;\r\n            \/\/ append the machine learning task to the estimator\r\n            \/\/ &lt;SnippetAddTrainer&gt;\r\n            .Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression(labelColumnName: &quot;Label&quot;, featureColumnName: &quot;Features&quot;));\r\n            \/\/ &lt;\/SnippetAddTrainer&gt;\r\n\r\n            \/\/ Create and train the model based on the dataset that has been loaded, transformed.\r\n            \/\/ &lt;SnippetTrainModel&gt;\r\n            Console.WriteLine(&quot;=============== Create and Train the Model ===============&quot;);\r\n            var model = estimator.Fit(splitTrainSet);\r\n            Console.WriteLine(&quot;=============== End of training ===============&quot;);\r\n            Console.WriteLine();\r\n            \/\/ &lt;\/SnippetTrainModel&gt;\r\n\r\n            \/\/ Returns the model we trained to use for evaluation.\r\n            \/\/ &lt;SnippetReturnModel&gt;\r\n            return model;\r\n            \/\/ &lt;\/SnippetReturnModel&gt;\r\n        }\r\n\r\n        public static void Evaluate(MLContext mlContext, ITransformer model, IDataView splitTestSet)\r\n        {\r\n            \/\/ Evaluate the model and show accuracy stats\r\n\r\n            \/\/Take the data in, make transformations, output the data.\r\n            \/\/ &lt;SnippetTransformData&gt;\r\n            Console.WriteLine(&quot;=============== Evaluating Model accuracy with Test data===============&quot;);\r\n            IDataView predictions = model.Transform(splitTestSet);\r\n            \/\/ &lt;\/SnippetTransformData&gt;\r\n\r\n            \/\/ BinaryClassificationContext.Evaluate returns a BinaryClassificationEvaluator.CalibratedResult\r\n            \/\/ that contains the computed overall metrics.\r\n            \/\/ &lt;SnippetEvaluate&gt;\r\n            CalibratedBinaryClassificationMetrics metrics = mlContext.BinaryClassification.Evaluate(predictions, &quot;Label&quot;);\r\n            \/\/ &lt;\/SnippetEvaluate&gt;\r\n\r\n            \/\/ The Accuracy metric gets the accuracy of a model, which is the proportion\r\n            \/\/ of correct predictions in the test set.\r\n\r\n            \/\/ The AreaUnderROCCurve metric is equal to the probability that the algorithm ranks\r\n            \/\/ a randomly chosen positive instance higher than a randomly chosen negative one\r\n            \/\/ (assuming 'positive' ranks higher than 'negative').\r\n\r\n            \/\/ The F1Score metric gets the model's F1 score.\r\n            \/\/ The F1 score is the harmonic mean of precision and recall:\r\n            \/\/  2 * precision * recall \/ (precision + recall).\r\n\r\n            \/\/ &lt;SnippetDisplayMetrics&gt;\r\n            Console.WriteLine();\r\n            Console.WriteLine(&quot;Model quality metrics evaluation&quot;);\r\n            Console.WriteLine(&quot;--------------------------------&quot;);\r\n            Console.WriteLine($&quot;Accuracy: {metrics.Accuracy:P2}&quot;);\r\n            Console.WriteLine($&quot;Auc: {metrics.AreaUnderRocCurve:P2}&quot;);\r\n            Console.WriteLine($&quot;F1Score: {metrics.F1Score:P2}&quot;);\r\n            Console.WriteLine(&quot;=============== End of model evaluation ===============&quot;);\r\n            \/\/&lt;\/SnippetDisplayMetrics&gt;\r\n        }\r\n\r\n        private static void UseModelWithSingleItem(MLContext mlContext, ITransformer model)\r\n        {\r\n            \/\/ &lt;SnippetCreatePredictionEngine1&gt;\r\n            PredictionEngine&lt;SentimentData, SentimentPrediction&gt; predictionFunction = mlContext.Model.CreatePredictionEngine&lt;SentimentData, SentimentPrediction&gt;(model);\r\n            \/\/ &lt;\/SnippetCreatePredictionEngine1&gt;\r\n\r\n            \/\/ &lt;SnippetCreateTestIssue1&gt;\r\n            SentimentData sampleStatement = new SentimentData\r\n            {\r\n                SentimentText = &quot;This was a very bad steak&quot;\r\n            };\r\n            \/\/ &lt;\/SnippetCreateTestIssue1&gt;\r\n\r\n            \/\/ &lt;SnippetPredict&gt;\r\n            var resultPrediction = predictionFunction.Predict(sampleStatement);\r\n            \/\/ &lt;\/SnippetPredict&gt;\r\n            \/\/ &lt;SnippetOutputPrediction&gt;\r\n            Console.WriteLine();\r\n            Console.WriteLine(&quot;=============== Prediction Test of model with a single sample and test dataset ===============&quot;);\r\n\r\n            Console.WriteLine();\r\n            Console.WriteLine($&quot;Sentiment: {resultPrediction.SentimentText} | Prediction: {(Convert.ToBoolean(resultPrediction.Prediction) ? &quot;Positive&quot; : &quot;Negative&quot;)} | Probability: {resultPrediction.Probability} &quot;);\r\n\r\n            Console.WriteLine(&quot;=============== End of Predictions ===============&quot;);\r\n            Console.WriteLine();\r\n            \/\/ &lt;\/SnippetOutputPrediction&gt;\r\n        }\r\n\r\n        public static void UseModelWithBatchItems(MLContext mlContext, ITransformer model)\r\n        {\r\n            \/\/ Adds some comments to test the trained model's data points.\r\n            \/\/ &lt;SnippetCreateTestIssues&gt;\r\n            IEnumerable&lt;SentimentData&gt; sentiments = new&#x5B;]\r\n            {\r\n                new SentimentData\r\n                {\r\n                    SentimentText = &quot;This was a horrible meal&quot;\r\n                },\r\n                new SentimentData\r\n                {\r\n                    SentimentText = &quot;I love this spaghetti.&quot;\r\n                }\r\n            };\r\n            \/\/ &lt;\/SnippetCreateTestIssues&gt;\r\n\r\n            \/\/ Load batch comments just created\r\n            \/\/ &lt;SnippetPrediction&gt;\r\n            IDataView batchComments = mlContext.Data.LoadFromEnumerable(sentiments);\r\n\r\n            IDataView predictions = model.Transform(batchComments);\r\n\r\n            \/\/ Use model to predict whether comment data is Positive (1) or Negative (0).\r\n            IEnumerable&lt;SentimentPrediction&gt; predictedResults = mlContext.Data.CreateEnumerable&lt;SentimentPrediction&gt;(predictions, reuseRowObject: false);\r\n            \/\/ &lt;\/SnippetPrediction&gt;\r\n\r\n            \/\/ &lt;SnippetAddInfoMessage&gt;\r\n            Console.WriteLine();\r\n\r\n            Console.WriteLine(&quot;=============== Prediction Test of loaded model with multiple samples ===============&quot;);\r\n            \/\/ &lt;\/SnippetAddInfoMessage&gt;\r\n\r\n            Console.WriteLine();\r\n\r\n            \/\/ &lt;SnippetDisplayResults&gt;\r\n            foreach (SentimentPrediction prediction in predictedResults)\r\n            {\r\n                Console.WriteLine($&quot;Sentiment: {prediction.SentimentText} | Prediction: {(Convert.ToBoolean(prediction.Prediction) ? &quot;Positive&quot; : &quot;Negative&quot;)} | Probability: {prediction.Probability} &quot;);\r\n            }\r\n            Console.WriteLine(&quot;=============== End of predictions ===============&quot;);\r\n            \/\/ &lt;\/SnippetDisplayResults&gt;\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Output:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nModel quality metrics evaluation\r\n--------------------------------\r\nAccuracy: 83.96%\r\nAuc: 89.88%\r\nF1Score: 84.38%\r\n=============== End of model evaluation ===============\r\n\r\n=============== Prediction Test of model with a single sample and test dataset ===============\r\n\r\nSentiment: This was a very bad steak | Prediction: Negative | Probability: 0.026840538\r\n=============== End of Predictions ===============\r\n\r\n\r\n=============== Prediction Test of loaded model with multiple samples ===============\r\n\r\nSentiment: This was a horrible meal | Prediction: Negative | Probability: 0.041398816\r\nSentiment: I love this spaghetti. | Prediction: Positive | Probability: 0.99719304\r\n<\/pre>\n<p><a href=\"https:\/\/github.com\/gantovnik\/wordpress_examples\/tree\/main\/ex306\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gantovnik\/wordpress_examples\/tree\/main\/ex306<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Data file: yelp_labelled.txt SentimentData.cs using Microsoft.ML.Data; \/\/ &lt;\/SnippetAddUsings&gt; namespace SentimentAnalysis { \/\/ &lt;SnippetDeclareTypes&gt; public class SentimentData { &#x5B;LoadColumn(0)] public string SentimentText; &#x5B;LoadColumn(1), ColumnName(&quot;Label&quot;)] public bool Sentiment; } public class SentimentPrediction : SentimentData { &#x5B;ColumnName(&quot;PredictedLabel&quot;)] public bool Prediction { get; set; } public float Probability { get; set; } public float Score { get; set; } [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","_lmt_disableupdate":"yes","_lmt_disable":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[50],"tags":[],"class_list":["post-1599","post","type-post","status-publish","format-standard","hentry","category-c"],"modified_by":"gantovnik","jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8bH0k-pN","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1611,"url":"https:\/\/gantovnik.com\/bio-tips\/2022\/10\/210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4-2-2-2\/","url_meta":{"origin":1599,"position":0},"title":"#308 Predict prices using regression with ML.NET using C#","author":"gantovnik","date":"2022-10-30","format":false,"excerpt":"Data file: Download the and place to Data folder two files: taxi-fare-test.csv and taxi-fare-train.csv TaxiTrip.cs [code language=\"csharp\"] \/\/ <Snippet1> using Microsoft.ML.Data; \/\/ <\/Snippet1> namespace TaxiFarePrediction { \/\/ <Snippet2> public class TaxiTrip { [LoadColumn(0)] public string VendorId; [LoadColumn(1)] public string RateCode; [LoadColumn(2)] public float PassengerCount; [LoadColumn(3)] public float TripTime; [LoadColumn(4)] public\u2026","rel":"","context":"In &quot;C#&quot;","block_context":{"text":"C#","link":"https:\/\/gantovnik.com\/bio-tips\/category\/c\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1603,"url":"https:\/\/gantovnik.com\/bio-tips\/2022\/10\/210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4-2-2\/","url_meta":{"origin":1599,"position":1},"title":"#307 Categorize support issues using multiclass classification with ML.NET using C#","author":"gantovnik","date":"2022-10-28","format":false,"excerpt":"Data file: Download the and place to Data folder two files: issues_train.tsv and the issues_test.tsv GitHubIssueData.cs [code language=\"csharp\"] \/\/ <SnippetAddUsings> using Microsoft.ML.Data; \/\/ <\/SnippetAddUsings> namespace GitHubIssueClassification { \/\/ <SnippetDeclareTypes> public class GitHubIssue { [LoadColumn(0)] public string ID { get; set; } [LoadColumn(1)] public string Area { get; set; } [LoadColumn(2)]\u2026","rel":"","context":"In &quot;C#&quot;","block_context":{"text":"C#","link":"https:\/\/gantovnik.com\/bio-tips\/category\/c\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1596,"url":"https:\/\/gantovnik.com\/bio-tips\/2022\/10\/210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4\/","url_meta":{"origin":1599,"position":2},"title":"#305 Line plot using C#","author":"gantovnik","date":"2022-10-26","format":false,"excerpt":"Temperature.cs [code language=\"python\"] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp1 { public class Temperature { public string Location { get; set; } public decimal M1 { get; set; } public decimal M2 { get; set; } public decimal M3 { get; set; } public decimal\u2026","rel":"","context":"In &quot;C#&quot;","block_context":{"text":"C#","link":"https:\/\/gantovnik.com\/bio-tips\/category\/c\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/10\/2022-10-26_041420-300x276.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1176,"url":"https:\/\/gantovnik.com\/bio-tips\/2021\/11\/204-mandelbrot-fractal-using-python\/","url_meta":{"origin":1599,"position":3},"title":"#204 Mandelbrot fractal using python","author":"gantovnik","date":"2021-11-26","format":false,"excerpt":"[code language=\"python\"] import numpy as np import matplotlib.pyplot as plt def mandelbrot(h,w, maxit=20): x,y = np.meshgrid(np.linspace(-2, 0.8, w), np.linspace(-1.4, 1.4, h)) c = x + y*1j z = c exceeds = np.zeros(z.shape, dtype=bool) for iteration in range(maxit): z = z**2 + c exceeded = abs(z) > 4 exceeds_now = exceeded\u2026","rel":"","context":"In &quot;python&quot;","block_context":{"text":"python","link":"https:\/\/gantovnik.com\/bio-tips\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2021\/11\/ex204.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1649,"url":"https:\/\/gantovnik.com\/bio-tips\/2022\/11\/210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4-2-2-2-2\/","url_meta":{"origin":1599,"position":4},"title":"#313 Spline plot using C# Windows Forms App","author":"gantovnik","date":"2022-11-04","format":false,"excerpt":"Add ScottPlot.WinForms using Manage NuGet packages. Form1.cs [code language=\"csharp\"] using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ScottPlot; namespace Spline { public partial class Form1 : Form { public static class Cubic { \/\/\/ <summary> \/\/\/ Generate a smooth (interpolated) curve that follows the path\u2026","rel":"","context":"In &quot;C#&quot;","block_context":{"text":"C#","link":"https:\/\/gantovnik.com\/bio-tips\/category\/c\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/interpolation.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/interpolation.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/interpolation.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/interpolation.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":1686,"url":"https:\/\/gantovnik.com\/bio-tips\/2022\/11\/210-parametric-curve-in-3d-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-3-2-2-4-2-2-2-2-2-3\/","url_meta":{"origin":1599,"position":5},"title":"#319 Scatter plot using ScottPlot.WinForms and C#","author":"gantovnik","date":"2022-11-29","format":false,"excerpt":"1) Install the ScottPlot.WinForms NuGet package 2) Drag a FormsPlot from the toolbox onto the form Form1.cs [code language=\"csharp\"] namespace WinFormsAppEx319 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void formsPlot1_Load(object sender, EventArgs e) { \/\/ generate some random X\/Y data int pointCount =\u2026","rel":"","context":"In &quot;C#&quot;","block_context":{"text":"C#","link":"https:\/\/gantovnik.com\/bio-tips\/category\/c\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/ex319.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/ex319.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/ex319.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/gantovnik.com\/bio-tips\/wp-content\/uploads\/2022\/11\/ex319.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/posts\/1599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/comments?post=1599"}],"version-history":[{"count":0,"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/posts\/1599\/revisions"}],"wp:attachment":[{"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/media?parent=1599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/categories?post=1599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gantovnik.com\/bio-tips\/wp-json\/wp\/v2\/tags?post=1599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}