From 9aa89ca60715f3ba367beb1630683cbe9f845675 Mon Sep 17 00:00:00 2001 From: Mihir Kumar Date: Mon, 29 Jun 2020 12:49:58 +0530 Subject: [PATCH 1/2] Hindi support addition --- lunr.hi.js | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 lunr.hi.js diff --git a/lunr.hi.js b/lunr.hi.js new file mode 100644 index 0000000..3467d66 --- /dev/null +++ b/lunr.hi.js @@ -0,0 +1,121 @@ +/*! + * Lunr languages, `Hindi` language + * https://github.com/MiKr13/lunr-languages + * + * Copyright 2020, Mihir Kumar + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +/** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ +; +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + factory()(root.lunr); + } +}(this, function() { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return function(lunr) { + /* throw error if lunr is not yet included */ + if ('undefined' === typeof lunr) { + throw new Error('Lunr is not present. Please include / require Lunr before this script.'); + } + + /* throw error if lunr stemmer support is not yet included */ + if ('undefined' === typeof lunr.stemmerSupport) { + throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); + } + + /* register specific locale function */ + lunr.hi = function() { + this.pipeline.reset(); + this.pipeline.add( + lunr.hi.trimmer, + lunr.hi.stopWordFilter, + lunr.hi.stemmer + ); + + // change the tokenizer for japanese one + // if (isLunr2) { // for lunr version 2.0.0 + // this.tokenizer = lunr.hi.tokenizer; + // } else { + // if (lunr.tokenizer) { // for lunr version 0.6.0 + // lunr.tokenizer = lunr.hi.tokenizer; + // } + // if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 + // this.tokenizerFn = lunr.hi.tokenizer; + // } + // } + + if (this.searchPipeline) { + this.searchPipeline.reset(); + this.searchPipeline.add(lunr.hi.stemmer) + } + }; + + /* lunr trimmer function */ + lunr.hi.wordCharacters = "\u0900-\u0903\u0904-\u090f\u0910-\u091f\u0920-\u092f\u0930-\u093f\u0940-\u094f\u0950-\u095f\u0960-\u096f\u0970-\u097fa-zA-Za-zA-Z0-90-9"; + // lunr.hi.wordCharacters = "ऀँंःऄअआइईउऊऋऌऍऎएऐऑऒओऔकखगघङचछजझञटठडढणतथदधनऩपफबभमयरऱलळऴवशषसहऺऻ़ऽािीुूृॄॅॆेैॉॊोौ्ॎॏॐ॒॑॓॔ॕॖॗक़ख़ग़ज़ड़ढ़फ़य़ॠॡॢॣ।॥०१२३४५६७८९॰ॱॲॳॴॵॶॷॸॹॺॻॼॽॾॿa-zA-Za-zA-Z0-90-9"; + lunr.hi.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.hi.wordCharacters); + + lunr.Pipeline.registerFunction(lunr.hi.trimmer, 'trimmer-hi'); + /* lunr stop word filter */ + lunr.hi.stopWordFilter = lunr.generateStopWordFilter( + 'अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने'.split(' ')); + /* lunr stemmer function */ + lunr.hi.stemmer = (function() { + + return function(word) { + // for lunr version 2 + if (typeof word.update === "function") { + return word.update(function(word) { + return word; + }) + } else { // for lunr version <= 1 + return word; + } + + } + })(); + + var segmenter = lunr.wordcut; + segmenter.init(); + lunr.hi.tokenizer = function(obj) { + if (!arguments.length || obj == null || obj == undefined) return [] + if (Array.isArray(obj)) return obj.map(function (t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase()}); + + var str = obj.toString().toLowerCase().replace(/^\s+/, ''); + return segmenter.cut(str).split('|'); + } + + lunr.Pipeline.registerFunction(lunr.hi.stemmer, 'stemmer-hi'); + lunr.Pipeline.registerFunction(lunr.hi.stopWordFilter, 'stopWordFilter-hi'); + + }; +})) From 8f6da2fd1c114811a3b0811352ce0536ef3216eb Mon Sep 17 00:00:00 2001 From: Mihir Kumar Date: Mon, 29 Jun 2020 12:59:34 +0530 Subject: [PATCH 2/2] demo and hindi min added, build changes --- bower.json | 1 + build/build.js | 5 ++++- demos/demo-browser-require-hi.html | 33 ++++++++++++++++++++++++++++++ min/lunr.hi.min.js | 1 + 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 demos/demo-browser-require-hi.html create mode 100644 min/lunr.hi.min.js diff --git a/bower.json b/bower.json index 58d5511..7148dbd 100644 --- a/bower.json +++ b/bower.json @@ -25,6 +25,7 @@ "finish", "francais", "french", + "hindi", "hungarian", "magyar", "italian", diff --git a/build/build.js b/build/build.js index 9f147bb..4569eb4 100644 --- a/build/build.js +++ b/build/build.js @@ -33,7 +33,10 @@ function wordCharacters(script) { } // list mapping between locale, stemmer file, stopwords file, and char pattern -var list = [{ +var list = [ +{ + locale: 'hi' +},{ locale: 'da', file: 'DanishStemmer.js', stopwords: stopwordsRepoFolder + 'da.csv', diff --git a/demos/demo-browser-require-hi.html b/demos/demo-browser-require-hi.html new file mode 100644 index 0000000..7cd07de --- /dev/null +++ b/demos/demo-browser-require-hi.html @@ -0,0 +1,33 @@ + + + + + + + + + + + +

Open developer tools and observe the results in the Console tab. View source for code.

+ + + diff --git a/min/lunr.hi.min.js b/min/lunr.hi.min.js new file mode 100644 index 0000000..35927ab --- /dev/null +++ b/min/lunr.hi.min.js @@ -0,0 +1 @@ +(function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)})(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(e){return"function"==typeof e.update?e.update(function(e){return e}):e};var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||null==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); \ No newline at end of file