UNPKG

bravey

Version:

A simple JavaScript NLP-like library to help you creating your own bot.

320 lines (299 loc) 12 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: stemmers/StemmerSupport.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: stemmers/StemmerSupport.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>/** * From: https://github.com/fortnightlabs/snowball-js */ Bravey.stemmerSupport = { Among: function(s, substring_i, result, method) { this.toCharArray = function(s) { var sLength = s.length, charArr = new Array(sLength); for (var i = 0; i &lt; sLength; i++) charArr[i] = s.charCodeAt(i); return charArr; }; if ((!s &amp;&amp; s != "") || (!substring_i &amp;&amp; (substring_i != 0)) || !result) throw ("Bad Among initialisation: s:" + s + ", substring_i: " + substring_i + ", result: " + result); this.s_size = s.length; this.s = this.toCharArray(s); this.substring_i = substring_i; this.result = result; this.method = method; }, SnowballProgram: function() { var current; return { bra: 0, ket: 0, limit: 0, cursor: 0, limit_backward: 0, setCurrent: function(word) { current = word; this.cursor = 0; this.limit = word.length; this.limit_backward = 0; this.bra = this.cursor; this.ket = this.limit; }, getCurrent: function() { var result = current; current = null; return result; }, in_grouping: function(s, min, max) { if (this.cursor &lt; this.limit) { var ch = current.charCodeAt(this.cursor); if (ch &lt;= max &amp;&amp; ch >= min) { ch -= min; if (s[ch >> 3] &amp; (0X1 &lt;&lt; (ch &amp; 0X7))) { this.cursor++; return true; } } } return false; }, in_grouping_b: function(s, min, max) { if (this.cursor > this.limit_backward) { var ch = current.charCodeAt(this.cursor - 1); if (ch &lt;= max &amp;&amp; ch >= min) { ch -= min; if (s[ch >> 3] &amp; (0X1 &lt;&lt; (ch &amp; 0X7))) { this.cursor--; return true; } } } return false; }, out_grouping: function(s, min, max) { if (this.cursor &lt; this.limit) { var ch = current.charCodeAt(this.cursor); if (ch > max || ch &lt; min) { this.cursor++; return true; } ch -= min; if (!(s[ch >> 3] &amp; (0X1 &lt;&lt; (ch &amp; 0X7)))) { this.cursor++; return true; } } return false; }, out_grouping_b: function(s, min, max) { if (this.cursor > this.limit_backward) { var ch = current.charCodeAt(this.cursor - 1); if (ch > max || ch &lt; min) { this.cursor--; return true; } ch -= min; if (!(s[ch >> 3] &amp; (0X1 &lt;&lt; (ch &amp; 0X7)))) { this.cursor--; return true; } } return false; }, eq_s: function(s_size, s) { if (this.limit - this.cursor &lt; s_size) return false; for (var i = 0; i &lt; s_size; i++) if (current.charCodeAt(this.cursor + i) != s.charCodeAt(i)) return false; this.cursor += s_size; return true; }, eq_s_b: function(s_size, s) { if (this.cursor - this.limit_backward &lt; s_size) return false; for (var i = 0; i &lt; s_size; i++) if (current.charCodeAt(this.cursor - s_size + i) != s .charCodeAt(i)) return false; this.cursor -= s_size; return true; }, find_among: function(v, v_size) { var i = 0, j = v_size, c = this.cursor, l = this.limit, common_i = 0, common_j = 0, first_key_inspected = false; while (true) { var k = i + ((j - i) >> 1), diff = 0, common = common_i &lt; common_j ? common_i : common_j, w = v[k]; for (var i2 = common; i2 &lt; w.s_size; i2++) { if (c + common == l) { diff = -1; break; } diff = current.charCodeAt(c + common) - w.s[i2]; if (diff) break; common++; } if (diff &lt; 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i &lt;= 1) { if (i > 0 || j == i || first_key_inspected) break; first_key_inspected = true; } } while (true) { var w = v[i]; if (common_i >= w.s_size) { this.cursor = c + w.s_size; if (!w.method) return w.result; var res = w.method(); this.cursor = c + w.s_size; if (res) return w.result; } i = w.substring_i; if (i &lt; 0) return 0; } }, find_among_b: function(v, v_size) { var i = 0, j = v_size, c = this.cursor, lb = this.limit_backward, common_i = 0, common_j = 0, first_key_inspected = false; while (true) { var k = i + ((j - i) >> 1), diff = 0, common = common_i &lt; common_j ? common_i : common_j, w = v[k]; for (var i2 = w.s_size - 1 - common; i2 >= 0; i2--) { if (c - common == lb) { diff = -1; break; } diff = current.charCodeAt(c - 1 - common) - w.s[i2]; if (diff) break; common++; } if (diff &lt; 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i &lt;= 1) { if (i > 0 || j == i || first_key_inspected) break; first_key_inspected = true; } } while (true) { var w = v[i]; if (common_i >= w.s_size) { this.cursor = c - w.s_size; if (!w.method) return w.result; var res = w.method(); this.cursor = c - w.s_size; if (res) return w.result; } i = w.substring_i; if (i &lt; 0) return 0; } }, replace_s: function(c_bra, c_ket, s) { var adjustment = s.length - (c_ket - c_bra), left = current .substring(0, c_bra), right = current.substring(c_ket); current = left + s + right; this.limit += adjustment; if (this.cursor >= c_ket) this.cursor += adjustment; else if (this.cursor > c_bra) this.cursor = c_bra; return adjustment; }, slice_check: function() { if (this.bra &lt; 0 || this.bra > this.ket || this.ket > this.limit || this.limit > current.length) throw ("faulty slice operation"); }, slice_from: function(s) { this.slice_check(); this.replace_s(this.bra, this.ket, s); }, slice_del: function() { this.slice_from(""); }, insert: function(c_bra, c_ket, s) { var adjustment = this.replace_s(c_bra, c_ket, s); if (c_bra &lt;= this.bra) this.bra += adjustment; if (c_bra &lt;= this.ket) this.ket += adjustment; }, slice_to: function() { this.slice_check(); return current.substring(this.bra, this.ket); }, eq_v_b: function(s) { return this.eq_s_b(s.length, s); } }; } };</code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Bravey.ApiAiAdapter.html">ApiAiAdapter</a></li><li><a href="Bravey.ContextManager.html">ContextManager</a></li><li><a href="Bravey.DocumentClassifier.html">DocumentClassifier</a></li><li><a href="Bravey.EMailEntityRecognizer.html">EMailEntityRecognizer</a></li><li><a href="Bravey.Filter.BasicFilter.html">BasicFilter</a></li><li><a href="Bravey.FreeTextEntityRecognizer.html">FreeTextEntityRecognizer</a></li><li><a href="Bravey.Language.EN.DateEntityRecognizer.html">DateEntityRecognizer</a></li><li><a href="Bravey.Language.EN.FreeTextEntityRecognizer.html">FreeTextEntityRecognizer</a></li><li><a href="Bravey.Language.EN.NumberEntityRecognizer.html">NumberEntityRecognizer</a></li><li><a href="Bravey.Language.EN.Stemmer.html">Stemmer</a></li><li><a href="Bravey.Language.EN.TimeEntityRecognizer.html">TimeEntityRecognizer</a></li><li><a href="Bravey.Language.EN.TimePeriodEntityRecognizer.html">TimePeriodEntityRecognizer</a></li><li><a href="Bravey.Language.IT.DateEntityRecognizer.html">DateEntityRecognizer</a></li><li><a href="Bravey.Language.IT.FreeTextEntityRecognizer.html">FreeTextEntityRecognizer</a></li><li><a href="Bravey.Language.IT.NumberEntityRecognizer.html">NumberEntityRecognizer</a></li><li><a href="Bravey.Language.IT.Stemmer.html">Stemmer</a></li><li><a href="Bravey.Language.IT.TimeEntityRecognizer.html">TimeEntityRecognizer</a></li><li><a href="Bravey.Language.IT.TimePeriodEntityRecognizer.html">TimePeriodEntityRecognizer</a></li><li><a href="Bravey.Language.PT.DateEntityRecognizer.html">DateEntityRecognizer</a></li><li><a href="Bravey.Language.PT.FreeTextEntityRecognizer.html">FreeTextEntityRecognizer</a></li><li><a href="Bravey.Language.PT.NumberEntityRecognizer.html">NumberEntityRecognizer</a></li><li><a href="Bravey.Language.PT.Stemmer.html">Stemmer</a></li><li><a href="Bravey.Language.PT.TimeEntityRecognizer.html">TimeEntityRecognizer</a></li><li><a href="Bravey.Language.PT.TimePeriodEntityRecognizer.html">TimePeriodEntityRecognizer</a></li><li><a href="Bravey.Nlp.Fuzzy.html">Fuzzy</a></li><li><a href="Bravey.Nlp.Sequential.html">Sequential</a></li><li><a href="Bravey.NumberEntityRecognizer.html">NumberEntityRecognizer</a></li><li><a href="Bravey.RegexEntityRecognizer.html">RegexEntityRecognizer</a></li><li><a href="Bravey.SessionManager.InMemorySessionManager.html">InMemorySessionManager</a></li><li><a href="Bravey.StringEntityRecognizer.html">StringEntityRecognizer</a></li><li><a href="Bravey.Text.RegexMap.html">RegexMap</a></li></ul><h3>Namespaces</h3><ul><li><a href="Bravey.html">Bravey</a></li><li><a href="Bravey.Data.html">Data</a></li><li><a href="Bravey.Date.html">Date</a></li><li><a href="Bravey.File.html">File</a></li><li><a href="Bravey.Filter.html">Filter</a></li><li><a href="Bravey.Language.html">Language</a></li><li><a href="Bravey.Language.EN.html">EN</a></li><li><a href="Bravey.Language.IT.html">IT</a></li><li><a href="Bravey.Language.PT.html">PT</a></li><li><a href="Bravey.Nlp.html">Nlp</a></li><li><a href="Bravey.SessionManager.html">SessionManager</a></li><li><a href="Bravey.Text.html">Text</a></li></ul><h3><a href="global.html">Global</a></h3> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>