{"id":977,"date":"2019-10-06T23:58:42","date_gmt":"2019-10-06T23:58:42","guid":{"rendered":"http:\/\/ai.intelligentonlinetools.com\/ml\/?p=977"},"modified":"2019-10-12T20:11:21","modified_gmt":"2019-10-12T20:11:21","slug":"search-text-documents-whoosh","status":"publish","type":"post","link":"https:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/","title":{"rendered":"How to Search Text Documents with Whoosh"},"content":{"rendered":"<div class=\"jfjlw69d783d15c525\" ><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<!-- Text analytics techniques 728_90 horizontal top -->\n<ins class=\"adsbygoogle\"\n     style=\"display:inline-block;width:728px;height:90px\"\n     data-ad-client=\"ca-pub-3416618249440971\"\n     data-ad-slot=\"2926649501\"><\/ins>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/div><style type=\"text\/css\">\r\n.jfjlw69d783d15c525 {\r\nmargin: 5px; padding: 0px;\r\n}\r\n@media screen and (min-width: 1201px) {\r\n.jfjlw69d783d15c525 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 993px) and (max-width: 1200px) {\r\n.jfjlw69d783d15c525 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 769px) and (max-width: 992px) {\r\n.jfjlw69d783d15c525 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 768px) and (max-width: 768px) {\r\n.jfjlw69d783d15c525 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (max-width: 767px) {\r\n.jfjlw69d783d15c525 {\r\ndisplay: block;\r\n}\r\n}\r\n<\/style>\r\n<p>Whoosh is a python library of classes and functions for indexing text and then searching the index. If the application requires text documents search functionality, Whoosh module can be used for this task. This post will summarize main steps needed for implementing search with Whoosh.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/ai.intelligentonlinetools.com\/ml\/wp-content\/uploads\/2019\/10\/concept-text-search.jpg\" alt=\"Text Search\" width=\"640\" height=\"426\" class=\"aligncenter size-full wp-image-989\" srcset=\"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-content\/uploads\/2019\/10\/concept-text-search.jpg 640w, https:\/\/ai.intelligentonlinetools.com\/ml\/wp-content\/uploads\/2019\/10\/concept-text-search-300x200.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Using Whoosh consists of indexing documents and then querying (searching) the index.<br \/>\nFirst we need to import needed modules:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nfrom whoosh.fields import Schema, TEXT, ID\r\nfrom whoosh import index\r\n<\/pre>\n<p>To index documents we need define folder where to save needed files.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nimport os.path\r\nif not os.path.exists(&quot;indexdir&quot;):\r\n    os.mkdir(&quot;indexdir&quot;)\r\n<\/pre>\n<p>We also need define Schema &#8211; the set of all possible fields in a document. <\/p>\n<p>The schema specifies the fields of documents in an index. Each document can have multiple fields, such as title, content, url, date, etc.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nschema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored = True))\r\n\r\n\r\nix = index.create_in(&quot;indexdir&quot;, schema)\r\n\r\nwriter = ix.writer()\r\nwriter.add_document(title=u&quot;My document&quot;, content=u&quot;This is my python document! hello big world&quot;,\r\n                    path=u&quot;\/a&quot;)\r\nwriter.add_document(title=u&quot;Second try&quot;, content=u&quot;This is the second example hello world.&quot;,\r\n                    path=u&quot;\/b&quot;)\r\nwriter.add_document(title=u&quot;Third time's the charm&quot;, content=u&quot;More examples. Examples are many.&quot;,\r\n                    path=u&quot;\/c&quot;)\r\n\r\nwriter.commit()\r\n<\/pre>\n<p>Once index is created, we can search documents using index:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nfrom whoosh.qparser import QueryParser\r\n\r\nwith ix.searcher() as searcher:\r\n     query = QueryParser(&quot;content&quot;, ix.schema).parse(&quot;hello world&quot;)\r\n     results = searcher.search(query, terms=True)\r\n    \r\n     for r in results:\r\n         print (r, r.score)\r\n         # Was this results object created with terms=True?\r\n         if results.has_matched_terms():\r\n            # What terms matched in the results?\r\n            print(results.matched_terms())\r\n        \r\n     # What terms matched in each hit?\r\n     print (&quot;matched terms&quot;)\r\n     for hit in results:\r\n        print(hit.matched_terms())\r\n<\/pre>\n<p>The output that we get:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n&lt;Hit {'path': '\/b', 'title': 'Second try', 'content': 'This is the second example hello world.'}&gt;\r\n&lt;Hit {'path': '\/b', 'title': 'Second try', 'content': 'This is the second example hello world.'}&gt; 2.124137931034483\r\n{('content', b'hello'), ('content', b'world')}\r\n&lt;Hit {'path': '\/a', 'title': 'My document', 'content': 'This is my python document! hello big world'}&gt; 1.7906976744186047\r\n{('content', b'hello'), ('content', b'world')}\r\nmatched terms\r\n[('content', b'hello'), ('content', b'world')]\r\n[('content', b'hello'), ('content', b'world')]\r\n<\/pre>\n<p>Whoosh has many features that can enhance searching. We can get more documents like a certain search hit. This requires that the field you want to match on is vectored or stored, or that you have access to the original text (such as from a database). Here is the example, more_like_this() is used for this.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nprint (&quot;more_results&quot;)\r\n     first_hit = results[0]\r\n     more_results = first_hit.more_like_this(&quot;content&quot;)\r\n     print (more_results)   \r\n<\/pre>\n<p>Output:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nmore_results\r\n&lt;Top 1 Results for Or([Term('content', 'example', boost=0.6588835188105945), Term('content', 'second', boost=0.6588835188105945), Term('content', 'hello', boost=0.5617184491361429), Term('content', 'world', boost=0.5617184491361429)]) runtime=0.0038603000000136944&gt;  \r\n<\/pre>\n<p>If we want to know the number of matched documents we can call len(results) but on very large indexes it can cause delay, but there is a way avoid this by getting just low and high estimate.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nfound = results.scored_length()\r\nif results.has_exact_length():\r\n    print(&quot;Scored&quot;, found, &quot;of exactly&quot;, len(results), &quot;documents&quot;)\r\nelse:\r\n    low = results.estimated_min_length()\r\n    high = results.estimated_length()\r\n\r\n    print(&quot;Scored&quot;, found, &quot;of between&quot;, low, &quot;and&quot;, high, &quot;documents&quot;)    \r\n<\/pre>\n<p>Below you can find full python source code for the above and references to the Whoosh documentation and other articles about Whoosh.  You will find how to use Whoosh with pandas or how to use Whoosh with web2py for web crawling project.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n# -*- coding: utf-8 -*-\r\n\r\nfrom whoosh.fields import Schema, TEXT, ID\r\nfrom whoosh import index\r\n\r\n#To create an index in a directory, use index.create_in:\r\n\r\nimport os.path\r\n\r\nif not os.path.exists(&quot;indexdir&quot;):\r\n    os.mkdir(&quot;indexdir&quot;)\r\n    \r\nschema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored = True))\r\n\r\n\r\nix = index.create_in(&quot;indexdir&quot;, schema)\r\n\r\nwriter = ix.writer()\r\nwriter.add_document(title=u&quot;My document&quot;, content=u&quot;This is my python document! hello big world&quot;,\r\n                    path=u&quot;\/a&quot;)\r\nwriter.add_document(title=u&quot;Second try&quot;, content=u&quot;This is the second example hello world.&quot;,\r\n                    path=u&quot;\/b&quot;)\r\nwriter.add_document(title=u&quot;Third time's the charm&quot;, content=u&quot;More examples. Examples are many.&quot;,\r\n                    path=u&quot;\/c&quot;)\r\n\r\nwriter.commit()\r\n\r\n\r\nfrom whoosh.qparser import QueryParser\r\n\r\nwith ix.searcher() as searcher:\r\n     query = QueryParser(&quot;content&quot;, ix.schema).parse(&quot;hello world&quot;)\r\n     results = searcher.search(query, terms=True)\r\n     print(results[0])\r\n\r\n     for r in results:\r\n         print (r, r.score)\r\n         # Was this results object created with terms=True?\r\n         if results.has_matched_terms():\r\n            # What terms matched in the results?\r\n            print(results.matched_terms())\r\n        \r\n     # What terms matched in each hit?\r\n     print (&quot;matched terms&quot;)\r\n     for hit in results:\r\n        print(hit.matched_terms())\r\n\r\n     \r\n\r\n     print (&quot;more_results&quot;)\r\n     first_hit = results[0]\r\n     more_results = first_hit.more_like_this(&quot;content&quot;)\r\n     print (more_results)     \r\n        \r\n    \r\nfound = results.scored_length()\r\nif results.has_exact_length():\r\n    print(&quot;Scored&quot;, found, &quot;of exactly&quot;, len(results), &quot;documents&quot;)\r\nelse:\r\n    low = results.estimated_min_length()\r\n    high = results.estimated_length()\r\n\r\n    print(&quot;Scored&quot;, found, &quot;of between&quot;, low, &quot;and&quot;, high, &quot;documents&quot;)    \r\n<\/pre>\n<p><strong>References<\/strong><\/p>\n<p>1. <a href=\"https:\/\/whoosh.readthedocs.io\/en\/latest\/quickstart.html\" target=\"_blank\">Quickstart<\/a><br \/>\n2. <a href=\"https:\/\/appliedmachinelearning.blog\/2018\/07\/31\/developing-a-fast-indexing-and-full-text-search-engine-with-whoosh-a-pure-python-library\/\" target=\"_blank\">Developing a fast Indexing and Full text Search Engine with Whoosh: A Pure-Python Library<\/a><br \/>\n3. <a href=\"http:\/\/annamarbut.blogspot.com\/2018\/08\/whoosh-pandas-and-redshift-implementing.html\" target=\"_blank\">Whoosh , Pandas, and Redshift: Implementing Full Text Search in a Relational Database<\/a><br \/>\n4. <a href=\"https:\/\/www.codechunk.in\/wp\/crawl-parse\/\" target=\"_blank\">USING WHOOSH WITH WEB2PY<\/a><\/p>\n<div class=\"ulcwo69d783d15c555\" ><center>\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<!-- Text analytics techniques link ads horizontal Medium after content -->\n<ins class=\"adsbygoogle\"\n     style=\"display:inline-block;width:468px;height:15px\"\n     data-ad-client=\"ca-pub-3416618249440971\"\n     data-ad-slot=\"5765984772\"><\/ins>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-format=\"autorelaxed\"\n     data-ad-client=\"ca-pub-3416618249440971\"\n     data-ad-slot=\"3903486841\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n<\/center><\/div><style type=\"text\/css\">\r\n.ulcwo69d783d15c555 {\r\nmargin: 5px; padding: 0px;\r\n}\r\n@media screen and (min-width: 1201px) {\r\n.ulcwo69d783d15c555 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 993px) and (max-width: 1200px) {\r\n.ulcwo69d783d15c555 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 769px) and (max-width: 992px) {\r\n.ulcwo69d783d15c555 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 768px) and (max-width: 768px) {\r\n.ulcwo69d783d15c555 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (max-width: 767px) {\r\n.ulcwo69d783d15c555 {\r\ndisplay: block;\r\n}\r\n}\r\n<\/style>\r\n","protected":false},"excerpt":{"rendered":"<p>Whoosh is a python library of classes and functions for indexing text and then searching the index. If the application requires text documents search functionality, Whoosh module can be used for this task. This post will summarize main steps needed for implementing search with Whoosh. Using Whoosh consists of indexing documents and then querying (searching) &#8230; <a title=\"How to Search Text Documents with Whoosh\" class=\"read-more\" href=\"https:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/\" aria-label=\"More on How to Search Text Documents with Whoosh\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[70,76],"tags":[72,71],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Search Text Documents with Whoosh - Text Analytics Techniques<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Search Text Documents with Whoosh - Text Analytics Techniques\" \/>\n<meta property=\"og:description\" content=\"Whoosh is a python library of classes and functions for indexing text and then searching the index. If the application requires text documents search functionality, Whoosh module can be used for this task. This post will summarize main steps needed for implementing search with Whoosh. Using Whoosh consists of indexing documents and then querying (searching) ... Read more\" \/>\n<meta property=\"og:url\" content=\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/\" \/>\n<meta property=\"og:site_name\" content=\"Text Analytics Techniques\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-06T23:58:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-12T20:11:21+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/ai.intelligentonlinetools.com\/ml\/wp-content\/uploads\/2019\/10\/concept-text-search.jpg\" \/>\n<meta name=\"author\" content=\"owygs156\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"owygs156\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/\",\"url\":\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/\",\"name\":\"How to Search Text Documents with Whoosh - Text Analytics Techniques\",\"isPartOf\":{\"@id\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/#website\"},\"datePublished\":\"2019-10-06T23:58:42+00:00\",\"dateModified\":\"2019-10-12T20:11:21+00:00\",\"author\":{\"@id\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/#\/schema\/person\/832f10562faaa1c7ed668c1ab4388857\"},\"breadcrumb\":{\"@id\":\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Search Text Documents with Whoosh\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/#website\",\"url\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/\",\"name\":\"Text Analytics Techniques\",\"description\":\"Text Analytics Techniques\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/#\/schema\/person\/832f10562faaa1c7ed668c1ab4388857\",\"name\":\"owygs156\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ai.intelligentonlinetools.com\/ml\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b351def598609cb4c0b5bca26497c7e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b351def598609cb4c0b5bca26497c7e5?s=96&d=mm&r=g\",\"caption\":\"owygs156\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Search Text Documents with Whoosh - Text Analytics Techniques","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":"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/","og_locale":"en_US","og_type":"article","og_title":"How to Search Text Documents with Whoosh - Text Analytics Techniques","og_description":"Whoosh is a python library of classes and functions for indexing text and then searching the index. If the application requires text documents search functionality, Whoosh module can be used for this task. This post will summarize main steps needed for implementing search with Whoosh. Using Whoosh consists of indexing documents and then querying (searching) ... Read more","og_url":"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/","og_site_name":"Text Analytics Techniques","article_published_time":"2019-10-06T23:58:42+00:00","article_modified_time":"2019-10-12T20:11:21+00:00","og_image":[{"url":"http:\/\/ai.intelligentonlinetools.com\/ml\/wp-content\/uploads\/2019\/10\/concept-text-search.jpg"}],"author":"owygs156","twitter_card":"summary_large_image","twitter_misc":{"Written by":"owygs156","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/","url":"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/","name":"How to Search Text Documents with Whoosh - Text Analytics Techniques","isPartOf":{"@id":"https:\/\/ai.intelligentonlinetools.com\/ml\/#website"},"datePublished":"2019-10-06T23:58:42+00:00","dateModified":"2019-10-12T20:11:21+00:00","author":{"@id":"https:\/\/ai.intelligentonlinetools.com\/ml\/#\/schema\/person\/832f10562faaa1c7ed668c1ab4388857"},"breadcrumb":{"@id":"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/ai.intelligentonlinetools.com\/ml\/search-text-documents-whoosh\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ai.intelligentonlinetools.com\/ml\/"},{"@type":"ListItem","position":2,"name":"How to Search Text Documents with Whoosh"}]},{"@type":"WebSite","@id":"https:\/\/ai.intelligentonlinetools.com\/ml\/#website","url":"https:\/\/ai.intelligentonlinetools.com\/ml\/","name":"Text Analytics Techniques","description":"Text Analytics Techniques","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ai.intelligentonlinetools.com\/ml\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ai.intelligentonlinetools.com\/ml\/#\/schema\/person\/832f10562faaa1c7ed668c1ab4388857","name":"owygs156","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ai.intelligentonlinetools.com\/ml\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b351def598609cb4c0b5bca26497c7e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b351def598609cb4c0b5bca26497c7e5?s=96&d=mm&r=g","caption":"owygs156"}}]}},"_links":{"self":[{"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/posts\/977"}],"collection":[{"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/comments?post=977"}],"version-history":[{"count":13,"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/posts\/977\/revisions"}],"predecessor-version":[{"id":981,"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/posts\/977\/revisions\/981"}],"wp:attachment":[{"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/media?parent=977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/categories?post=977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.intelligentonlinetools.com\/ml\/wp-json\/wp\/v2\/tags?post=977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}