{"id":370,"date":"2012-10-19T23:57:52","date_gmt":"2012-10-20T03:57:52","guid":{"rendered":"http:\/\/www.zhtoolkit.com\/posts\/?p=370"},"modified":"2022-08-14T22:26:54","modified_gmt":"2022-08-15T02:26:54","slug":"lcmc-as-sql-database","status":"publish","type":"post","link":"https:\/\/www.zhtoolkit.com\/posts\/2012\/10\/lcmc-as-sql-database\/","title":{"rendered":"The Lancaster Corpus of Mandarin Chinese as an SQL Database"},"content":{"rendered":"<p>In my Chinese studies, the <a href=\"http:\/\/www.lancs.ac.uk\/fass\/projects\/corpus\/LCMC\/\">Lancaster Corpus of Mandarin Chinese (LCMC)<\/a> has been a useful source of data&#8212;word and character frequencies, collocations, phrase usage, parts of speech, etc. The corpus is freely available for non-commercial and research use. However, the native form of its data is in a set of XML files, which is not an easy format to work with. In addition, the XML data is slow to read data from, because all those XML tags and the entire data structure needs to be parsed. A much better format for the data is an SQL database. Stored in a database, many kinds queries and reports can be executed very efficiently. Depending on the software, these queries and reports can return results very quickly, much faster than in the XML format.<\/p>\n<p>I have made available a Perl script and some other related tools to assist with extracting the LCMC files into a SQLite database. SQLite is a lightweight relational database management system intended for portability and ease of use. Because it functions as a standalone program (not client-server), it is easy to install and use. It&#8217;s more ubiquitous than you might think. It&#8217;s how the Firefox and Chrome browsers stores its history, cookies, and preferences. But it&#8217;s also used, for example, by the Anki program as the storage format for flashcard data, and by the Calibre e-reader program to store information on installed e-books.<\/p>\n<p><!--more--><\/p>\n<h3>Obtaining the Corpus<\/h3>\n<p>The home page for the LCMC is at <a href=\"http:\/\/www.lancs.ac.uk\/fass\/projects\/corpus\/LCMC\/\">http:\/\/www.lancs.ac.uk\/fass\/projects\/corpus\/LCMC\/<\/a>. Of the two links on the page for the distribution locations, the <a href=\"http:\/\/ota.ox.ac.uk\/\">Oxford Text Archive<\/a> link is the only one that allows for direct downloading. Follow the link to the Oxford Text Archive, browse the archives, and search for <em>Lancaster Corpus of Mandarin Chinese<\/em> in the &#8220;Corpora&#8221; tab. The LCMC is <a href=\"http:\/\/ota.ox.ac.uk\/desc\/2474\">ID 2474<\/a>. The <a href=\"http:\/\/ota.ox.ac.uk\/scripts\/download.php?otaid=2474\">download link<\/a> is directly on the detail page. After reading the Terms and Conditions, enter your email to receive the link to the actual download location. Clicking on the link in the email message will immediately download the file, 2474.zip (6.5MB).<\/p>\n<h3>Creating the SQL Database<\/h3>\n<p>The scripts can be downloaded as a zip file <a href=\"http:\/\/www.zhtoolkit.com\/apps\/small_utilities\/lcmc_xml_to_sqlite.zip\">from here<\/a>, or as individual files in the <a href=\"https:\/\/github.com\/cer28\/zhtoolkit_small_utilities\/tree\/main\/lcmc_xml_to_sqlite\">archive<\/a>. You will need Perl installed on your machine, along with a few necessary modules that may need to be downloaded separately. Full information on the required steps can be found in the <a href=\"https:\/\/github.com\/cer28\/zhtoolkit_small_utilities\/blob\/main\/lcmc_xml_to_sqlite\/README.txt\">README file<\/a>.<\/p>\n<p>If the data conversion was successful, you will now have a 297 MB file called lcmc.db3 in the current directory.<\/p>\n<figure id=\"attachment_371\" aria-describedby=\"caption-attachment-371\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/Database_Schema.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/Database_Schema-300x241.png\" alt=\"\" title=\"Database_Schema\" width=\"300\" height=\"241\" class=\"size-medium wp-image-371\" srcset=\"https:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/Database_Schema-300x241.png 300w, https:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/Database_Schema-150x120.png 150w, https:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/Database_Schema.png 924w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-371\" class=\"wp-caption-text\">Entity-Relation diagram for the LCMC database<\/figcaption><\/figure>\n<p>As for client access to the newly created SQLite database, you will need software that can handle Unicode, so that the Chinese characters can be displayed. For Windows, <a href=\"http:\/\/www.yunqa.de\/delphi\/doku.php\">SQLiteSpy<\/a> is my personal choice. Queries are fast, the interface is intuitive, and it has Unicode and support for regular expressions built in. For Linux, both <a href=\"http:\/\/sqliteman.com\/\">Sqliteman<\/a> and <a href=\"https:\/\/code.google.com\/p\/sqlite-manager\/\">SQLite Manager<\/a> (a Firefox plug-in) are adequate. One common software package for Linux, <a href=\"http:\/\/sqlitebrowser.sourceforge.net\/\">SQLite Database Browser<\/a> is <strong>not<\/strong> suitable, because the LCMC database is large, and the program works by trying to load it all into memory at once.<\/p>\n<figure id=\"attachment_372\" aria-describedby=\"caption-attachment-372\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/sqlitespy-screenshot.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/sqlitespy-screenshot-300x191.png\" alt=\"\" title=\"sqlitespy-screenshot\" width=\"300\" height=\"191\" class=\"size-medium wp-image-372\" srcset=\"https:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/sqlitespy-screenshot-300x191.png 300w, https:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/sqlitespy-screenshot-150x95.png 150w, https:\/\/www.zhtoolkit.com\/posts\/wp-content\/uploads\/2012\/10\/sqlitespy-screenshot.png 717w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-372\" class=\"wp-caption-text\">Screenshot of SQLiteSpy for Windows<\/figcaption><\/figure>\n<h3>Some Sample Queries<\/h3>\n<p>In a relational database, information is organized into separate tables of data and linked by unique keys for each record. This arrangement makes it efficient to perform many kinds of queries. Below are just a few examples of the kind of reports that be done.<\/p>\n<h4>Raw frequency counts of all Chinese words in the corpus<\/h4>\n<pre><code>SELECT characters, COUNT('x')\r\n  FROM words\r\n WHERE token_type = 'w'\r\n   AND is_cjk = 'Y'\r\nGROUP BY characters ORDER BY count('x') DESC, characters ASC;\r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"center\">characters<\/th>\n<th align=\"right\">COUNT(&#8216;x&#8217;)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\">\u7684<\/td>\n<td align=\"right\">51141<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4e86<\/td>\n<td align=\"right\">12787<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u662f<\/td>\n<td align=\"right\">11601<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u5728<\/td>\n<td align=\"right\">10420<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4e00<\/td>\n<td align=\"right\">8380<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u548c<\/td>\n<td align=\"right\">7297<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4ed6<\/td>\n<td align=\"right\">5898<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4e0d<\/td>\n<td align=\"right\">5687<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u6211<\/td>\n<td align=\"right\">5576<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"right\">&#8230;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>List all words tagged as prepositions<\/h4>\n<pre><code>SELECT W.characters, P.id, P.description, COUNT(*) from words W\r\n  JOIN pos P on W.part_of_speech = P.id\r\n WHERE P.description = 'preposition'\r\n GROUP BY W.characters, P.id, P.description\r\n ORDER BY COUNT(*) DESC;\r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"center\">characters<\/th>\n<th align=\"center\">id<\/th>\n<th align=\"center\">P.description<\/th>\n<th align=\"right\">COUNT(*)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\">\u5728<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">9899<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u5bf9<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">3155<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u628a<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">1989<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4ece<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">1782<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4e3a<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">1702<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4e0e<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">1432<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4ee5<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">1355<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u88ab<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">1245<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"right\">&#8230;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>List the average sentence length per text category<\/h4>\n<pre><code>SELECT T.id, T.type, ROUND(AVG(LENGTH(F.characters)), 1) as avg_sentence_length\r\n  FROM full_sentences F\r\n  JOIN texts T on F.text_id = T.id \r\n GROUP BY T.id, T.type;\r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"center\">id<\/th>\n<th align=\"left\">type<\/th>\n<th align=\"right\">avg_sentence_length<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\">A<\/td>\n<td align=\"left\">Press reportage<\/td>\n<td align=\"right\">34.0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">B<\/td>\n<td align=\"left\">Press editorial<\/td>\n<td align=\"right\">36.6<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">C<\/td>\n<td align=\"left\">Press review<\/td>\n<td align=\"right\">42.5<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">D<\/td>\n<td align=\"left\">Religion<\/td>\n<td align=\"right\">41.2<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">E<\/td>\n<td align=\"left\">Skills, trades and hobbies<\/td>\n<td align=\"right\">32.5<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">F<\/td>\n<td align=\"left\">Popular lore<\/td>\n<td align=\"right\">33.0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">G<\/td>\n<td align=\"left\">Biographies and essays<\/td>\n<td align=\"right\">31.0<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">H<\/td>\n<td align=\"left\">Miscellaneous (reports, official documents)<\/td>\n<td align=\"right\">42.3<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">J<\/td>\n<td align=\"left\">Science (academic prose)<\/td>\n<td align=\"right\">40.3<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">K<\/td>\n<td align=\"left\">General fiction<\/td>\n<td align=\"right\">24.3<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">L<\/td>\n<td align=\"left\">Mystery and detective fiction<\/td>\n<td align=\"right\">28.4<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">M<\/td>\n<td align=\"left\">Science fiction<\/td>\n<td align=\"right\">33.4<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">N<\/td>\n<td align=\"left\">Martial art fiction<\/td>\n<td align=\"right\">28.6<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">P<\/td>\n<td align=\"left\">Romantic fiction<\/td>\n<td align=\"right\">25.8<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">R<\/td>\n<td align=\"left\">Humour<\/td>\n<td align=\"right\">20.8<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>List usage of words containing the character  \u7ed9<\/h4>\n<pre><code>SELECT W.characters, P.id, P.description, count(*) from words W\r\n  JOIN pos P on W.part_of_speech = P.id\r\nWHERE W.characters LIKE '%\u7ed9%'\r\n GROUP BY W.characters, P.id, P.description\r\n ORDER BY COUNT(*) DESC;\r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"center\">characters<\/th>\n<th align=\"center\">id<\/th>\n<th align=\"center\">description<\/th>\n<th align=\"right\">count(*)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\">\u7ed9<\/td>\n<td align=\"center\">p<\/td>\n<td align=\"center\">preposition<\/td>\n<td align=\"right\">985<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u7ed9<\/td>\n<td align=\"center\">v<\/td>\n<td align=\"center\">verb<\/td>\n<td align=\"right\">149<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u7ed9\u4e88<\/td>\n<td align=\"center\">v<\/td>\n<td align=\"center\">verb<\/td>\n<td align=\"right\">92<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4ea4\u7ed9<\/td>\n<td align=\"center\">v<\/td>\n<td align=\"center\">verb<\/td>\n<td align=\"right\">54<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u9001\u7ed9<\/td>\n<td align=\"center\">v<\/td>\n<td align=\"center\">verb<\/td>\n<td align=\"right\">37<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u9012\u7ed9<\/td>\n<td align=\"center\">v<\/td>\n<td align=\"center\">verb<\/td>\n<td align=\"right\">19<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4f9b\u7ed9<\/td>\n<td align=\"center\">vn<\/td>\n<td align=\"center\">verb with nominal function<\/td>\n<td align=\"right\">16<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u53d1\u7ed9<\/td>\n<td align=\"center\">v<\/td>\n<td align=\"center\">verb<\/td>\n<td align=\"right\">15<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"center\">&#8230;<\/td>\n<td align=\"right\" \/>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>All words and corresponding pinyin<\/h4>\n<pre><code>select W.file_id, W.sentence_id, W.word_num, W.characters, P.characters AS pinyin from words W\r\nleft join pinyin_words P USING (file_id, sentence_id, word_num);\r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"left\">file_id<\/th>\n<th align=\"center\">sentence_id<\/th>\n<th align=\"center\">word_num<\/th>\n<th align=\"left\">characters<\/th>\n<th align=\"left\">pinyin<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">1<\/td>\n<td align=\"left\">\u5927<\/td>\n<td align=\"left\">da4<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">2<\/td>\n<td align=\"left\">\u5899<\/td>\n<td align=\"left\">qiang2<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">3<\/td>\n<td align=\"left\">\u5185\u5916<\/td>\n<td align=\"left\">nei4wai4<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">4<\/td>\n<td align=\"left\">\uff0d\uff0d<\/td>\n<td align=\"left\">\uff0d\uff0d<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">5<\/td>\n<td align=\"left\">\u5317\u4eac\u5e02<\/td>\n<td align=\"left\">bei3jing1shi4<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">6<\/td>\n<td align=\"left\">\u76d1\u72f1<\/td>\n<td align=\"left\">jian1yu4<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">7<\/td>\n<td align=\"left\">\u7eaa\u5b9e<\/td>\n<td align=\"left\">ji4shi2<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">8<\/td>\n<td align=\"left\">\uff08<\/td>\n<td align=\"left\">\uff08<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">9<\/td>\n<td align=\"left\">\u4e09<\/td>\n<td align=\"left\">san1<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A01<\/td>\n<td align=\"center\">0001<\/td>\n<td align=\"center\">10<\/td>\n<td align=\"left\">\uff09<\/td>\n<td align=\"left\">\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Pinyin usage of character \u4e50<\/h4>\n<pre><code>  select W.character, P.character AS pinyin, count(*)\r\n    from characters W\r\n    join pinyin_characters P USING (file_id, sentence_id, word_num, char_num)\r\n    where W.character = '\u4e50'\r\ngroup by W.character, P.character;\r\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th align=\"center\">character<\/th>\n<th align=\"left\">pinyin<\/th>\n<th align=\"right\">count(*)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\">\u4e50<\/td>\n<td align=\"left\">le4<\/td>\n<td align=\"right\">270<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\u4e50<\/td>\n<td align=\"left\">yue4<\/td>\n<td align=\"right\">104<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>These are just a few examples of what you can do with the corpus data in the SQL database. Have fun!<\/p>\n<p><a href=\"http:\/\/www.zhtoolkit.com\/apps\/small_utilities\/lcmc_xml_to_sqlite.zip\">http:\/\/www.zhtoolkit.com\/apps\/small_utilities\/lcmc_xml_to_sqlite.zip<\/a> (69Kb)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my Chinese studies, the Lancaster Corpus of Mandarin Chinese (LCMC) has been a useful source of data&#8212;word and character frequencies, collocations, phrase usage, parts of speech, etc. The corpus is freely available for non-commercial and research use. However, the native form of its data is in a set of XML files, which is not [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[4,5],"tags":[11,9,13,33,28,27,12,14],"class_list":["post-370","post","type-post","status-publish","format-standard","hentry","category-guides","category-tools","tag-corpus","tag-howto","tag-lcmc","tag-software","tag-sql","tag-tools-2","tag-word-frequency","tag-words","entry"],"_links":{"self":[{"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/posts\/370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/comments?post=370"}],"version-history":[{"count":12,"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/posts\/370\/revisions"}],"predecessor-version":[{"id":436,"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/posts\/370\/revisions\/436"}],"wp:attachment":[{"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/media?parent=370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/categories?post=370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhtoolkit.com\/posts\/wp-json\/wp\/v2\/tags?post=370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}