{"id":2198,"date":"2014-03-11T13:26:13","date_gmt":"2014-03-11T13:26:13","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2198"},"modified":"2020-03-31T00:46:31","modified_gmt":"2020-03-31T00:46:31","slug":"extracting-dates-times-text-stanford-nlp-scala","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/","title":{"rendered":"Extracting Dates and Times from Text with Stanford NLP and Scala"},"content":{"rendered":"<p>Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with the same techniques (heuristics and statistical algorithms on earlier data), which results in a pipeline model.<\/p>\n<p>Here, for instance, we see two techniques for constructing a pipeline, one based on configuration, and one manual. Since this example is going to extract dates and times from text, we add the TimeAnnotator class to the end of the pipeline:<\/p>\n<pre lang=\"scala\">\nobject Main {\n  def main (args: Array[String]) {\n    val props = new Properties();\n    props.put(\"annotators\", \"tokenize, ssplit, pos, lemma, ner, parse, dcoref\");\n\n    val pipeline = new StanfordCoreNLP(props);\n\n    val timeAnnotator = new TimeAnnotator()\n    pipeline.addAnnotator(timeAnnotator)\n\n    ...\n  }\n}\n<\/pre>\n<p>Once this is working, you simply tell the pipeline to annotate the text, and then wait for a bit. <\/p>\n<pre lang=\"scala\">\nval text =\n  \"Last summer, they met every Tuesday afternoon, from 1:00 pm to 3:00 pm.\"\nval doc = new Annotation(text)\npipeline.annotate(doc)\n<\/pre>\n<p>The reason this takes time is that doing the actual work loads a handful of files from disk and works with them, and while they are small, they have large numbers of pre-defined rules. Consider the following sample, which is a small piece of the time matching piece of the library (there are around a thousand lines of this sort of thing). <\/p>\n<pre lang=\"javascript\">\n BASIC_NUMBER_MAP = {\n    \"one\": 1,\n    \"two\": 2,\n    \"three\": 3,\n    ...\n }\n\nBASIC_ORDINAL_MAP = {\n  \"first\": 1,\n  \"second\": 2,\n  \"third\": 3,\n  ...\n}\n\nPERIODIC_SET = {\n  \"centennial\": TemporalCompose(MULTIPLY, YEARLY, 100),\n  \"yearly\": YEARLY,\n  \"annually\": YEARLY,\n  \"annual\": YEARLY,\n  ...\n}\n<\/pre>\n<p>This sample demonstrates two things &#8211; you can pull out more than just exact times (e.g. &#8220;last summer&#8221;, &#8220;next century&#8221;, ranges, times without dates), and the library handles a large number of equivalence classes for you.<\/p>\n<p>One of the most likely issues you&#8217;ll run into trying to get this working is getting the classpath and parsing pipeline set up right &#8211; while simple to look at, if you try to customize it, you&#8217;ll need to develop an understanding of how the library is actually structured.<\/p>\n<p>Once you run it, you can get dates out:<\/p>\n<pre lang=\"scala\">\n    val timexAnnotations = doc.get(classOf[TimeAnnotations.TimexAnnotations])\n    for (timexAnn <- timexAnnotations) {\n      val timeExpr = timexAnn.get(classOf[TimeExpression.Annotation])\n      val temporal = timeExpr.getTemporal()\n      val range = temporal.getRange()\n\n      println(temporal)\n      println(range)\n    }\n<\/pre>\n<p>For the above example, this gives you the following (note alternating \"temporal\" and \"range\"). Note the \"offset\" lines as well - you can set a reference date for these, if you wish, so that <\/p>\n<pre>\nXXXX-SU OFFSET P-1Y\n(XXXX-SU OFFSET P-1Y,XXXX-SU OFFSET P-1Y,)\nXXXX-WXX-2TAF\nnull\nT13:00\n(T13:00:00.000,T13:00:59.999,PT1M)\nT15:00\n(T15:00:00.000,T15:00:59.999,PT1M)\n<\/pre>\n<p>If you add the following line, these ranges will fix themselves:<\/p>\n<pre lang=\"scala\">\ndoc.set(classOf[CoreAnnotations.DocDateAnnotation], \"2013-07-14\")\n<\/pre>\n<p>Which gives you:<\/p>\n<pre>\n2012-SU\n(2012-06-01,2012-09,P3M)\n<\/pre>\n<p>One thing I haven't figured out yet is whether you scan specify locale settings for this - presumably in parsing dates, you at least want to know which of month\/day are intended to be first, even if you treat the text as English as a whole (that said, this may require first identifying a language and building a different pipeline - e.g. if the library can't handle French, Spanish, etc, being able to handle their dates is irrelevant).<\/p>\n<p>For more examples, and information on customizing this, see the Stanford NLP documentation<sup><a href=\"#footnote_1_2198\" id=\"identifier_1_2198\" class=\"footnote-link footnote-identifier-link\" title=\"http:\/\/nlp.stanford.edu\/software\/sutime.shtml\">1<\/a><\/sup>. <\/p>\n<ol class=\"footnotes\"><li id=\"footnote_1_2198\" class=\"footnote\">http:\/\/nlp.stanford.edu\/software\/sutime.shtml<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_2198\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Extracting Dates and Times from Text with Stanford NLP and Scala&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4,5,6],"tags":[352,378,480,531],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2014-03-11T13:26:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-31T00:46:31+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#blogposting\",\"name\":\"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling\",\"headline\":\"Extracting Dates and Times from Text with Stanford NLP and Scala\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2014-03-11T13:26:13+00:00\",\"dateModified\":\"2020-03-31T00:46:31+00:00\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#webpage\"},\"articleSection\":\"Code Examples, Data Mining, Data Science, machine learning, natural language processing, scala, stanford nlp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#listItem\",\"name\":\"Extracting Dates and Times from Text with Stanford NLP and Scala\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#listItem\",\"position\":3,\"name\":\"Extracting Dates and Times from Text with Stanford NLP and Scala\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/\",\"name\":\"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling\",\"description\":\"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/extracting-dates-times-text-stanford-nlp-scala\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2014-03-11T13:26:13+00:00\",\"dateModified\":\"2020-03-31T00:46:31+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling","description":"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with","canonical_url":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#blogposting","name":"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling","headline":"Extracting Dates and Times from Text with Stanford NLP and Scala","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2014-03-11T13:26:13+00:00","dateModified":"2020-03-31T00:46:31+00:00","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#webpage"},"articleSection":"Code Examples, Data Mining, Data Science, machine learning, natural language processing, scala, stanford nlp"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#listItem","name":"Extracting Dates and Times from Text with Stanford NLP and Scala"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#listItem","position":3,"name":"Extracting Dates and Times from Text with Stanford NLP and Scala","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/","name":"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling","description":"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2014-03-11T13:26:13+00:00","dateModified":"2020-03-31T00:46:31+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling","og:description":"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with","og:url":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/","article:published_time":"2014-03-11T13:26:13+00:00","article:modified_time":"2020-03-31T00:46:31+00:00","twitter:card":"summary_large_image","twitter:title":"Extracting Dates and Times from Text with Stanford NLP and Scala - Gary Sieling","twitter:description":"Stanford NLP is a library for text manipulation, which can parse and tokenize natural language texts. Typically applications which operate on text first split the text into words, then annotate the words with their part of speech, using a combination of heuristics and statistical rules. Other operations on the text build upon these results with"},"aioseo_meta_data":{"post_id":"2198","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:25:34","updated":"2026-07-06 01:10:40","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tExtracting Dates and Times from Text with Stanford NLP and Scala\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Extracting Dates and Times from Text with Stanford NLP and Scala","link":"https:\/\/www.garysieling.com\/blog\/extracting-dates-times-text-stanford-nlp-scala\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2198"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=2198"}],"version-history":[{"count":1,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2198\/revisions"}],"predecessor-version":[{"id":6497,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2198\/revisions\/6497"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}