{"id":198,"date":"2012-04-13T15:41:32","date_gmt":"2012-04-13T15:41:32","guid":{"rendered":"http:\/\/alexboisvert.com\/musings\/?p=198"},"modified":"2012-04-13T15:41:32","modified_gmt":"2012-04-13T15:41:32","slug":"fillbot-jr-update","status":"publish","type":"post","link":"https:\/\/alexboisvert.com\/musings\/2012\/04\/13\/fillbot-jr-update\/","title":{"rendered":"FillBot Jr. Update"},"content":{"rendered":"<p><em>For more on this project, <a href=\"http:\/\/alexboisvert.com\/musings\/category\/fillbot-jr\/\">see the FillBot Jr. category<\/a><\/em><\/p>\n<p>As I mentioned in the comments of the last post, FillBot Jr. has successfully solved a crossword!  Now admittedly, it was low-hanging fruit &#8212; a <a href=\"http:\/\/www.brainsonly.com\/servlets-newsday-crossword\/newsdaycrosswordPDF?pm=pdf&#038;puzzle=1112122&#038;data=%3CNAME%3E111212%3C%2FNAME%3E%3CTYPE%3E2%3C%2FTYPE%3E\">Monday Newsday by Gail Grabowski<\/a> &#8212; but I&#8217;m happy to have that result as a sort of &#8220;proof of concept.&#8221;  So far the algorithm is ultra-simple: it looks for the answer it has the most confidence in and fills it in, ignoring any potential problems it may have down the road.<\/p>\n<p>Buoyed by this result, I decided to tackle <a href=\"http:\/\/www.brainsonly.com\/servlets-newsday-crossword\/newsdaycrosswordPDF?pm=pdf&#038;puzzle=1112122&#038;data=%3CNAME%3E111213%3C%2FNAME%3E%3CTYPE%3E2%3C%2FTYPE%3E\">the following day&#8217;s puzzle<\/a>.  And it did great &#8212; filling in the entire puzzle except for one blank: the crossing of:<br \/>\nNO_E [Not any] and<br \/>\nMI_E [Not yours]<br \/>\nWait, really?  <strong>That&#8217;s<\/strong> what tripped up my bot?  What gives?  This is especially infuriating because I have both of those EXACT CLUES in my database.<\/p>\n<p>Well, as you may recall, I am leaning heavily on <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/fulltext-search.html\">MySQL&#8217;s full-text search<\/a> which, for a given clue, quickly scours my database finding similar clues and even gives them a numerical value according to how well the clue matches.  Well, it turns out that this has a big limitation in the form of <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/fulltext-stopwords.html\">stopwords<\/a> &#8212; words that aren&#8217;t indexed by MySQL.  And, you guessed it &#8212; &#8220;not&#8221;, &#8220;any&#8221;, and &#8220;yours&#8221; are on that list.  I&#8217;m not really sure how to get around this; like I said, I am relying very heavily on this capability of MySQL.  Maybe once I add some logic for &#8220;checking the crossings&#8221; this problem will be mitigated.<\/p>\n<p>In any case, I&#8217;m happy with the results so far.  Once I add some cross-checking logic, I think I might just be left with optimization improvements.  And if it turns out to be decent, I&#8217;d love to add it to Crossword Nexus to allow users to upload .puz files to see how the bot handles them.<\/p>\n<p>Thoughts?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For more on this project, see the FillBot Jr. category As I mentioned in the comments of the last post, FillBot Jr. has successfully solved a crossword! Now admittedly, it was low-hanging fruit &#8212; a Monday Newsday by Gail Grabowski &hellip; <a href=\"https:\/\/alexboisvert.com\/musings\/2012\/04\/13\/fillbot-jr-update\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,11,5],"tags":[],"class_list":["post-198","post","type-post","status-publish","format-standard","hentry","category-coding","category-fillbot-jr","category-puzzles"],"_links":{"self":[{"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":1,"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"predecessor-version":[{"id":199,"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/posts\/198\/revisions\/199"}],"wp:attachment":[{"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alexboisvert.com\/musings\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}