UNPKG

176 kBJavaScriptView Raw
1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2// include the Keyword Extractor
3var keyword_extractor = require("../lib/keyword_extractor");
4
5var sentence = "Google LLC este o corporație americană multinațională care administrează motorul de căutare pe Internet cu același nume."
6
7// Extract the keywords
8var extraction_result = keyword_extractor.extract(sentence,{
9 language:"romanian",
10 remove_digits: true,
11 return_changed_case:false,
12 remove_duplicates: false
13
14 });
15console.log(extraction_result);
16
17
18document.addEventListener("DOMContentLoaded", function(event) {
19 var _list = document.getElementsByClassName("keywords")[0];
20
21 extraction_result.forEach(function(currentValue, index,){
22 var li = document.createElement("li");
23 var liText = document.createTextNode(currentValue);
24 li.appendChild(liText);
25 _list.appendChild(li);
26 });
27});
28
29},{"../lib/keyword_extractor":2}],2:[function(require,module,exports){
30var _ = require("underscore");
31_.str = require('underscore.string');
32var supported_languages = ["danish","dutch","english","french","galician","german","italian","polish","portuguese","romanian","russian","spanish","swedish"];
33var stopwords = require("./stopwords/stopwords");
34
35function _extract(str, options){
36 if(_.isEmpty(str)){
37 return [];
38 }
39 if(_.isEmpty(options)){
40 options = {
41 remove_digits: true,
42 return_changed_case: true
43 };
44 }
45 var return_changed_case = options.return_changed_case;
46 var return_chained_words = options.return_chained_words;
47 var remove_digits = options.remove_digits;
48 var _language = options.language || "english";
49 var _remove_duplicates = options.remove_duplicates || false;
50 var return_max_ngrams = options.return_max_ngrams;
51
52 if(supported_languages.indexOf(_language) < 0){
53 throw new Error("Language must be one of ["+supported_languages.join(",")+"]");
54 }
55
56 // strip any HTML and trim whitespace
57 var text = _.str.trim(_.str.stripTags(str));
58 if(_.isEmpty(text)){
59 return [];
60 }else{
61 var words = text.split(/\s/);
62 var unchanged_words = [];
63 var low_words = [];
64 // change the case of all the words
65 for(var x = 0;x < words.length; x++){
66 var w = words[x].match(/https?:\/\/.*[\r\n]*/g) ? words[x] : words[x].replace(/\.|,|;|!|\?|\(|\)|:|"|^'|'$|“|”|‘|’/g,'');
67 // remove periods, question marks, exclamation points, commas, and semi-colons
68 // if this is a short result, make sure it's not a single character or something 'odd'
69 if(w.length === 1){
70 w = w.replace(/-|_|@|&|#/g,'');
71 }
72 // if it's a number, remove it
73 var digits_match = w.match(/\d/g);
74 if(remove_digits && digits_match && digits_match.length === w.length){
75 w = "";
76 }
77 if(w.length > 0){
78 low_words.push(w.toLowerCase());
79 unchanged_words.push(w);
80 }
81 }
82 var results = [];
83 var _stopwords = options.stopwords || _getStopwords({ language: _language });
84 var _last_result_word_index = 0;
85 var _start_result_word_index = 0;
86 var _unbroken_word_chain = false;
87 for(var y = 0; y < low_words.length; y++){
88
89 if(_stopwords.indexOf(low_words[y]) < 0){
90
91 if(_last_result_word_index !== y - 1){
92 _start_result_word_index = y;
93 _unbroken_word_chain = false;
94 } else {
95 _unbroken_word_chain = true;
96 }
97 var result_word = return_changed_case && !unchanged_words[y].match(/https?:\/\/.*[\r\n]*/g) ? low_words[y] : unchanged_words[y];
98
99 if (return_max_ngrams && _unbroken_word_chain && !return_chained_words && return_max_ngrams > (y - _start_result_word_index) && _last_result_word_index === y - 1){
100 var change_pos = results.length - 1 < 0 ? 0 : results.length - 1;
101 results[change_pos] = results[change_pos] ? results[change_pos] + ' ' + result_word : result_word;
102 } else if (return_chained_words && _last_result_word_index === y - 1) {
103 var change_pos = results.length - 1 < 0 ? 0 : results.length - 1;
104 results[change_pos] = results[change_pos] ? results[change_pos] + ' ' + result_word : result_word;
105 } else {
106 results.push(result_word);
107 }
108
109 _last_result_word_index = y;
110 } else {
111 _unbroken_word_chain = false;
112 }
113 }
114
115 if(_remove_duplicates) {
116 results= _.uniq(results, function (item) {
117 return item;
118 });
119 }
120
121 return results;
122 }
123}
124
125function _getStopwords(options){
126 options = options || {};
127
128 var _language = options.language || "english";
129 if(supported_languages.indexOf(_language) < 0){
130 throw new Error("Language must be one of ["+supported_languages.join(",")+"]");
131 }
132
133 return stopwords[_language];
134}
135
136module.exports = {
137 extract:_extract,
138 getStopwords: _getStopwords
139};
140
141},{"./stopwords/stopwords":16,"underscore":18,"underscore.string":17}],3:[function(require,module,exports){
142// Danish stopwords
143// http://www.ranks.nl/stopwords/danish
144// https://github.com/dnohr
145
146module.exports = {
147 stopwords: [
148 "ad",
149 "af",
150 "aldrig",
151 "alle",
152 "alt",
153 "altid",
154 "anden",
155 "andet",
156 "andre",
157 "at",
158 "bagved",
159 "begge",
160 "blev",
161 "blive",
162 "bliver",
163 "da",
164 "de",
165 "dem",
166 "den",
167 "denne",
168 "der",
169 "deres",
170 "det",
171 "dette",
172 "dig",
173 "din",
174 "disse",
175 "dog",
176 "du",
177 "efter",
178 "ej",
179 "eller",
180 "en",
181 "end",
182 "endnu",
183 "ene",
184 "eneste",
185 "enhver",
186 "er",
187 "et",
188 "fem",
189 "fire",
190 "fjernt",
191 "flere",
192 "fleste",
193 "for",
194 "foran",
195 "fordi",
196 "forrige",
197 "fra",
198 "få",
199 "før",
200 "gennem",
201 "god",
202 "ham",
203 "han",
204 "hans",
205 "har",
206 "havde",
207 "have",
208 "hende",
209 "hendes",
210 "her",
211 "hos",
212 "hovfor",
213 "hun",
214 "hurtig",
215 "hvad",
216 "hvem",
217 "hver",
218 "hvilken",
219 "hvis",
220 "hvonår",
221 "hvor",
222 "hvordan",
223 "hvorfor",
224 "hvorhen",
225 "hvornår",
226 "i",
227 "ikke",
228 "imod",
229 "ind",
230 "ingen",
231 "intet",
232 "ja",
233 "jeg",
234 "jer",
235 "jeres",
236 "jo",
237 "kan",
238 "kom",
239 "kommer",
240 "kunne",
241 "langsom",
242 "lav",
243 "lidt",
244 "lille",
245 "man",
246 "mand",
247 "mange",
248 "med",
249 "meget",
250 "mellem",
251 "men",
252 "mens",
253 "mere",
254 "mig",
255 "min",
256 "mindre",
257 "mine",
258 "mit",
259 "mod",
260 "måske",
261 "ned",
262 "nede",
263 "nej",
264 "ni",
265 "nogen",
266 "noget",
267 "nogle",
268 "nok",
269 "nu",
270 "ny",
271 "nyt",
272 "når",
273 "nær",
274 "næste",
275 "næsten",
276 "og",
277 "også",
278 "om",
279 "op",
280 "oppe",
281 "os",
282 "otte",
283 "over",
284 "på",
285 "rask",
286 "sammen",
287 "se",
288 "seks",
289 "selv",
290 "ses",
291 "sig",
292 "sin",
293 "sine",
294 "sit",
295 "skal",
296 "skulle",
297 "som",
298 "stor",
299 "store",
300 "syv",
301 "sådan",
302 "temmelig",
303 "thi",
304 "ti",
305 "til",
306 "to",
307 "tre",
308 "ud",
309 "uden",
310 "udenfor",
311 "under",
312 "var",
313 "ved",
314 "vi",
315 "vil",
316 "ville",
317 "vor",
318 "være",
319 "været"
320 ]
321};
322},{}],4:[function(require,module,exports){
323/**
324 * Created by jan on 9-3-15.
325 */
326// German stopwords
327// via https://code.google.com/p/stop-words/
328module.exports = {
329 stopwords: [
330 "a",
331 "ab",
332 "aber",
333 "ach",
334 "acht",
335 "achte",
336 "achten",
337 "achter",
338 "achtes",
339 "ag",
340 "alle",
341 "allein",
342 "allem",
343 "allen",
344 "aller",
345 "allerdings",
346 "alles",
347 "allgemeinen",
348 "als",
349 "also",
350 "am",
351 "an",
352 "andere",
353 "anderen",
354 "andern",
355 "anders",
356 "au",
357 "auch",
358 "auf",
359 "aus",
360 "ausser",
361 "außer",
362 "ausserdem",
363 "außerdem",
364 "b",
365 "bald",
366 "bei",
367 "beide",
368 "beiden",
369 "beim",
370 "beispiel",
371 "bekannt",
372 "bereits",
373 "besonders",
374 "besser",
375 "besten",
376 "bin",
377 "bis",
378 "bisher",
379 "bist",
380 "c",
381 "d",
382 "da",
383 "dabei",
384 "dadurch",
385 "dafür",
386 "dagegen",
387 "daher",
388 "dahin",
389 "dahinter",
390 "damals",
391 "damit",
392 "danach",
393 "daneben",
394 "dank",
395 "dann",
396 "daran",
397 "darauf",
398 "daraus",
399 "darf",
400 "darfst",
401 "darin",
402 "darüber",
403 "darum",
404 "darunter",
405 "das",
406 "dasein",
407 "daselbst",
408 "dass",
409 "daß",
410 "dasselbe",
411 "davon",
412 "davor",
413 "dazu",
414 "dazwischen",
415 "dein",
416 "deine",
417 "deinem",
418 "deiner",
419 "dem",
420 "dementsprechend",
421 "demgegenüber",
422 "demgemäss",
423 "demgemäß",
424 "demselben",
425 "demzufolge",
426 "den",
427 "denen",
428 "denn",
429 "denselben",
430 "der",
431 "deren",
432 "derjenige",
433 "derjenigen",
434 "dermassen",
435 "dermaßen",
436 "derselbe",
437 "derselben",
438 "des",
439 "deshalb",
440 "desselben",
441 "dessen",
442 "deswegen",
443 "d.h",
444 "dich",
445 "die",
446 "diejenige",
447 "diejenigen",
448 "dies",
449 "diese",
450 "dieselbe",
451 "dieselben",
452 "diesem",
453 "diesen",
454 "dieser",
455 "dieses",
456 "dir",
457 "doch",
458 "dort",
459 "drei",
460 "drin",
461 "dritte",
462 "dritten",
463 "dritter",
464 "drittes",
465 "du",
466 "durch",
467 "durchaus",
468 "dürfen",
469 "dürft",
470 "durfte",
471 "durften",
472 "e",
473 "eben",
474 "ebenso",
475 "ehrlich",
476 "ei",
477 "ei,",
478 "eigen",
479 "eigene",
480 "eigenen",
481 "eigener",
482 "eigenes",
483 "ein",
484 "einander",
485 "eine",
486 "einem",
487 "einen",
488 "einer",
489 "eines",
490 "einige",
491 "einigen",
492 "einiger",
493 "einiges",
494 "einmal",
495 "eins",
496 "elf",
497 "en",
498 "ende",
499 "endlich",
500 "entweder",
501 "er",
502 "Ernst",
503 "erst",
504 "erste",
505 "ersten",
506 "erster",
507 "erstes",
508 "es",
509 "etwa",
510 "etwas",
511 "euch",
512 "f",
513 "früher",
514 "fünf",
515 "fünfte",
516 "fünften",
517 "fünfter",
518 "fünftes",
519 "für",
520 "g",
521 "gab",
522 "ganz",
523 "ganze",
524 "ganzen",
525 "ganzer",
526 "ganzes",
527 "gar",
528 "gedurft",
529 "gegen",
530 "gegenüber",
531 "gehabt",
532 "gehen",
533 "geht",
534 "gekannt",
535 "gekonnt",
536 "gemacht",
537 "gemocht",
538 "gemusst",
539 "genug",
540 "gerade",
541 "gern",
542 "gesagt",
543 "geschweige",
544 "gewesen",
545 "gewollt",
546 "geworden",
547 "gibt",
548 "ging",
549 "gleich",
550 "gott",
551 "gross",
552 "groß",
553 "grosse",
554 "große",
555 "grossen",
556 "großen",
557 "grosser",
558 "großer",
559 "grosses",
560 "großes",
561 "gut",
562 "gute",
563 "guter",
564 "gutes",
565 "h",
566 "habe",
567 "haben",
568 "habt",
569 "hast",
570 "hat",
571 "hatte",
572 "hätte",
573 "hatten",
574 "hätten",
575 "heisst",
576 "her",
577 "heute",
578 "hier",
579 "hin",
580 "hinter",
581 "hoch",
582 "i",
583 "ich",
584 "ihm",
585 "ihn",
586 "ihnen",
587 "ihr",
588 "ihre",
589 "ihrem",
590 "ihren",
591 "ihrer",
592 "ihres",
593 "im",
594 "immer",
595 "in",
596 "indem",
597 "infolgedessen",
598 "ins",
599 "irgend",
600 "ist",
601 "j",
602 "ja",
603 "jahr",
604 "jahre",
605 "jahren",
606 "je",
607 "jede",
608 "jedem",
609 "jeden",
610 "jeder",
611 "jedermann",
612 "jedermanns",
613 "jedoch",
614 "jemand",
615 "jemandem",
616 "jemanden",
617 "jene",
618 "jenem",
619 "jenen",
620 "jener",
621 "jenes",
622 "jetzt",
623 "k",
624 "kam",
625 "kann",
626 "kannst",
627 "kaum",
628 "kein",
629 "keine",
630 "keinem",
631 "keinen",
632 "keiner",
633 "kleine",
634 "kleinen",
635 "kleiner",
636 "kleines",
637 "kommen",
638 "kommt",
639 "können",
640 "könnt",
641 "konnte",
642 "könnte",
643 "konnten",
644 "kurz",
645 "l",
646 "lang",
647 "lange",
648 "leicht",
649 "leide",
650 "lieber",
651 "los",
652 "m",
653 "machen",
654 "macht",
655 "machte",
656 "mag",
657 "magst",
658 "mahn",
659 "man",
660 "manche",
661 "manchem",
662 "manchen",
663 "mancher",
664 "manches",
665 "mann",
666 "mehr",
667 "mein",
668 "meine",
669 "meinem",
670 "meinen",
671 "meiner",
672 "meines",
673 "mensch",
674 "menschen",
675 "mich",
676 "mir",
677 "mit",
678 "mittel",
679 "mochte",
680 "möchte",
681 "mochten",
682 "mögen",
683 "möglich",
684 "mögt",
685 "morgen",
686 "muss",
687 "muß",
688 "müssen",
689 "musst",
690 "müsst",
691 "musste",
692 "mussten",
693 "n",
694 "na",
695 "nach",
696 "nachdem",
697 "nahm",
698 "natürlich",
699 "neben",
700 "nein",
701 "neue",
702 "neuen",
703 "neun",
704 "neunte",
705 "neunten",
706 "neunter",
707 "neuntes",
708 "nicht",
709 "nichts",
710 "nie",
711 "niemand",
712 "niemandem",
713 "niemanden",
714 "noch",
715 "nun",
716 "nur",
717 "o",
718 "ob",
719 "oben",
720 "oder",
721 "offen",
722 "oft",
723 "ohne",
724 "Ordnung",
725 "p",
726 "q",
727 "r",
728 "recht",
729 "rechte",
730 "rechten",
731 "rechter",
732 "rechtes",
733 "richtig",
734 "rund",
735 "s",
736 "sa",
737 "sache",
738 "sagt",
739 "sagte",
740 "sah",
741 "satt",
742 "schlecht",
743 "Schluss",
744 "schon",
745 "sechs",
746 "sechste",
747 "sechsten",
748 "sechster",
749 "sechstes",
750 "sehr",
751 "sei",
752 "seid",
753 "seien",
754 "sein",
755 "seine",
756 "seinem",
757 "seinen",
758 "seiner",
759 "seines",
760 "seit",
761 "seitdem",
762 "selbst",
763 "sich",
764 "sie",
765 "sieben",
766 "siebente",
767 "siebenten",
768 "siebenter",
769 "siebentes",
770 "sind",
771 "so",
772 "solang",
773 "solche",
774 "solchem",
775 "solchen",
776 "solcher",
777 "solches",
778 "soll",
779 "sollen",
780 "sollte",
781 "sollten",
782 "sondern",
783 "sonst",
784 "sowie",
785 "später",
786 "statt",
787 "t",
788 "tag",
789 "tage",
790 "tagen",
791 "tat",
792 "teil",
793 "tel",
794 "tritt",
795 "trotzdem",
796 "tun",
797 "u",
798 "über",
799 "überhaupt",
800 "übrigens",
801 "uhr",
802 "um",
803 "und",
804 "und?",
805 "uns",
806 "unser",
807 "unsere",
808 "unserer",
809 "unter",
810 "v",
811 "vergangenen",
812 "viel",
813 "viele",
814 "vielem",
815 "vielen",
816 "vielleicht",
817 "vier",
818 "vierte",
819 "vierten",
820 "vierter",
821 "viertes",
822 "vom",
823 "von",
824 "vor",
825 "w",
826 "wahr?",
827 "während",
828 "währenddem",
829 "währenddessen",
830 "wann",
831 "war",
832 "wäre",
833 "waren",
834 "wart",
835 "warum",
836 "was",
837 "wegen",
838 "weil",
839 "weit",
840 "weiter",
841 "weitere",
842 "weiteren",
843 "weiteres",
844 "welche",
845 "welchem",
846 "welchen",
847 "welcher",
848 "welches",
849 "wem",
850 "wen",
851 "wenig",
852 "wenige",
853 "weniger",
854 "weniges",
855 "wenigstens",
856 "wenn",
857 "wer",
858 "werde",
859 "werden",
860 "werdet",
861 "wessen",
862 "wie",
863 "wieder",
864 "will",
865 "willst",
866 "wir",
867 "wird",
868 "wirklich",
869 "wirst",
870 "wo",
871 "wohl",
872 "wollen",
873 "wollt",
874 "wollte",
875 "wollten",
876 "worden",
877 "wurde",
878 "würde",
879 "wurden",
880 "würden",
881 "x",
882 "y",
883 "z",
884 "z.b",
885 "zehn",
886 "zehnte",
887 "zehnten",
888 "zehnter",
889 "zehntes",
890 "zeit",
891 "zu",
892 "zuerst",
893 "zugleich",
894 "zum",
895 "zunächst",
896 "zur",
897 "zurück",
898 "zusammen",
899 "zwanzig",
900 "zwar",
901 "zwei",
902 "zweite",
903 "zweiten",
904 "zweiter",
905 "zweites",
906 "zwischen",
907 "zwölf",
908 "aber",
909 "euer",
910 "eure",
911 "hattest",
912 "hattet",
913 "jedes",
914 "mußt",
915 "müßt",
916 "sollst",
917 "sollt",
918 "soweit",
919 "weshalb",
920 "wieso",
921 "woher",
922 "wohin"
923 ]
924
925};
926},{}],5:[function(require,module,exports){
927// via http://jmlr.org/papers/volume5/lewis04a/a11-smart-stop-list/english.stop
928module.exports = {
929 stopwords:[
930 "a",
931 "a's",
932 "able",
933 "about",
934 "above",
935 "according",
936 "accordingly",
937 "across",
938 "actually",
939 "after",
940 "afterwards",
941 "again",
942 "against",
943 "ain't",
944 "all",
945 "allow",
946 "allows",
947 "almost",
948 "alone",
949 "along",
950 "already",
951 "also",
952 "although",
953 "always",
954 "am",
955 "among",
956 "amongst",
957 "an",
958 "and",
959 "another",
960 "any",
961 "anybody",
962 "anyhow",
963 "anyone",
964 "anything",
965 "anyway",
966 "anyways",
967 "anywhere",
968 "apart",
969 "appear",
970 "appreciate",
971 "appropriate",
972 "are",
973 "aren't",
974 "around",
975 "as",
976 "aside",
977 "ask",
978 "asking",
979 "associated",
980 "at",
981 "available",
982 "away",
983 "awfully",
984 "b",
985 "be",
986 "became",
987 "because",
988 "become",
989 "becomes",
990 "becoming",
991 "been",
992 "before",
993 "beforehand",
994 "behind",
995 "being",
996 "believe",
997 "below",
998 "beside",
999 "besides",
1000 "best",
1001 "better",
1002 "between",
1003 "beyond",
1004 "both",
1005 "brief",
1006 "but",
1007 "by",
1008 "c",
1009 "c'mon",
1010 "c's",
1011 "came",
1012 "can",
1013 "can't",
1014 "cannot",
1015 "cant",
1016 "cause",
1017 "causes",
1018 "certain",
1019 "certainly",
1020 "changes",
1021 "clearly",
1022 "co",
1023 "com",
1024 "come",
1025 "comes",
1026 "concerning",
1027 "consequently",
1028 "consider",
1029 "considering",
1030 "contain",
1031 "containing",
1032 "contains",
1033 "corresponding",
1034 "could",
1035 "couldn't",
1036 "course",
1037 "currently",
1038 "d",
1039 "definitely",
1040 "described",
1041 "despite",
1042 "did",
1043 "didn't",
1044 "different",
1045 "do",
1046 "does",
1047 "doesn't",
1048 "doing",
1049 "don't",
1050 "done",
1051 "down",
1052 "downwards",
1053 "during",
1054 "e",
1055 "each",
1056 "edu",
1057 "eg",
1058 "eight",
1059 "either",
1060 "else",
1061 "elsewhere",
1062 "enough",
1063 "entirely",
1064 "especially",
1065 "et",
1066 "etc",
1067 "even",
1068 "ever",
1069 "every",
1070 "everybody",
1071 "everyone",
1072 "everything",
1073 "everywhere",
1074 "ex",
1075 "exactly",
1076 "example",
1077 "except",
1078 "f",
1079 "far",
1080 "few",
1081 "fifth",
1082 "first",
1083 "five",
1084 "followed",
1085 "following",
1086 "follows",
1087 "for",
1088 "former",
1089 "formerly",
1090 "forth",
1091 "four",
1092 "from",
1093 "further",
1094 "furthermore",
1095 "g",
1096 "get",
1097 "gets",
1098 "getting",
1099 "given",
1100 "gives",
1101 "go",
1102 "goes",
1103 "going",
1104 "gone",
1105 "got",
1106 "gotten",
1107 "greetings",
1108 "h",
1109 "had",
1110 "hadn't",
1111 "happens",
1112 "hardly",
1113 "has",
1114 "hasn't",
1115 "have",
1116 "haven't",
1117 "having",
1118 "he",
1119 "he's",
1120 "hello",
1121 "help",
1122 "hence",
1123 "her",
1124 "here",
1125 "here's",
1126 "hereafter",
1127 "hereby",
1128 "herein",
1129 "hereupon",
1130 "hers",
1131 "herself",
1132 "hi",
1133 "him",
1134 "himself",
1135 "his",
1136 "hither",
1137 "hopefully",
1138 "how",
1139 "howbeit",
1140 "however",
1141 "i",
1142 "i'd",
1143 "i'll",
1144 "i'm",
1145 "i've",
1146 "ie",
1147 "if",
1148 "ignored",
1149 "immediate",
1150 "in",
1151 "inasmuch",
1152 "inc",
1153 "indeed",
1154 "indicate",
1155 "indicated",
1156 "indicates",
1157 "inner",
1158 "insofar",
1159 "instead",
1160 "into",
1161 "inward",
1162 "is",
1163 "isn't",
1164 "it",
1165 "it'd",
1166 "it'll",
1167 "it's",
1168 "its",
1169 "itself",
1170 "j",
1171 "just",
1172 "k",
1173 "keep",
1174 "keeps",
1175 "kept",
1176 "know",
1177 "knows",
1178 "known",
1179 "l",
1180 "last",
1181 "lately",
1182 "later",
1183 "latter",
1184 "latterly",
1185 "least",
1186 "less",
1187 "lest",
1188 "let",
1189 "let's",
1190 "like",
1191 "liked",
1192 "likely",
1193 "little",
1194 "look",
1195 "looking",
1196 "looks",
1197 "ltd",
1198 "m",
1199 "mainly",
1200 "many",
1201 "may",
1202 "maybe",
1203 "me",
1204 "mean",
1205 "meanwhile",
1206 "merely",
1207 "might",
1208 "more",
1209 "moreover",
1210 "most",
1211 "mostly",
1212 "much",
1213 "must",
1214 "my",
1215 "myself",
1216 "n",
1217 "name",
1218 "namely",
1219 "nd",
1220 "near",
1221 "nearly",
1222 "necessary",
1223 "need",
1224 "needs",
1225 "neither",
1226 "never",
1227 "nevertheless",
1228 "new",
1229 "next",
1230 "nine",
1231 "no",
1232 "nobody",
1233 "non",
1234 "none",
1235 "noone",
1236 "nor",
1237 "normally",
1238 "not",
1239 "nothing",
1240 "novel",
1241 "now",
1242 "nowhere",
1243 "o",
1244 "obviously",
1245 "of",
1246 "off",
1247 "often",
1248 "oh",
1249 "ok",
1250 "okay",
1251 "old",
1252 "on",
1253 "once",
1254 "one",
1255 "ones",
1256 "only",
1257 "onto",
1258 "or",
1259 "other",
1260 "others",
1261 "otherwise",
1262 "ought",
1263 "our",
1264 "ours",
1265 "ourselves",
1266 "out",
1267 "outside",
1268 "over",
1269 "overall",
1270 "own",
1271 "p",
1272 "particular",
1273 "particularly",
1274 "per",
1275 "perhaps",
1276 "placed",
1277 "please",
1278 "plus",
1279 "possible",
1280 "presumably",
1281 "probably",
1282 "provides",
1283 "q",
1284 "que",
1285 "quite",
1286 "qv",
1287 "r",
1288 "rather",
1289 "rd",
1290 "re",
1291 "really",
1292 "reasonably",
1293 "regarding",
1294 "regardless",
1295 "regards",
1296 "relatively",
1297 "respectively",
1298 "right",
1299 "s",
1300 "said",
1301 "same",
1302 "saw",
1303 "say",
1304 "saying",
1305 "says",
1306 "second",
1307 "secondly",
1308 "see",
1309 "seeing",
1310 "seem",
1311 "seemed",
1312 "seeming",
1313 "seems",
1314 "seen",
1315 "self",
1316 "selves",
1317 "sensible",
1318 "sent",
1319 "serious",
1320 "seriously",
1321 "seven",
1322 "several",
1323 "shall",
1324 "she",
1325 "should",
1326 "shouldn't",
1327 "since",
1328 "six",
1329 "so",
1330 "some",
1331 "somebody",
1332 "somehow",
1333 "someone",
1334 "something",
1335 "sometime",
1336 "sometimes",
1337 "somewhat",
1338 "somewhere",
1339 "soon",
1340 "sorry",
1341 "specified",
1342 "specify",
1343 "specifying",
1344 "still",
1345 "sub",
1346 "such",
1347 "sup",
1348 "sure",
1349 "t",
1350 "t's",
1351 "take",
1352 "taken",
1353 "tell",
1354 "tends",
1355 "th",
1356 "than",
1357 "thank",
1358 "thanks",
1359 "thanx",
1360 "that",
1361 "that's",
1362 "thats",
1363 "the",
1364 "their",
1365 "theirs",
1366 "them",
1367 "themselves",
1368 "then",
1369 "thence",
1370 "there",
1371 "there's",
1372 "thereafter",
1373 "thereby",
1374 "therefore",
1375 "therein",
1376 "theres",
1377 "thereupon",
1378 "these",
1379 "they",
1380 "they'd",
1381 "they'll",
1382 "they're",
1383 "they've",
1384 "think",
1385 "third",
1386 "this",
1387 "thorough",
1388 "thoroughly",
1389 "those",
1390 "though",
1391 "three",
1392 "through",
1393 "throughout",
1394 "thru",
1395 "thus",
1396 "to",
1397 "together",
1398 "too",
1399 "took",
1400 "toward",
1401 "towards",
1402 "tried",
1403 "tries",
1404 "truly",
1405 "try",
1406 "trying",
1407 "twice",
1408 "two",
1409 "u",
1410 "un",
1411 "under",
1412 "unfortunately",
1413 "unless",
1414 "unlikely",
1415 "until",
1416 "unto",
1417 "up",
1418 "upon",
1419 "us",
1420 "use",
1421 "used",
1422 "useful",
1423 "uses",
1424 "using",
1425 "usually",
1426 "uucp",
1427 "v",
1428 "value",
1429 "various",
1430 "very",
1431 "via",
1432 "viz",
1433 "vs",
1434 "w",
1435 "want",
1436 "wants",
1437 "was",
1438 "wasn't",
1439 "way",
1440 "we",
1441 "we'd",
1442 "we'll",
1443 "we're",
1444 "we've",
1445 "welcome",
1446 "well",
1447 "went",
1448 "were",
1449 "weren't",
1450 "what",
1451 "what's",
1452 "whatever",
1453 "when",
1454 "whence",
1455 "whenever",
1456 "where",
1457 "where's",
1458 "whereafter",
1459 "whereas",
1460 "whereby",
1461 "wherein",
1462 "whereupon",
1463 "wherever",
1464 "whether",
1465 "which",
1466 "while",
1467 "whither",
1468 "who",
1469 "who's",
1470 "whoever",
1471 "whole",
1472 "whom",
1473 "whose",
1474 "why",
1475 "will",
1476 "willing",
1477 "wish",
1478 "with",
1479 "within",
1480 "without",
1481 "won't",
1482 "wonder",
1483 "would",
1484 "would",
1485 "wouldn't",
1486 "x",
1487 "y",
1488 "yes",
1489 "yet",
1490 "you",
1491 "you'd",
1492 "you'll",
1493 "you're",
1494 "you've",
1495 "your",
1496 "yours",
1497 "yourself",
1498 "yourselves",
1499 "z",
1500 "zero"
1501 ]
1502};
1503},{}],6:[function(require,module,exports){
1504// via https://stop-words.googlecode.com/svn/trunk/stop-words/stop-words/stop-words-spanish.txt
1505module.exports = {
1506 stopwords: [
1507 '0',
1508 '1',
1509 '2',
1510 '3',
1511 '4',
1512 '5',
1513 '6',
1514 '7',
1515 '8',
1516 '9',
1517 '_',
1518 'a',
1519 'actualmente',
1520 'acuerdo',
1521 'adelante',
1522 'ademas',
1523 'además',
1524 'adrede',
1525 'afirmó',
1526 'agregó',
1527 'ahi',
1528 'ahora',
1529 'ahí',
1530 'al',
1531 'algo',
1532 'alguna',
1533 'algunas',
1534 'alguno',
1535 'algunos',
1536 'algún',
1537 'alli',
1538 'allí',
1539 'alrededor',
1540 'ambos',
1541 'ampleamos',
1542 'antano',
1543 'antaño',
1544 'ante',
1545 'anterior',
1546 'antes',
1547 'apenas',
1548 'aproximadamente',
1549 'aquel',
1550 'aquella',
1551 'aquellas',
1552 'aquello',
1553 'aquellos',
1554 'aqui',
1555 'aquél',
1556 'aquélla',
1557 'aquéllas',
1558 'aquéllos',
1559 'aquí',
1560 'arriba',
1561 'arribaabajo',
1562 'aseguró',
1563 'asi',
1564 'así',
1565 'atras',
1566 'aun',
1567 'aunque',
1568 'ayer',
1569 'añadió',
1570 'aún',
1571 'b',
1572 'bajo',
1573 'bastante',
1574 'bien',
1575 'breve',
1576 'buen',
1577 'buena',
1578 'buenas',
1579 'bueno',
1580 'buenos',
1581 'c',
1582 'cada',
1583 'casi',
1584 'cerca',
1585 'cierta',
1586 'ciertas',
1587 'cierto',
1588 'ciertos',
1589 'cinco',
1590 'claro',
1591 'comentó',
1592 'como',
1593 'con',
1594 'conmigo',
1595 'conocer',
1596 'conseguimos',
1597 'conseguir',
1598 'considera',
1599 'consideró',
1600 'consigo',
1601 'consigue',
1602 'consiguen',
1603 'consigues',
1604 'contigo',
1605 'contra',
1606 'cosas',
1607 'creo',
1608 'cual',
1609 'cuales',
1610 'cualquier',
1611 'cuando',
1612 'cuanta',
1613 'cuantas',
1614 'cuanto',
1615 'cuantos',
1616 'cuatro',
1617 'cuenta',
1618 'cuál',
1619 'cuáles',
1620 'cuándo',
1621 'cuánta',
1622 'cuántas',
1623 'cuánto',
1624 'cuántos',
1625 'cómo',
1626 'd',
1627 'da',
1628 'dado',
1629 'dan',
1630 'dar',
1631 'de',
1632 'debajo',
1633 'debe',
1634 'deben',
1635 'debido',
1636 'decir',
1637 'dejó',
1638 'del',
1639 'delante',
1640 'demasiado',
1641 'demás',
1642 'dentro',
1643 'deprisa',
1644 'desde',
1645 'despacio',
1646 'despues',
1647 'después',
1648 'detras',
1649 'detrás',
1650 'dia',
1651 'dias',
1652 'dice',
1653 'dicen',
1654 'dicho',
1655 'dieron',
1656 'diferente',
1657 'diferentes',
1658 'dijeron',
1659 'dijo',
1660 'dio',
1661 'donde',
1662 'dos',
1663 'durante',
1664 'día',
1665 'días',
1666 'dónde',
1667 'e',
1668 'ejemplo',
1669 'el',
1670 'ella',
1671 'ellas',
1672 'ello',
1673 'ellos',
1674 'embargo',
1675 'empleais',
1676 'emplean',
1677 'emplear',
1678 'empleas',
1679 'empleo',
1680 'en',
1681 'encima',
1682 'encuentra',
1683 'enfrente',
1684 'enseguida',
1685 'entonces',
1686 'entre',
1687 'era',
1688 'erais',
1689 'eramos',
1690 'eran',
1691 'eras',
1692 'eres',
1693 'es',
1694 'esa',
1695 'esas',
1696 'ese',
1697 'eso',
1698 'esos',
1699 'esta',
1700 'estaba',
1701 'estabais',
1702 'estaban',
1703 'estabas',
1704 'estad',
1705 'estada',
1706 'estadas',
1707 'estado',
1708 'estados',
1709 'estais',
1710 'estamos',
1711 'estan',
1712 'estando',
1713 'estar',
1714 'estaremos',
1715 'estará',
1716 'estarán',
1717 'estarás',
1718 'estaré',
1719 'estaréis',
1720 'estaría',
1721 'estaríais',
1722 'estaríamos',
1723 'estarían',
1724 'estarías',
1725 'estas',
1726 'este',
1727 'estemos',
1728 'esto',
1729 'estos',
1730 'estoy',
1731 'estuve',
1732 'estuviera',
1733 'estuvierais',
1734 'estuvieran',
1735 'estuvieras',
1736 'estuvieron',
1737 'estuviese',
1738 'estuvieseis',
1739 'estuviesen',
1740 'estuvieses',
1741 'estuvimos',
1742 'estuviste',
1743 'estuvisteis',
1744 'estuviéramos',
1745 'estuviésemos',
1746 'estuvo',
1747 'está',
1748 'estábamos',
1749 'estáis',
1750 'están',
1751 'estás',
1752 'esté',
1753 'estéis',
1754 'estén',
1755 'estés',
1756 'ex',
1757 'excepto',
1758 'existe',
1759 'existen',
1760 'explicó',
1761 'expresó',
1762 'f',
1763 'fin',
1764 'final',
1765 'fue',
1766 'fuera',
1767 'fuerais',
1768 'fueran',
1769 'fueras',
1770 'fueron',
1771 'fuese',
1772 'fueseis',
1773 'fuesen',
1774 'fueses',
1775 'fui',
1776 'fuimos',
1777 'fuiste',
1778 'fuisteis',
1779 'fuéramos',
1780 'fuésemos',
1781 'g',
1782 'general',
1783 'gran',
1784 'grandes',
1785 'gueno',
1786 'h',
1787 'ha',
1788 'haber',
1789 'habia',
1790 'habida',
1791 'habidas',
1792 'habido',
1793 'habidos',
1794 'habiendo',
1795 'habla',
1796 'hablan',
1797 'habremos',
1798 'habrá',
1799 'habrán',
1800 'habrás',
1801 'habré',
1802 'habréis',
1803 'habría',
1804 'habríais',
1805 'habríamos',
1806 'habrían',
1807 'habrías',
1808 'habéis',
1809 'había',
1810 'habíais',
1811 'habíamos',
1812 'habían',
1813 'habías',
1814 'hace',
1815 'haceis',
1816 'hacemos',
1817 'hacen',
1818 'hacer',
1819 'hacerlo',
1820 'haces',
1821 'hacia',
1822 'haciendo',
1823 'hago',
1824 'han',
1825 'has',
1826 'hasta',
1827 'hay',
1828 'haya',
1829 'hayamos',
1830 'hayan',
1831 'hayas',
1832 'hayáis',
1833 'he',
1834 'hecho',
1835 'hemos',
1836 'hicieron',
1837 'hizo',
1838 'horas',
1839 'hoy',
1840 'hube',
1841 'hubiera',
1842 'hubierais',
1843 'hubieran',
1844 'hubieras',
1845 'hubieron',
1846 'hubiese',
1847 'hubieseis',
1848 'hubiesen',
1849 'hubieses',
1850 'hubimos',
1851 'hubiste',
1852 'hubisteis',
1853 'hubiéramos',
1854 'hubiésemos',
1855 'hubo',
1856 'i',
1857 'igual',
1858 'incluso',
1859 'indicó',
1860 'informo',
1861 'informó',
1862 'intenta',
1863 'intentais',
1864 'intentamos',
1865 'intentan',
1866 'intentar',
1867 'intentas',
1868 'intento',
1869 'ir',
1870 'j',
1871 'junto',
1872 'k',
1873 'l',
1874 'la',
1875 'lado',
1876 'largo',
1877 'las',
1878 'le',
1879 'lejos',
1880 'les',
1881 'llegó',
1882 'lleva',
1883 'llevar',
1884 'lo',
1885 'los',
1886 'luego',
1887 'lugar',
1888 'm',
1889 'mal',
1890 'manera',
1891 'manifestó',
1892 'mas',
1893 'mayor',
1894 'me',
1895 'mediante',
1896 'medio',
1897 'mejor',
1898 'mencionó',
1899 'menos',
1900 'menudo',
1901 'mi',
1902 'mia',
1903 'mias',
1904 'mientras',
1905 'mio',
1906 'mios',
1907 'mis',
1908 'misma',
1909 'mismas',
1910 'mismo',
1911 'mismos',
1912 'modo',
1913 'momento',
1914 'mucha',
1915 'muchas',
1916 'mucho',
1917 'muchos',
1918 'muy',
1919 'más',
1920 'mí',
1921 'mía',
1922 'mías',
1923 'mío',
1924 'míos',
1925 'n',
1926 'nada',
1927 'nadie',
1928 'ni',
1929 'ninguna',
1930 'ningunas',
1931 'ninguno',
1932 'ningunos',
1933 'ningún',
1934 'no',
1935 'nos',
1936 'nosotras',
1937 'nosotros',
1938 'nuestra',
1939 'nuestras',
1940 'nuestro',
1941 'nuestros',
1942 'nueva',
1943 'nuevas',
1944 'nuevo',
1945 'nuevos',
1946 'nunca',
1947 'o',
1948 'ocho',
1949 'os',
1950 'otra',
1951 'otras',
1952 'otro',
1953 'otros',
1954 'p',
1955 'pais',
1956 'para',
1957 'parece',
1958 'parte',
1959 'partir',
1960 'pasada',
1961 'pasado',
1962 'paìs',
1963 'peor',
1964 'pero',
1965 'pesar',
1966 'poca',
1967 'pocas',
1968 'poco',
1969 'pocos',
1970 'podeis',
1971 'podemos',
1972 'poder',
1973 'podria',
1974 'podriais',
1975 'podriamos',
1976 'podrian',
1977 'podrias',
1978 'podrá',
1979 'podrán',
1980 'podría',
1981 'podrían',
1982 'poner',
1983 'por',
1984 'por qué',
1985 'porque',
1986 'posible',
1987 'primer',
1988 'primera',
1989 'primero',
1990 'primeros',
1991 'principalmente',
1992 'pronto',
1993 'propia',
1994 'propias',
1995 'propio',
1996 'propios',
1997 'proximo',
1998 'próximo',
1999 'próximos',
2000 'pudo',
2001 'pueda',
2002 'puede',
2003 'pueden',
2004 'puedo',
2005 'pues',
2006 'q',
2007 'qeu',
2008 'que',
2009 'quedó',
2010 'queremos',
2011 'quien',
2012 'quienes',
2013 'quiere',
2014 'quiza',
2015 'quizas',
2016 'quizá',
2017 'quizás',
2018 'quién',
2019 'quiénes',
2020 'qué',
2021 'r',
2022 'raras',
2023 'realizado',
2024 'realizar',
2025 'realizó',
2026 'repente',
2027 'respecto',
2028 's',
2029 'sabe',
2030 'sabeis',
2031 'sabemos',
2032 'saben',
2033 'saber',
2034 'sabes',
2035 'sal',
2036 'salvo',
2037 'se',
2038 'sea',
2039 'seamos',
2040 'sean',
2041 'seas',
2042 'segun',
2043 'segunda',
2044 'segundo',
2045 'según',
2046 'seis',
2047 'ser',
2048 'sera',
2049 'seremos',
2050 'será',
2051 'serán',
2052 'serás',
2053 'seré',
2054 'seréis',
2055 'sería',
2056 'seríais',
2057 'seríamos',
2058 'serían',
2059 'serías',
2060 'seáis',
2061 'señaló',
2062 'si',
2063 'sido',
2064 'siempre',
2065 'siendo',
2066 'siete',
2067 'sigue',
2068 'siguiente',
2069 'sin',
2070 'sino',
2071 'sobre',
2072 'sois',
2073 'sola',
2074 'solamente',
2075 'solas',
2076 'solo',
2077 'solos',
2078 'somos',
2079 'son',
2080 'soy',
2081 'soyos',
2082 'su',
2083 'supuesto',
2084 'sus',
2085 'suya',
2086 'suyas',
2087 'suyo',
2088 'suyos',
2089 'sé',
2090 'sí',
2091 'sólo',
2092 't',
2093 'tal',
2094 'tambien',
2095 'también',
2096 'tampoco',
2097 'tan',
2098 'tanto',
2099 'tarde',
2100 'te',
2101 'temprano',
2102 'tendremos',
2103 'tendrá',
2104 'tendrán',
2105 'tendrás',
2106 'tendré',
2107 'tendréis',
2108 'tendría',
2109 'tendríais',
2110 'tendríamos',
2111 'tendrían',
2112 'tendrías',
2113 'tened',
2114 'teneis',
2115 'tenemos',
2116 'tener',
2117 'tenga',
2118 'tengamos',
2119 'tengan',
2120 'tengas',
2121 'tengo',
2122 'tengáis',
2123 'tenida',
2124 'tenidas',
2125 'tenido',
2126 'tenidos',
2127 'teniendo',
2128 'tenéis',
2129 'tenía',
2130 'teníais',
2131 'teníamos',
2132 'tenían',
2133 'tenías',
2134 'tercera',
2135 'ti',
2136 'tiempo',
2137 'tiene',
2138 'tienen',
2139 'tienes',
2140 'toda',
2141 'todas',
2142 'todavia',
2143 'todavía',
2144 'todo',
2145 'todos',
2146 'total',
2147 'trabaja',
2148 'trabajais',
2149 'trabajamos',
2150 'trabajan',
2151 'trabajar',
2152 'trabajas',
2153 'trabajo',
2154 'tras',
2155 'trata',
2156 'través',
2157 'tres',
2158 'tu',
2159 'tus',
2160 'tuve',
2161 'tuviera',
2162 'tuvierais',
2163 'tuvieran',
2164 'tuvieras',
2165 'tuvieron',
2166 'tuviese',
2167 'tuvieseis',
2168 'tuviesen',
2169 'tuvieses',
2170 'tuvimos',
2171 'tuviste',
2172 'tuvisteis',
2173 'tuviéramos',
2174 'tuviésemos',
2175 'tuvo',
2176 'tuya',
2177 'tuyas',
2178 'tuyo',
2179 'tuyos',
2180 'tú',
2181 'u',
2182 'ultimo',
2183 'un',
2184 'una',
2185 'unas',
2186 'uno',
2187 'unos',
2188 'usa',
2189 'usais',
2190 'usamos',
2191 'usan',
2192 'usar',
2193 'usas',
2194 'uso',
2195 'usted',
2196 'ustedes',
2197 'v',
2198 'va',
2199 'vais',
2200 'valor',
2201 'vamos',
2202 'van',
2203 'varias',
2204 'varios',
2205 'vaya',
2206 'veces',
2207 'ver',
2208 'verdad',
2209 'verdadera',
2210 'verdadero',
2211 'vez',
2212 'vosotras',
2213 'vosotros',
2214 'voy',
2215 'vuestra',
2216 'vuestras',
2217 'vuestro',
2218 'vuestros',
2219 'w',
2220 'x',
2221 'y',
2222 'ya',
2223 'yo',
2224 'z',
2225 'él',
2226 'éramos',
2227 'ésa',
2228 'ésas',
2229 'ése',
2230 'ésos',
2231 'ésta',
2232 'éstas',
2233 'éste',
2234 'éstos',
2235 'última',
2236 'últimas',
2237 'último',
2238 'últimos'
2239 ]
2240
2241};
2242
2243},{}],7:[function(require,module,exports){
2244/**
2245 * Created by jan on 9-3-15.
2246 */
2247// French stopwords
2248// via https://code.google.com/p/stop-words/
2249
2250module.exports = {
2251 stopwords: [
2252 "a",
2253 "à",
2254 "â",
2255 "abord",
2256 "afin",
2257 "ah",
2258 "ai",
2259 "aie",
2260 "ainsi",
2261 "allaient",
2262 "allo",
2263 "allô",
2264 "allons",
2265 "après",
2266 "assez",
2267 "attendu",
2268 "au",
2269 "aucun",
2270 "aucune",
2271 "aujourd",
2272 "aujourd'hui",
2273 "auquel",
2274 "aura",
2275 "auront",
2276 "aussi",
2277 "autre",
2278 "autres",
2279 "aux",
2280 "auxquelles",
2281 "auxquels",
2282 "avaient",
2283 "avais",
2284 "avait",
2285 "avant",
2286 "avec",
2287 "avoir",
2288 "ayant",
2289 "b",
2290 "bah",
2291 "beaucoup",
2292 "bien",
2293 "bigre",
2294 "boum",
2295 "bravo",
2296 "brrr",
2297 "c",
2298 "ça",
2299 "car",
2300 "ce",
2301 "ceci",
2302 "cela",
2303 "celle",
2304 "celle-ci",
2305 "celle-là",
2306 "celles",
2307 "celles-ci",
2308 "celles-là",
2309 "celui",
2310 "celui-ci",
2311 "celui-là",
2312 "cent",
2313 "cependant",
2314 "certain",
2315 "certaine",
2316 "certaines",
2317 "certains",
2318 "certes",
2319 "ces",
2320 "cet",
2321 "cette",
2322 "ceux",
2323 "ceux-ci",
2324 "ceux-là",
2325 "chacun",
2326 "chaque",
2327 "cher",
2328 "chère",
2329 "chères",
2330 "chers",
2331 "chez",
2332 "chiche",
2333 "chut",
2334 "ci",
2335 "cinq",
2336 "cinquantaine",
2337 "cinquante",
2338 "cinquantième",
2339 "cinquième",
2340 "clac",
2341 "clic",
2342 "combien",
2343 "comme",
2344 "comment",
2345 "compris",
2346 "concernant",
2347 "contre",
2348 "couic",
2349 "crac",
2350 "d",
2351 "da",
2352 "dans",
2353 "de",
2354 "debout",
2355 "dedans",
2356 "dehors",
2357 "delà",
2358 "depuis",
2359 "derrière",
2360 "des",
2361 "dès",
2362 "désormais",
2363 "desquelles",
2364 "desquels",
2365 "dessous",
2366 "dessus",
2367 "deux",
2368 "deuxième",
2369 "deuxièmement",
2370 "devant",
2371 "devers",
2372 "devra",
2373 "différent",
2374 "différente",
2375 "différentes",
2376 "différents",
2377 "dire",
2378 "divers",
2379 "diverse",
2380 "diverses",
2381 "dix",
2382 "dix-huit",
2383 "dixième",
2384 "dix-neuf",
2385 "dix-sept",
2386 "doit",
2387 "doivent",
2388 "donc",
2389 "dont",
2390 "douze",
2391 "douzième",
2392 "dring",
2393 "du",
2394 "duquel",
2395 "durant",
2396 "e",
2397 "effet",
2398 "eh",
2399 "elle",
2400 "elle-même",
2401 "elles",
2402 "elles-mêmes",
2403 "en",
2404 "encore",
2405 "entre",
2406 "envers",
2407 "environ",
2408 "es",
2409 "ès",
2410 "est",
2411 "et",
2412 "etant",
2413 "étaient",
2414 "étais",
2415 "était",
2416 "étant",
2417 "etc",
2418 "été",
2419 "etre",
2420 "être",
2421 "eu",
2422 "euh",
2423 "eux",
2424 "eux-mêmes",
2425 "excepté",
2426 "f",
2427 "façon",
2428 "fais",
2429 "faisaient",
2430 "faisant",
2431 "fait",
2432 "feront",
2433 "fi",
2434 "flac",
2435 "floc",
2436 "font",
2437 "g",
2438 "gens",
2439 "h",
2440 "ha",
2441 "hé",
2442 "hein",
2443 "hélas",
2444 "hem",
2445 "hep",
2446 "hi",
2447 "ho",
2448 "holà",
2449 "hop",
2450 "hormis",
2451 "hors",
2452 "hou",
2453 "houp",
2454 "hue",
2455 "hui",
2456 "huit",
2457 "huitième",
2458 "hum",
2459 "hurrah",
2460 "i",
2461 "il",
2462 "ils",
2463 "importe",
2464 "j",
2465 "je",
2466 "jusqu",
2467 "jusque",
2468 "k",
2469 "l",
2470 "la",
2471 "là",
2472 "laquelle",
2473 "las",
2474 "le",
2475 "lequel",
2476 "les",
2477 "lès",
2478 "lesquelles",
2479 "lesquels",
2480 "leur",
2481 "leurs",
2482 "longtemps",
2483 "lorsque",
2484 "lui",
2485 "lui-même",
2486 "m",
2487 "ma",
2488 "maint",
2489 "mais",
2490 "malgré",
2491 "me",
2492 "même",
2493 "mêmes",
2494 "merci",
2495 "mes",
2496 "mien",
2497 "mienne",
2498 "miennes",
2499 "miens",
2500 "mille",
2501 "mince",
2502 "moi",
2503 "moi-même",
2504 "moins",
2505 "mon",
2506 "moyennant",
2507 "n",
2508 "na",
2509 "ne",
2510 "néanmoins",
2511 "neuf",
2512 "neuvième",
2513 "ni",
2514 "nombreuses",
2515 "nombreux",
2516 "non",
2517 "nos",
2518 "notre",
2519 "nôtre",
2520 "nôtres",
2521 "nous",
2522 "nous-mêmes",
2523 "nul",
2524 "o",
2525 "o|",
2526 "ô",
2527 "oh",
2528 "ohé",
2529 "olé",
2530 "ollé",
2531 "on",
2532 "ont",
2533 "onze",
2534 "onzième",
2535 "ore",
2536 "ou",
2537 "où",
2538 "ouf",
2539 "ouias",
2540 "oust",
2541 "ouste",
2542 "outre",
2543 "p",
2544 "paf",
2545 "pan",
2546 "par",
2547 "parmi",
2548 "partant",
2549 "particulier",
2550 "particulière",
2551 "particulièrement",
2552 "pas",
2553 "passé",
2554 "pendant",
2555 "personne",
2556 "peu",
2557 "peut",
2558 "peuvent",
2559 "peux",
2560 "pff",
2561 "pfft",
2562 "pfut",
2563 "pif",
2564 "plein",
2565 "plouf",
2566 "plus",
2567 "plusieurs",
2568 "plutôt",
2569 "pouah",
2570 "pour",
2571 "pourquoi",
2572 "premier",
2573 "première",
2574 "premièrement",
2575 "près",
2576 "proche",
2577 "psitt",
2578 "puisque",
2579 "q",
2580 "qu",
2581 "quand",
2582 "quant",
2583 "quanta",
2584 "quant-à-soi",
2585 "quarante",
2586 "quatorze",
2587 "quatre",
2588 "quatre-vingt",
2589 "quatrième",
2590 "quatrièmement",
2591 "que",
2592 "quel",
2593 "quelconque",
2594 "quelle",
2595 "quelles",
2596 "quelque",
2597 "quelques",
2598 "quelqu'un",
2599 "quels",
2600 "qui",
2601 "quiconque",
2602 "quinze",
2603 "quoi",
2604 "quoique",
2605 "r",
2606 "revoici",
2607 "revoilà",
2608 "rien",
2609 "s",
2610 "sa",
2611 "sacrebleu",
2612 "sans",
2613 "sapristi",
2614 "sauf",
2615 "se",
2616 "seize",
2617 "selon",
2618 "sept",
2619 "septième",
2620 "sera",
2621 "seront",
2622 "ses",
2623 "si",
2624 "sien",
2625 "sienne",
2626 "siennes",
2627 "siens",
2628 "sinon",
2629 "six",
2630 "sixième",
2631 "soi",
2632 "soi-même",
2633 "soit",
2634 "soixante",
2635 "son",
2636 "sont",
2637 "sous",
2638 "stop",
2639 "suis",
2640 "suivant",
2641 "sur",
2642 "surtout",
2643 "t",
2644 "ta",
2645 "tac",
2646 "tant",
2647 "te",
2648 "té",
2649 "tel",
2650 "telle",
2651 "tellement",
2652 "telles",
2653 "tels",
2654 "tenant",
2655 "tes",
2656 "tic",
2657 "tien",
2658 "tienne",
2659 "tiennes",
2660 "tiens",
2661 "toc",
2662 "toi",
2663 "toi-même",
2664 "ton",
2665 "touchant",
2666 "toujours",
2667 "tous",
2668 "tout",
2669 "toute",
2670 "toutes",
2671 "treize",
2672 "trente",
2673 "très",
2674 "trois",
2675 "troisième",
2676 "troisièmement",
2677 "trop",
2678 "tsoin",
2679 "tsouin",
2680 "tu",
2681 "u",
2682 "un",
2683 "une",
2684 "unes",
2685 "uns",
2686 "v",
2687 "va",
2688 "vais",
2689 "vas",
2690 "vé",
2691 "vers",
2692 "via",
2693 "vif",
2694 "vifs",
2695 "vingt",
2696 "vivat",
2697 "vive",
2698 "vives",
2699 "vlan",
2700 "voici",
2701 "voilà",
2702 "vont",
2703 "vos",
2704 "votre",
2705 "vôtre",
2706 "vôtres",
2707 "vous",
2708 "vous-mêmes",
2709 "vu",
2710 "w",
2711 "x",
2712 "y",
2713 "z",
2714 "zut",
2715 "alors",
2716 "aucuns",
2717 "bon",
2718 "devrait",
2719 "dos",
2720 "droite",
2721 "début",
2722 "essai",
2723 "faites",
2724 "fois",
2725 "force",
2726 "haut",
2727 "ici",
2728 "juste",
2729 "maintenant",
2730 "mine",
2731 "mot",
2732 "nommés",
2733 "nouveaux",
2734 "parce",
2735 "parole",
2736 "personnes",
2737 "pièce",
2738 "plupart",
2739 "seulement",
2740 "soyez",
2741 "sujet",
2742 "tandis",
2743 "valeur",
2744 "voie",
2745 "voient",
2746 "état",
2747 "étions"
2748
2749 ]
2750
2751};
2752
2753},{}],8:[function(require,module,exports){
2754// via http://www.ranks.nl/stopwords/galician
2755module.exports = {
2756 stopwords: [
2757 'a',
2758 'aínda',
2759 'alí',
2760 'aquel',
2761 'aquela',
2762 'aquelas',
2763 'aqueles',
2764 'aquilo',
2765 'aquí',
2766 'ao',
2767 'aos',
2768 'as',
2769 'así',
2770 'á',
2771 'ben',
2772 'cando',
2773 'che',
2774 'co',
2775 'coa',
2776 'comigo',
2777 'con',
2778 'connosco',
2779 'contigo',
2780 'convosco',
2781 'coas',
2782 'cos',
2783 'cun',
2784 'cuns',
2785 'cunha',
2786 'cunhas',
2787 'da',
2788 'dalgunha',
2789 'dalgunhas',
2790 'dalgún',
2791 'dalgúns',
2792 'das',
2793 'de',
2794 'del',
2795 'dela',
2796 'delas',
2797 'deles',
2798 'desde',
2799 'deste',
2800 'do',
2801 'dos',
2802 'dun',
2803 'duns',
2804 'dunha',
2805 'dunhas',
2806 'e',
2807 'el',
2808 'ela',
2809 'elas',
2810 'eles',
2811 'en',
2812 'era',
2813 'eran',
2814 'esa',
2815 'esas',
2816 'ese',
2817 'eses',
2818 'esta',
2819 'estar',
2820 'estaba',
2821 'está',
2822 'están',
2823 'este',
2824 'estes',
2825 'estiven',
2826 'estou',
2827 'eu',
2828 'é',
2829 'facer',
2830 'foi',
2831 'foron',
2832 'fun',
2833 'había',
2834 'hai',
2835 'iso',
2836 'isto',
2837 'la',
2838 'las',
2839 'lle',
2840 'lles',
2841 'lo',
2842 'los',
2843 'mais',
2844 'me',
2845 'meu',
2846 'meus',
2847 'min',
2848 'miña',
2849 'miñas',
2850 'moi',
2851 'na',
2852 'nas',
2853 'neste',
2854 'nin',
2855 'no',
2856 'non',
2857 'nos',
2858 'nosa',
2859 'nosas',
2860 'noso',
2861 'nosos',
2862 'nós',
2863 'nun',
2864 'nunha',
2865 'nuns',
2866 'nunhas',
2867 'o',
2868 'os',
2869 'ou',
2870 'ó',
2871 'ós',
2872 'para',
2873 'pero',
2874 'pode',
2875 'pois',
2876 'pola',
2877 'polas',
2878 'polo',
2879 'polos',
2880 'por',
2881 'que',
2882 'se',
2883 'senón',
2884 'ser',
2885 'seu',
2886 'seus',
2887 'sexa',
2888 'sido',
2889 'sobre',
2890 'súa',
2891 'súas',
2892 'tamén',
2893 'tan',
2894 'te',
2895 'ten',
2896 'teñen',
2897 'teño',
2898 'ter',
2899 'teu',
2900 'teus',
2901 'ti',
2902 'tido',
2903 'tiña',
2904 'tiven',
2905 'túa',
2906 'túas',
2907 'un',
2908 'unha',
2909 'unhas',
2910 'uns',
2911 'vos',
2912 'vosa',
2913 'vosas',
2914 'voso',
2915 'vosos',
2916 'vós'
2917 ]
2918};
2919
2920},{}],9:[function(require,module,exports){
2921/**
2922 * Created by jan on 9-3-15.
2923 */
2924// Italian stopwords
2925// via https://code.google.com/p/stop-words/
2926
2927module.exports = {
2928 stopwords: [
2929 "a",
2930 "adesso",
2931 "ai",
2932 "al",
2933 "alla",
2934 "allo",
2935 "allora",
2936 "altre",
2937 "altri",
2938 "altro",
2939 "anche",
2940 "ancora",
2941 "avere",
2942 "aveva",
2943 "avevano",
2944 "ben",
2945 "buono",
2946 "che",
2947 "chi",
2948 "cinque",
2949 "comprare",
2950 "con",
2951 "consecutivi",
2952 "consecutivo",
2953 "cosa",
2954 "cui",
2955 "da",
2956 "del",
2957 "della",
2958 "dello",
2959 "dentro",
2960 "deve",
2961 "devo",
2962 "di",
2963 "doppio",
2964 "due",
2965 "e",
2966 "ecco",
2967 "fare",
2968 "fine",
2969 "fino",
2970 "fra",
2971 "gente",
2972 "giu",
2973 "ha",
2974 "hai",
2975 "hanno",
2976 "ho",
2977 "il",
2978 "indietro",
2979 "invece",
2980 "io",
2981 "la",
2982 "lavoro",
2983 "le",
2984 "lei",
2985 "lo",
2986 "loro",
2987 "lui",
2988 "lungo",
2989 "ma",
2990 "me",
2991 "meglio",
2992 "molta",
2993 "molti",
2994 "molto",
2995 "nei",
2996 "nella",
2997 "no",
2998 "noi",
2999 "nome",
3000 "nostro",
3001 "nove",
3002 "nuovi",
3003 "nuovo",
3004 "o",
3005 "oltre",
3006 "ora",
3007 "otto",
3008 "peggio",
3009 "pero",
3010 "persone",
3011 "piu",
3012 "poco",
3013 "primo",
3014 "promesso",
3015 "qua",
3016 "quarto",
3017 "quasi",
3018 "quattro",
3019 "quello",
3020 "questo",
3021 "qui",
3022 "quindi",
3023 "quinto",
3024 "rispetto",
3025 "sara",
3026 "secondo",
3027 "sei",
3028 "sembra",
3029 "sembrava",
3030 "senza",
3031 "sette",
3032 "sia",
3033 "siamo",
3034 "siete",
3035 "solo",
3036 "sono",
3037 "sopra",
3038 "soprattutto",
3039 "sotto",
3040 "stati",
3041 "stato",
3042 "stesso",
3043 "su",
3044 "subito",
3045 "sul",
3046 "sulla",
3047 "tanto",
3048 "te",
3049 "tempo",
3050 "terzo",
3051 "tra",
3052 "tre",
3053 "triplo",
3054 "ultimo",
3055 "un",
3056 "una",
3057 "uno",
3058 "va",
3059 "vai",
3060 "voi",
3061 "volte",
3062 "vostro",
3063 "a",
3064 "abbastanza",
3065 "accidenti",
3066 "ad",
3067 "affinche",
3068 "agli",
3069 "ahime",
3070 "ahimÃ",
3071 "alcuna",
3072 "alcuni",
3073 "alcuno",
3074 "all",
3075 "alle",
3076 "altrimenti",
3077 "altrui",
3078 "anni",
3079 "anno",
3080 "ansa",
3081 "assai",
3082 "attesa",
3083 "avanti",
3084 "avendo",
3085 "avente",
3086 "aver",
3087 "avete",
3088 "avuta",
3089 "avute",
3090 "avuti",
3091 "avuto",
3092 "basta",
3093 "bene",
3094 "benissimo",
3095 "berlusconi",
3096 "brava",
3097 "bravo",
3098 "c",
3099 "casa",
3100 "caso",
3101 "cento",
3102 "certa",
3103 "certe",
3104 "certi",
3105 "certo",
3106 "chicchessia",
3107 "chiunque",
3108 "ci",
3109 "ciascuna",
3110 "ciascuno",
3111 "cima",
3112 "cio",
3113 "ciÃ",
3114 "cioe",
3115 "cioÃ",
3116 "circa",
3117 "citta",
3118 "cittÃ",
3119 "codesta",
3120 "codesti",
3121 "codesto",
3122 "cogli",
3123 "coi",
3124 "col",
3125 "colei",
3126 "coll",
3127 "coloro",
3128 "colui",
3129 "come",
3130 "concernente",
3131 "consiglio",
3132 "contro",
3133 "cortesia",
3134 "cos",
3135 "cosi",
3136 "cosÃ",
3137 "d",
3138 "dagli",
3139 "dai",
3140 "dal",
3141 "dall",
3142 "dalla",
3143 "dalle",
3144 "dallo",
3145 "davanti",
3146 "degli",
3147 "dei",
3148 "dell",
3149 "delle",
3150 "detto",
3151 "dice",
3152 "dietro",
3153 "dire",
3154 "dirimpetto",
3155 "dopo",
3156 "dove",
3157 "dovra",
3158 "dovrÃ",
3159 "dunque",
3160 "durante",
3161 "Ã",
3162 "ed",
3163 "egli",
3164 "ella",
3165 "eppure",
3166 "era",
3167 "erano",
3168 "esse",
3169 "essendo",
3170 "esser",
3171 "essere",
3172 "essi",
3173 "ex",
3174 "fa",
3175 "fatto",
3176 "favore",
3177 "fin",
3178 "finalmente",
3179 "finche",
3180 "forse",
3181 "fuori",
3182 "gia",
3183 "giÃ",
3184 "giacche",
3185 "giorni",
3186 "giorno",
3187 "gli",
3188 "gliela",
3189 "gliele",
3190 "glieli",
3191 "glielo",
3192 "gliene",
3193 "governo",
3194 "grande",
3195 "grazie",
3196 "gruppo",
3197 "i",
3198 "ieri",
3199 "improvviso",
3200 "in",
3201 "infatti",
3202 "insieme",
3203 "intanto",
3204 "intorno",
3205 "l",
3206 "lÃ",
3207 "li",
3208 "lontano",
3209 "macche",
3210 "magari",
3211 "mai",
3212 "male",
3213 "malgrado",
3214 "malissimo",
3215 "medesimo",
3216 "mediante",
3217 "meno",
3218 "mentre",
3219 "mesi",
3220 "mezzo",
3221 "mi",
3222 "mia",
3223 "mie",
3224 "miei",
3225 "mila",
3226 "miliardi",
3227 "milioni",
3228 "ministro",
3229 "mio",
3230 "moltissimo",
3231 "mondo",
3232 "nazionale",
3233 "ne",
3234 "negli",
3235 "nel",
3236 "nell",
3237 "nelle",
3238 "nello",
3239 "nemmeno",
3240 "neppure",
3241 "nessuna",
3242 "nessuno",
3243 "niente",
3244 "non",
3245 "nondimeno",
3246 "nostra",
3247 "nostre",
3248 "nostri",
3249 "nulla",
3250 "od",
3251 "oggi",
3252 "ogni",
3253 "ognuna",
3254 "ognuno",
3255 "oppure",
3256 "ore",
3257 "osi",
3258 "ossia",
3259 "paese",
3260 "parecchi",
3261 "parecchie",
3262 "parecchio",
3263 "parte",
3264 "partendo",
3265 "peccato",
3266 "per",
3267 "perche",
3268 "perchÃ",
3269 "percio",
3270 "perciÃ",
3271 "perfino",
3272 "perÃ",
3273 "piedi",
3274 "pieno",
3275 "piglia",
3276 "piÃ",
3277 "po",
3278 "pochissimo",
3279 "poi",
3280 "poiche",
3281 "press",
3282 "prima",
3283 "proprio",
3284 "puo",
3285 "puÃ",
3286 "pure",
3287 "purtroppo",
3288 "qualche",
3289 "qualcuna",
3290 "qualcuno",
3291 "quale",
3292 "quali",
3293 "qualunque",
3294 "quando",
3295 "quanta",
3296 "quante",
3297 "quanti",
3298 "quanto",
3299 "quantunque",
3300 "quel",
3301 "quella",
3302 "quelli",
3303 "quest",
3304 "questa",
3305 "queste",
3306 "questi",
3307 "riecco",
3308 "salvo",
3309 "sarÃ",
3310 "sarebbe",
3311 "scopo",
3312 "scorso",
3313 "se",
3314 "seguente",
3315 "sempre",
3316 "si",
3317 "solito",
3318 "sta",
3319 "staranno",
3320 "stata",
3321 "state",
3322 "sua",
3323 "successivo",
3324 "sue",
3325 "sugli",
3326 "sui",
3327 "sull",
3328 "sulle",
3329 "sullo",
3330 "suo",
3331 "suoi",
3332 "tale",
3333 "talvolta",
3334 "ti",
3335 "torino",
3336 "tranne",
3337 "troppo",
3338 "tu",
3339 "tua",
3340 "tue",
3341 "tuo",
3342 "tuoi",
3343 "tutta",
3344 "tuttavia",
3345 "tutte",
3346 "tutti",
3347 "tutto",
3348 "uguali",
3349 "uomo",
3350 "vale",
3351 "varia",
3352 "varie",
3353 "vario",
3354 "verso",
3355 "vi",
3356 "via",
3357 "vicino",
3358 "visto",
3359 "vita",
3360 "volta",
3361 "vostra",
3362 "vostre",
3363 "vostri"
3364 ]
3365};
3366
3367},{}],10:[function(require,module,exports){
3368/**
3369 * Created by jan on 9-3-15.
3370 */
3371// Dutch stopwords
3372// via https://code.google.com/p/stop-words/
3373
3374
3375
3376module.exports = {
3377 stopwords:[
3378 "aan",
3379 "af",
3380 "al",
3381 "als",
3382 "bij",
3383 "dan",
3384 "dat",
3385 "die",
3386 "dit",
3387 "een",
3388 "en",
3389 "er",
3390 "had",
3391 "heb",
3392 "hem",
3393 "het",
3394 "hij",
3395 "hoe",
3396 "hun",
3397 "ik",
3398 "in",
3399 "is",
3400 "je",
3401 "kan",
3402 "me",
3403 "men",
3404 "met",
3405 "mij",
3406 "nog",
3407 "nu",
3408 "of",
3409 "ons",
3410 "ook",
3411 "te",
3412 "tot",
3413 "uit",
3414 "van",
3415 "was",
3416 "wat",
3417 "we",
3418 "wel",
3419 "wij",
3420 "zal",
3421 "ze",
3422 "zei",
3423 "zij",
3424 "zo",
3425 "zou",
3426 "aan",
3427 "aangaande",
3428 "aangezien",
3429 "achter",
3430 "achterna",
3431 "afgelopen",
3432 "al",
3433 "aldaar",
3434 "aldus",
3435 "alhoewel",
3436 "alias",
3437 "alle",
3438 "allebei",
3439 "alleen",
3440 "alsnog",
3441 "altijd",
3442 "altoos",
3443 "ander",
3444 "andere",
3445 "anders",
3446 "anderszins",
3447 "behalve",
3448 "behoudens",
3449 "beide",
3450 "beiden",
3451 "ben",
3452 "beneden",
3453 "bent",
3454 "bepaald",
3455 "betreffende",
3456 "bij",
3457 "binnen",
3458 "binnenin",
3459 "boven",
3460 "bovenal",
3461 "bovendien",
3462 "bovengenoemd",
3463 "bovenstaand",
3464 "bovenvermeld",
3465 "buiten",
3466 "daar",
3467 "daarheen",
3468 "daarin",
3469 "daarna",
3470 "daarnet",
3471 "daarom",
3472 "daarop",
3473 "daarvanlangs",
3474 "dan",
3475 "dat",
3476 "de",
3477 "die",
3478 "dikwijls",
3479 "dit",
3480 "door",
3481 "doorgaand",
3482 "dus",
3483 "echter",
3484 "eer",
3485 "eerdat",
3486 "eerder",
3487 "eerlang",
3488 "eerst",
3489 "elk",
3490 "elke",
3491 "en",
3492 "enig",
3493 "enigszins",
3494 "enkel",
3495 "er",
3496 "erdoor",
3497 "even",
3498 "eveneens",
3499 "evenwel",
3500 "gauw",
3501 "gedurende",
3502 "geen",
3503 "gehad",
3504 "gekund",
3505 "geleden",
3506 "gelijk",
3507 "gemoeten",
3508 "gemogen",
3509 "geweest",
3510 "gewoon",
3511 "gewoonweg",
3512 "haar",
3513 "had",
3514 "hadden",
3515 "hare",
3516 "heb",
3517 "hebben",
3518 "hebt",
3519 "heeft",
3520 "hem",
3521 "hen",
3522 "het",
3523 "hierbeneden",
3524 "hierboven",
3525 "hij",
3526 "hoe",
3527 "hoewel",
3528 "hun",
3529 "hunne",
3530 "ik",
3531 "ikzelf",
3532 "in",
3533 "inmiddels",
3534 "inzake",
3535 "is",
3536 "jezelf",
3537 "jij",
3538 "jijzelf",
3539 "jou",
3540 "jouw",
3541 "jouwe",
3542 "juist",
3543 "jullie",
3544 "kan",
3545 "klaar",
3546 "kon",
3547 "konden",
3548 "krachtens",
3549 "kunnen",
3550 "kunt",
3551 "later",
3552 "liever",
3553 "maar",
3554 "mag",
3555 "meer",
3556 "met",
3557 "mezelf",
3558 "mij",
3559 "mijn",
3560 "mijnent",
3561 "mijner",
3562 "mijzelf",
3563 "misschien",
3564 "mocht",
3565 "mochten",
3566 "moest",
3567 "moesten",
3568 "moet",
3569 "moeten",
3570 "mogen",
3571 "na",
3572 "naar",
3573 "nadat",
3574 "net",
3575 "niet",
3576 "noch",
3577 "nog",
3578 "nogal",
3579 "nu",
3580 "of",
3581 "ofschoon",
3582 "om",
3583 "omdat",
3584 "omhoog",
3585 "omlaag",
3586 "omstreeks",
3587 "omtrent",
3588 "omver",
3589 "onder",
3590 "ondertussen",
3591 "ongeveer",
3592 "ons",
3593 "onszelf",
3594 "onze",
3595 "ook",
3596 "op",
3597 "opnieuw",
3598 "opzij",
3599 "over",
3600 "overeind",
3601 "overigens",
3602 "pas",
3603 "precies",
3604 "reeds",
3605 "rond",
3606 "rondom",
3607 "sedert",
3608 "sinds",
3609 "sindsdien",
3610 "slechts",
3611 "sommige",
3612 "spoedig",
3613 "steeds",
3614 "tamelijk",
3615 "tenzij",
3616 "terwijl",
3617 "thans",
3618 "tijdens",
3619 "toch",
3620 "toen",
3621 "toenmaals",
3622 "toenmalig",
3623 "tot",
3624 "totdat",
3625 "tussen",
3626 "uit",
3627 "uitgezonderd",
3628 "vaakwat",
3629 "van",
3630 "vandaan",
3631 "vanuit",
3632 "vanwege",
3633 "veeleer",
3634 "verder",
3635 "vervolgens",
3636 "vol",
3637 "volgens",
3638 "voor",
3639 "vooraf",
3640 "vooral",
3641 "vooralsnog",
3642 "voorbij",
3643 "voordat",
3644 "voordezen",
3645 "voordien",
3646 "voorheen",
3647 "voorop",
3648 "vooruit",
3649 "vrij",
3650 "vroeg",
3651 "waar",
3652 "waarom",
3653 "wanneer",
3654 "want",
3655 "waren",
3656 "was",
3657 "weer",
3658 "weg",
3659 "wegens",
3660 "wel",
3661 "weldra",
3662 "welk",
3663 "welke",
3664 "wie",
3665 "wiens",
3666 "wier",
3667 "wij",
3668 "wijzelf",
3669 "zal",
3670 "ze",
3671 "zelfs",
3672 "zichzelf",
3673 "zij",
3674 "zijn",
3675 "zijne",
3676 "zo",
3677 "zodra",
3678 "zonder",
3679 "zou",
3680 "zouden",
3681 "zowat",
3682 "zulke",
3683 "zullen",
3684 "zult"
3685 ]
3686};
3687
3688
3689},{}],11:[function(require,module,exports){
3690// via http://hackage.haskell.org/package/glider-nlp-0.1/docs/src/Glider-NLP-Language-Polish-StopWords.html
3691module.exports = {
3692 stopwords:[
3693 "a",
3694"aby",
3695"ach",
3696"acz",
3697"aczkolwiek",
3698"aj",
3699"albo",
3700"ale",
3701"alez",
3702"ależ",
3703"ani",
3704"az",
3705"aż",
3706"bardziej",
3707"bardzo",
3708"bo",
3709"bowiem",
3710"by",
3711"byli",
3712"bynajmniej",
3713"byc",
3714"być",
3715"byl",
3716"był",
3717"byla",
3718"bylo",
3719"byly",
3720"była",
3721"było",
3722"były",
3723"bedzie",
3724"będzie",
3725"beda",
3726"będą",
3727"cali",
3728"cala",
3729"cała",
3730"caly",
3731"cały",
3732"ci",
3733"cie",
3734"cię",
3735"ciebie",
3736"co",
3737"cokolwiek",
3738"cos",
3739"coś",
3740"czasami",
3741"czasem",
3742"czemu",
3743"czy",
3744"czyli",
3745"daleko",
3746"dla",
3747"dlaczego",
3748"dlatego",
3749"do",
3750"dobrze",
3751"dokad",
3752"dokąd",
3753"dosc",
3754"dość",
3755"duzo",
3756"dużo",
3757"dwa",
3758"dwaj",
3759"dwie",
3760"dwoje",
3761"dzis",
3762"dziś",
3763"dzisiaj",
3764"gdy",
3765"gdyby",
3766"gdyz",
3767"gdyż",
3768"gdzie",
3769"gdziekolwiek",
3770"gdzies",
3771"gdzieś",
3772"go",
3773"i",
3774"ich",
3775"ile",
3776"im",
3777"inna",
3778"inne",
3779"inny",
3780"innych",
3781"iz",
3782"iż",
3783"ja",
3784"ją",
3785"jak",
3786"jakas",
3787"jakaś",
3788"jakby",
3789"jaki",
3790"jakichs",
3791"jakichś",
3792"jakie",
3793"jakis",
3794"jakiś",
3795"jakiz",
3796"jakiż",
3797"jakkolwiek",
3798"jako",
3799"jakos",
3800"jakoś",
3801"je",
3802"jeden",
3803"jedna",
3804"jedno",
3805"jednak",
3806"jednakze",
3807"jednakże",
3808"jego",
3809"jej",
3810"jemu",
3811"jest",
3812"jestem",
3813"jeszcze",
3814"jesli",
3815"jeśli",
3816"jezeli",
3817"jeżeli",
3818"juz",
3819"już",
3820"kazdy",
3821"każdy",
3822"kiedy",
3823"kilka",
3824"kims",
3825"kimś",
3826"kto",
3827"ktokolwiek",
3828"ktos",
3829"ktoś",
3830"ktora",
3831"ktore",
3832"które",
3833"ktorego",
3834"ktorej",
3835"ktory",
3836"ktorych",
3837"ktorym",
3838"ktorzy",
3839"która",
3840"którego",
3841"której",
3842"który",
3843"których",
3844"którym",
3845"którzy",
3846"ku",
3847"lat",
3848"lecz",
3849"lub",
3850"ma",
3851"mają",
3852"mało",
3853"mam",
3854"mi",
3855"mimo",
3856"miedzy",
3857"między",
3858"mna",
3859"mną",
3860"mnie",
3861"moga",
3862"mogą",
3863"moi",
3864"moim",
3865"moja",
3866"moje",
3867"moze",
3868"może",
3869"mozliwe",
3870"mozna",
3871"możliwe",
3872"można",
3873"moj",
3874"mój",
3875"mu",
3876"musi",
3877"my",
3878"na",
3879"nad",
3880"nam",
3881"nami",
3882"nas",
3883"nasi",
3884"nasz",
3885"nasza",
3886"nasze",
3887"naszego",
3888"naszych",
3889"natomiast",
3890"natychmiast",
3891"nawet",
3892"nia",
3893"nią",
3894"nic",
3895"nich",
3896"nie",
3897"niech",
3898"niego",
3899"niej",
3900"niemu",
3901"nigdy",
3902"nim",
3903"nimi",
3904"niz",
3905"niż",
3906"no",
3907"o",
3908"obok",
3909"od",
3910"około",
3911"on",
3912"ona",
3913"one",
3914"oni",
3915"ono",
3916"oraz",
3917"oto",
3918"owszem",
3919"pan",
3920"pana",
3921"pani",
3922"po",
3923"pod",
3924"podczas",
3925"pomimo",
3926"ponad",
3927"poniewaz",
3928"ponieważ",
3929"powinien",
3930"powinna",
3931"powinni",
3932"powinno",
3933"poza",
3934"prawie",
3935"przeciez",
3936"przecież",
3937"przed",
3938"przede",
3939"przedtem",
3940"przez",
3941"przy",
3942"roku",
3943"rowniez",
3944"również",
3945"sam",
3946"sama",
3947"są",
3948"sie",
3949"się",
3950"skad",
3951"skąd",
3952"sobie",
3953"soba",
3954"sobą",
3955"sposob",
3956"sposób",
3957"swoje",
3958"ta",
3959"tak",
3960"taka",
3961"taki",
3962"takie",
3963"takze",
3964"także",
3965"tam",
3966"te",
3967"tego",
3968"tej",
3969"ten",
3970"teraz",
3971"też",
3972"to",
3973"toba",
3974"tobą",
3975"tobie",
3976"totez",
3977"toteż",
3978"trzeba",
3979"tu",
3980"tutaj",
3981"twoi",
3982"twoim",
3983"twoja",
3984"twoje",
3985"twym",
3986"twoj",
3987"twój",
3988"ty",
3989"tych",
3990"tylko",
3991"tym",
3992"u",
3993"w",
3994"wam",
3995"wami",
3996"was",
3997"wasz",
3998"wasza",
3999"wasze",
4000"we",
4001"według",
4002"wiele",
4003"wielu",
4004"więc",
4005"więcej",
4006"wszyscy",
4007"wszystkich",
4008"wszystkie",
4009"wszystkim",
4010"wszystko",
4011"wtedy",
4012"wy",
4013"wlasnie",
4014"właśnie",
4015"z",
4016"za",
4017"zapewne",
4018"zawsze",
4019"ze",
4020"znowu",
4021"znow",
4022"znów",
4023"zostal",
4024"został",
4025"zaden",
4026"zadna",
4027"zadne",
4028"zadnych",
4029"ze",
4030"zeby",
4031"żaden",
4032"żadna",
4033"żadne",
4034"żadnych",
4035"że",
4036"żeby"
4037 ]
4038};
4039
4040},{}],12:[function(require,module,exports){
4041/**
4042 * Created by rodrigo on 01/10/15.
4043 */
4044
4045//Portuguese (BRAZIL) stopwords
4046// via https://sites.google.com/site/kevinbouge/stopwords-lists
4047module.exports = {
4048 stopwords: [
4049 "a",
4050 "à",
4051 "adeus",
4052 "agora",
4053 "aí",
4054 "ainda",
4055 "além",
4056 "algo",
4057 "algumas",
4058 "alguns",
4059 "ali",
4060 "ano",
4061 "anos",
4062 "antes",
4063 "ao",
4064 "aos",
4065 "apenas",
4066 "apoio",
4067 "após",
4068 "aquela",
4069 "aquelas",
4070 "aquele",
4071 "aqueles",
4072 "aqui",
4073 "aquilo",
4074 "área",
4075 "as",
4076 "às",
4077 "assim",
4078 "até",
4079 "atrás",
4080 "através",
4081 "baixo",
4082 "bastante",
4083 "bem",
4084 "boa",
4085 "boas",
4086 "bom",
4087 "bons",
4088 "breve",
4089 "cá",
4090 "cada",
4091 "catorze",
4092 "cedo",
4093 "cento",
4094 "certamente",
4095 "certeza",
4096 "cima",
4097 "cinco",
4098 "coisa",
4099 "com",
4100 "como",
4101 "conselho",
4102 "contra",
4103 "custa",
4104 "da",
4105 "dá",
4106 "dão",
4107 "daquela",
4108 "daquelas",
4109 "daquele",
4110 "daqueles",
4111 "dar",
4112 "das",
4113 "de",
4114 "debaixo",
4115 "demais",
4116 "dentro",
4117 "depois",
4118 "desde",
4119 "dessa",
4120 "dessas",
4121 "desse",
4122 "desses",
4123 "desta",
4124 "destas",
4125 "deste",
4126 "destes",
4127 "deve",
4128 "deverá",
4129 "dez",
4130 "dezanove",
4131 "dezasseis",
4132 "dezassete",
4133 "dezoito",
4134 "dia",
4135 "diante",
4136 "diz",
4137 "dizem",
4138 "dizer",
4139 "do",
4140 "dois",
4141 "dos",
4142 "doze",
4143 "duas",
4144 "dúvida",
4145 "e",
4146 "é",
4147 "ela",
4148 "elas",
4149 "ele",
4150 "eles",
4151 "em",
4152 "embora",
4153 "entre",
4154 "era",
4155 "és",
4156 "essa",
4157 "essas",
4158 "esse",
4159 "esses",
4160 "esta",
4161 "está",
4162 "estão",
4163 "estar",
4164 "estas",
4165 "estás",
4166 "estava",
4167 "este",
4168 "estes",
4169 "esteve",
4170 "estive",
4171 "estivemos",
4172 "estiveram",
4173 "estiveste",
4174 "estivestes",
4175 "estou",
4176 "eu",
4177 "exemplo",
4178 "faço",
4179 "falta",
4180 "favor",
4181 "faz",
4182 "fazeis",
4183 "fazem",
4184 "fazemos",
4185 "fazer",
4186 "fazes",
4187 "fez",
4188 "fim",
4189 "final",
4190 "foi",
4191 "fomos",
4192 "for",
4193 "foram",
4194 "forma",
4195 "foste",
4196 "fostes",
4197 "fui",
4198 "geral",
4199 "grande",
4200 "grandes",
4201 "grupo",
4202 "há",
4203 "hoje",
4204 "hora",
4205 "horas",
4206 "isso",
4207 "isto",
4208 "já",
4209 "lá",
4210 "lado",
4211 "local",
4212 "logo",
4213 "longe",
4214 "lugar",
4215 "maior",
4216 "maioria",
4217 "mais",
4218 "mal",
4219 "mas",
4220 "máximo",
4221 "me",
4222 "meio",
4223 "menor",
4224 "menos",
4225 "mês",
4226 "meses",
4227 "meu",
4228 "meus",
4229 "mil",
4230 "minha",
4231 "minhas",
4232 "momento",
4233 "muito",
4234 "muitos",
4235 "na",
4236 "nada",
4237 "não",
4238 "naquela",
4239 "naquelas",
4240 "naquele",
4241 "naqueles",
4242 "nas",
4243 "nem",
4244 "nenhuma",
4245 "nessa",
4246 "nessas",
4247 "nesse",
4248 "nesses",
4249 "nesta",
4250 "nestas",
4251 "neste",
4252 "nestes",
4253 "nível",
4254 "no",
4255 "noite",
4256 "nome",
4257 "nos",
4258 "nós",
4259 "nossa",
4260 "nossas",
4261 "nosso",
4262 "nossos",
4263 "nova",
4264 "novas",
4265 "nove",
4266 "novo",
4267 "novos",
4268 "num",
4269 "numa",
4270 "número",
4271 "nunca",
4272 "o",
4273 "obra",
4274 "obrigada",
4275 "obrigado",
4276 "oitava",
4277 "oitavo",
4278 "oito",
4279 "onde",
4280 "ontem",
4281 "onze",
4282 "os",
4283 "ou",
4284 "outra",
4285 "outras",
4286 "outro",
4287 "outros",
4288 "para",
4289 "parece",
4290 "parte",
4291 "partir",
4292 "paucas",
4293 "pela",
4294 "pelas",
4295 "pelo",
4296 "pelos",
4297 "perto",
4298 "pode",
4299 "pôde",
4300 "podem",
4301 "poder",
4302 "põe",
4303 "põem",
4304 "ponto",
4305 "pontos",
4306 "por",
4307 "porque",
4308 "porquê",
4309 "posição",
4310 "possível",
4311 "possivelmente",
4312 "posso",
4313 "pouca",
4314 "pouco",
4315 "poucos",
4316 "primeira",
4317 "primeiras",
4318 "primeiro",
4319 "primeiros",
4320 "própria",
4321 "próprias",
4322 "próprio",
4323 "próprios",
4324 "próxima",
4325 "próximas",
4326 "próximo",
4327 "próximos",
4328 "puderam",
4329 "quáis",
4330 "qual",
4331 "quando",
4332 "quanto",
4333 "quarta",
4334 "quarto",
4335 "quatro",
4336 "que",
4337 "quê",
4338 "quem",
4339 "quer",
4340 "quereis",
4341 "querem",
4342 "queremas",
4343 "queres",
4344 "quero",
4345 "questão",
4346 "quinta",
4347 "quinto",
4348 "quinze",
4349 "relação",
4350 "sabe",
4351 "sabem",
4352 "são",
4353 "se",
4354 "segunda",
4355 "segundo",
4356 "sei",
4357 "seis",
4358 "sem",
4359 "sempre",
4360 "ser",
4361 "seria",
4362 "sete",
4363 "sétima",
4364 "sétimo",
4365 "seu",
4366 "seus",
4367 "sexta",
4368 "sexto",
4369 "sim",
4370 "sistema",
4371 "sob",
4372 "sobre",
4373 "sois",
4374 "somos",
4375 "sou",
4376 "sua",
4377 "suas",
4378 "tal",
4379 "talvez",
4380 "também",
4381 "tanta",
4382 "tantas",
4383 "tanto",
4384 "tão",
4385 "tarde",
4386 "te",
4387 "tem",
4388 "têm",
4389 "temos",
4390 "tendes",
4391 "tenho",
4392 "tens",
4393 "ter",
4394 "terceira",
4395 "terceiro",
4396 "teu",
4397 "teus",
4398 "teve",
4399 "tive",
4400 "tivemos",
4401 "tiveram",
4402 "tiveste",
4403 "tivestes",
4404 "toda",
4405 "todas",
4406 "todo",
4407 "todos",
4408 "trabalho",
4409 "três",
4410 "treze",
4411 "tu",
4412 "tua",
4413 "tuas",
4414 "tudo",
4415 "um",
4416 "uma",
4417 "umas",
4418 "uns",
4419 "vai",
4420 "vais",
4421 "vão",
4422 "vários",
4423 "vem",
4424 "vêm",
4425 "vens",
4426 "ver",
4427 "vez",
4428 "vezes",
4429 "viagem",
4430 "vindo",
4431 "vinte",
4432 "você",
4433 "vocês",
4434 "vos",
4435 "vós",
4436 "vossa",
4437 "vossas",
4438 "vosso",
4439 "vossos",
4440 "zero"
4441 ]
4442};
4443},{}],13:[function(require,module,exports){
4444// credits to: https://raw.githubusercontent.com/stopwords-iso/stopwords-ro/master/stopwords-ro.json
4445module.exports = {
4446 stopwords: [
4447 "a",
4448 "abia",
4449 "acea",
4450 "aceasta",
4451 "această",
4452 "aceea",
4453 "aceeasi",
4454 "acei",
4455 "aceia",
4456 "acel",
4457 "acela",
4458 "acelasi",
4459 "acele",
4460 "acelea",
4461 "acest",
4462 "acesta",
4463 "aceste",
4464 "acestea",
4465 "acestei",
4466 "acestia",
4467 "acestui",
4468 "aceşti",
4469 "aceştia",
4470 "acolo",
4471 "acord",
4472 "acum",
4473 "adica",
4474 "ai",
4475 "aia",
4476 "aibă",
4477 "aici",
4478 "aiurea",
4479 "al",
4480 "ala",
4481 "alaturi",
4482 "ale",
4483 "alea",
4484 "alt",
4485 "alta",
4486 "altceva",
4487 "altcineva",
4488 "alte",
4489 "altfel",
4490 "alti",
4491 "altii",
4492 "altul",
4493 "am",
4494 "anume",
4495 "apoi",
4496 "ar",
4497 "are",
4498 "as",
4499 "asa",
4500 "asemenea",
4501 "asta",
4502 "astazi",
4503 "astea",
4504 "astfel",
4505 "astăzi",
4506 "asupra",
4507 "atare",
4508 "atat",
4509 "atata",
4510 "atatea",
4511 "atatia",
4512 "ati",
4513 "atit",
4514 "atita",
4515 "atitea",
4516 "atitia",
4517 "atunci",
4518 "au",
4519 "avea",
4520 "avem",
4521 "aveţi",
4522 "avut",
4523 "azi",
4524 "aş",
4525 "aşadar",
4526 "aţi",
4527 "b",
4528 "ba",
4529 "bine",
4530 "bucur",
4531 "bună",
4532 "c",
4533 "ca",
4534 "cam",
4535 "cand",
4536 "capat",
4537 "care",
4538 "careia",
4539 "carora",
4540 "caruia",
4541 "cat",
4542 "catre",
4543 "caut",
4544 "ce",
4545 "cea",
4546 "ceea",
4547 "cei",
4548 "ceilalti",
4549 "cel",
4550 "cele",
4551 "celor",
4552 "ceva",
4553 "chiar",
4554 "ci",
4555 "cinci",
4556 "cind",
4557 "cine",
4558 "cineva",
4559 "cit",
4560 "cita",
4561 "cite",
4562 "citeva",
4563 "citi",
4564 "citiva",
4565 "conform",
4566 "contra",
4567 "cu",
4568 "cui",
4569 "cum",
4570 "cumva",
4571 "curând",
4572 "curînd",
4573 "când",
4574 "cât",
4575 "câte",
4576 "câtva",
4577 "câţi",
4578 "cînd",
4579 "cît",
4580 "cîte",
4581 "cîtva",
4582 "cîţi",
4583 "că",
4584 "căci",
4585 "cărei",
4586 "căror",
4587 "cărui",
4588 "către",
4589 "d",
4590 "da",
4591 "daca",
4592 "dacă",
4593 "dar",
4594 "dat",
4595 "datorită",
4596 "dată",
4597 "dau",
4598 "de",
4599 "deasupra",
4600 "deci",
4601 "decit",
4602 "degraba",
4603 "deja",
4604 "deoarece",
4605 "departe",
4606 "desi",
4607 "despre",
4608 "deşi",
4609 "din",
4610 "dinaintea",
4611 "dintr",
4612 "dintr-",
4613 "dintre",
4614 "doar",
4615 "doi",
4616 "doilea",
4617 "două",
4618 "drept",
4619 "dupa",
4620 "după",
4621 "dă",
4622 "e",
4623 "ea",
4624 "ei",
4625 "el",
4626 "ele",
4627 "era",
4628 "eram",
4629 "este",
4630 "eu",
4631 "exact",
4632 "eşti",
4633 "f",
4634 "face",
4635 "fara",
4636 "fata",
4637 "fel",
4638 "fi",
4639 "fie",
4640 "fiecare",
4641 "fii",
4642 "fim",
4643 "fiu",
4644 "fiţi",
4645 "foarte",
4646 "fost",
4647 "frumos",
4648 "fără",
4649 "g",
4650 "geaba",
4651 "graţie",
4652 "h",
4653 "halbă",
4654 "i",
4655 "ia",
4656 "iar",
4657 "ieri",
4658 "ii",
4659 "il",
4660 "imi",
4661 "in",
4662 "inainte",
4663 "inapoi",
4664 "inca",
4665 "incit",
4666 "insa",
4667 "intr",
4668 "intre",
4669 "isi",
4670 "iti",
4671 "j",
4672 "k",
4673 "l",
4674 "la",
4675 "le",
4676 "li",
4677 "lor",
4678 "lui",
4679 "lângă",
4680 "lîngă",
4681 "m",
4682 "ma",
4683 "mai",
4684 "mare",
4685 "mea",
4686 "mei",
4687 "mele",
4688 "mereu",
4689 "meu",
4690 "mi",
4691 "mie",
4692 "mine",
4693 "mod",
4694 "mult",
4695 "multa",
4696 "multe",
4697 "multi",
4698 "multă",
4699 "mulţi",
4700 "mulţumesc",
4701 "mâine",
4702 "mîine",
4703 "mă",
4704 "n",
4705 "ne",
4706 "nevoie",
4707 "ni",
4708 "nici",
4709 "niciodata",
4710 "nicăieri",
4711 "nimeni",
4712 "nimeri",
4713 "nimic",
4714 "niste",
4715 "nişte",
4716 "noastre",
4717 "noastră",
4718 "noi",
4719 "noroc",
4720 "nostri",
4721 "nostru",
4722 "nou",
4723 "noua",
4724 "nouă",
4725 "noştri",
4726 "nu",
4727 "numai",
4728 "o",
4729 "opt",
4730 "or",
4731 "ori",
4732 "oricare",
4733 "orice",
4734 "oricine",
4735 "oricum",
4736 "oricând",
4737 "oricât",
4738 "oricînd",
4739 "oricît",
4740 "oriunde",
4741 "p",
4742 "pai",
4743 "parca",
4744 "patra",
4745 "patru",
4746 "patrulea",
4747 "pe",
4748 "pentru",
4749 "peste",
4750 "pic",
4751 "pina",
4752 "plus",
4753 "poate",
4754 "pot",
4755 "prea",
4756 "prima",
4757 "primul",
4758 "prin",
4759 "printr-",
4760 "putini",
4761 "puţin",
4762 "puţina",
4763 "puţină",
4764 "până",
4765 "pînă",
4766 "r",
4767 "rog",
4768 "s",
4769 "sa",
4770 "sa-mi",
4771 "sa-ti",
4772 "sai",
4773 "sale",
4774 "sau",
4775 "se",
4776 "si",
4777 "sint",
4778 "sintem",
4779 "spate",
4780 "spre",
4781 "sub",
4782 "sunt",
4783 "suntem",
4784 "sunteţi",
4785 "sus",
4786 "sută",
4787 "sînt",
4788 "sîntem",
4789 "sînteţi",
4790 "să",
4791 "săi",
4792 "său",
4793 "t",
4794 "ta",
4795 "tale",
4796 "te",
4797 "ti",
4798 "timp",
4799 "tine",
4800 "toata",
4801 "toate",
4802 "toată",
4803 "tocmai",
4804 "tot",
4805 "toti",
4806 "totul",
4807 "totusi",
4808 "totuşi",
4809 "toţi",
4810 "trei",
4811 "treia",
4812 "treilea",
4813 "tu",
4814 "tuturor",
4815 "tăi",
4816 "tău",
4817 "u",
4818 "ul",
4819 "ului",
4820 "un",
4821 "una",
4822 "unde",
4823 "undeva",
4824 "unei",
4825 "uneia",
4826 "unele",
4827 "uneori",
4828 "unii",
4829 "unor",
4830 "unora",
4831 "unu",
4832 "unui",
4833 "unuia",
4834 "unul",
4835 "v",
4836 "va",
4837 "vi",
4838 "voastre",
4839 "voastră",
4840 "voi",
4841 "vom",
4842 "vor",
4843 "vostru",
4844 "vouă",
4845 "voştri",
4846 "vreme",
4847 "vreo",
4848 "vreun",
4849 "vă",
4850 "x",
4851 "z",
4852 "zece",
4853 "zero",
4854 "zi",
4855 "zice",
4856 "îi",
4857 "îl",
4858 "îmi",
4859 "împotriva",
4860 "în",
4861 "înainte",
4862 "înaintea",
4863 "încotro",
4864 "încât",
4865 "încît",
4866 "între",
4867 "întrucât",
4868 "întrucît",
4869 "îţi",
4870 "ăla",
4871 "ălea",
4872 "ăsta",
4873 "ăstea",
4874 "ăştia",
4875 "şapte",
4876 "şase",
4877 "şi",
4878 "ştiu",
4879 "ţi",
4880 "ţie"
4881 ]
4882};
4883},{}],14:[function(require,module,exports){
4884/**
4885 * Created by jan on 9-3-15.
4886 */
4887// Russian stopwords
4888// via https://code.google.com/p/stop-words/
4889
4890module.exports = {
4891 stopwords: [
4892 "а",
4893 "е",
4894 "и",
4895 "ж",
4896 "м",
4897 "о",
4898 "на",
4899 "не",
4900 "ни",
4901 "об",
4902 "но",
4903 "он",
4904 "мне",
4905 "мои",
4906 "мож",
4907 "она",
4908 "они",
4909 "оно",
4910 "мной",
4911 "много",
4912 "многочисленное",
4913 "многочисленная",
4914 "многочисленные",
4915 "многочисленный",
4916 "мною",
4917 "мой",
4918 "мог",
4919 "могут",
4920 "можно",
4921 "может",
4922 "можхо",
4923 "мор",
4924 "моя",
4925 "моё",
4926 "мочь",
4927 "над",
4928 "нее",
4929 "оба",
4930 "нам",
4931 "нем",
4932 "нами",
4933 "ними",
4934 "мимо",
4935 "немного",
4936 "одной",
4937 "одного",
4938 "менее",
4939 "однажды",
4940 "однако",
4941 "меня",
4942 "нему",
4943 "меньше",
4944 "ней",
4945 "наверху",
4946 "него",
4947 "ниже",
4948 "мало",
4949 "надо",
4950 "один",
4951 "одиннадцать",
4952 "одиннадцатый",
4953 "назад",
4954 "наиболее",
4955 "недавно",
4956 "миллионов",
4957 "недалеко",
4958 "между",
4959 "низко",
4960 "меля",
4961 "нельзя",
4962 "нибудь",
4963 "непрерывно",
4964 "наконец",
4965 "никогда",
4966 "никуда",
4967 "нас",
4968 "наш",
4969 "нет",
4970 "нею",
4971 "неё",
4972 "них",
4973 "мира",
4974 "наша",
4975 "наше",
4976 "наши",
4977 "ничего",
4978 "начала",
4979 "нередко",
4980 "несколько",
4981 "обычно",
4982 "опять",
4983 "около",
4984 "мы",
4985 "ну",
4986 "нх",
4987 "от",
4988 "отовсюду",
4989 "особенно",
4990 "нужно",
4991 "очень",
4992 "отсюда",
4993 "в",
4994 "во",
4995 "вон",
4996 "вниз",
4997 "внизу",
4998 "вокруг",
4999 "вот",
5000 "восемнадцать",
5001 "восемнадцатый",
5002 "восемь",
5003 "восьмой",
5004 "вверх",
5005 "вам",
5006 "вами",
5007 "важное",
5008 "важная",
5009 "важные",
5010 "важный",
5011 "вдали",
5012 "везде",
5013 "ведь",
5014 "вас",
5015 "ваш",
5016 "ваша",
5017 "ваше",
5018 "ваши",
5019 "впрочем",
5020 "весь",
5021 "вдруг",
5022 "вы",
5023 "все",
5024 "второй",
5025 "всем",
5026 "всеми",
5027 "времени",
5028 "время",
5029 "всему",
5030 "всего",
5031 "всегда",
5032 "всех",
5033 "всею",
5034 "всю",
5035 "вся",
5036 "всё",
5037 "всюду",
5038 "г",
5039 "год",
5040 "говорил",
5041 "говорит",
5042 "года",
5043 "году",
5044 "где",
5045 "да",
5046 "ее",
5047 "за",
5048 "из",
5049 "ли",
5050 "же",
5051 "им",
5052 "до",
5053 "по",
5054 "ими",
5055 "под",
5056 "иногда",
5057 "довольно",
5058 "именно",
5059 "долго",
5060 "позже",
5061 "более",
5062 "должно",
5063 "пожалуйста",
5064 "значит",
5065 "иметь",
5066 "больше",
5067 "пока",
5068 "ему",
5069 "имя",
5070 "пор",
5071 "пора",
5072 "потом",
5073 "потому",
5074 "после",
5075 "почему",
5076 "почти",
5077 "посреди",
5078 "ей",
5079 "два",
5080 "две",
5081 "двенадцать",
5082 "двенадцатый",
5083 "двадцать",
5084 "двадцатый",
5085 "двух",
5086 "его",
5087 "дел",
5088 "или",
5089 "без",
5090 "день",
5091 "занят",
5092 "занята",
5093 "занято",
5094 "заняты",
5095 "действительно",
5096 "давно",
5097 "девятнадцать",
5098 "девятнадцатый",
5099 "девять",
5100 "девятый",
5101 "даже",
5102 "алло",
5103 "жизнь",
5104 "далеко",
5105 "близко",
5106 "здесь",
5107 "дальше",
5108 "для",
5109 "лет",
5110 "зато",
5111 "даром",
5112 "первый",
5113 "перед",
5114 "затем",
5115 "зачем",
5116 "лишь",
5117 "десять",
5118 "десятый",
5119 "ею",
5120 "её",
5121 "их",
5122 "бы",
5123 "еще",
5124 "при",
5125 "был",
5126 "про",
5127 "процентов",
5128 "против",
5129 "просто",
5130 "бывает",
5131 "бывь",
5132 "если",
5133 "люди",
5134 "была",
5135 "были",
5136 "было",
5137 "будем",
5138 "будет",
5139 "будете",
5140 "будешь",
5141 "прекрасно",
5142 "буду",
5143 "будь",
5144 "будто",
5145 "будут",
5146 "ещё",
5147 "пятнадцать",
5148 "пятнадцатый",
5149 "друго",
5150 "другое",
5151 "другой",
5152 "другие",
5153 "другая",
5154 "других",
5155 "есть",
5156 "пять",
5157 "быть",
5158 "лучше",
5159 "пятый",
5160 "к",
5161 "ком",
5162 "конечно",
5163 "кому",
5164 "кого",
5165 "когда",
5166 "которой",
5167 "которого",
5168 "которая",
5169 "которые",
5170 "который",
5171 "которых",
5172 "кем",
5173 "каждое",
5174 "каждая",
5175 "каждые",
5176 "каждый",
5177 "кажется",
5178 "как",
5179 "какой",
5180 "какая",
5181 "кто",
5182 "кроме",
5183 "куда",
5184 "кругом",
5185 "с",
5186 "т",
5187 "у",
5188 "я",
5189 "та",
5190 "те",
5191 "уж",
5192 "со",
5193 "то",
5194 "том",
5195 "снова",
5196 "тому",
5197 "совсем",
5198 "того",
5199 "тогда",
5200 "тоже",
5201 "собой",
5202 "тобой",
5203 "собою",
5204 "тобою",
5205 "сначала",
5206 "только",
5207 "уметь",
5208 "тот",
5209 "тою",
5210 "хорошо",
5211 "хотеть",
5212 "хочешь",
5213 "хоть",
5214 "хотя",
5215 "свое",
5216 "свои",
5217 "твой",
5218 "своей",
5219 "своего",
5220 "своих",
5221 "свою",
5222 "твоя",
5223 "твоё",
5224 "раз",
5225 "уже",
5226 "сам",
5227 "там",
5228 "тем",
5229 "чем",
5230 "сама",
5231 "сами",
5232 "теми",
5233 "само",
5234 "рано",
5235 "самом",
5236 "самому",
5237 "самой",
5238 "самого",
5239 "семнадцать",
5240 "семнадцатый",
5241 "самим",
5242 "самими",
5243 "самих",
5244 "саму",
5245 "семь",
5246 "чему",
5247 "раньше",
5248 "сейчас",
5249 "чего",
5250 "сегодня",
5251 "себе",
5252 "тебе",
5253 "сеаой",
5254 "человек",
5255 "разве",
5256 "теперь",
5257 "себя",
5258 "тебя",
5259 "седьмой",
5260 "спасибо",
5261 "слишком",
5262 "так",
5263 "такое",
5264 "такой",
5265 "такие",
5266 "также",
5267 "такая",
5268 "сих",
5269 "тех",
5270 "чаще",
5271 "четвертый",
5272 "через",
5273 "часто",
5274 "шестой",
5275 "шестнадцать",
5276 "шестнадцатый",
5277 "шесть",
5278 "четыре",
5279 "четырнадцать",
5280 "четырнадцатый",
5281 "сколько",
5282 "сказал",
5283 "сказала",
5284 "сказать",
5285 "ту",
5286 "ты",
5287 "три",
5288 "эта",
5289 "эти",
5290 "что",
5291 "это",
5292 "чтоб",
5293 "этом",
5294 "этому",
5295 "этой",
5296 "этого",
5297 "чтобы",
5298 "этот",
5299 "стал",
5300 "туда",
5301 "этим",
5302 "этими",
5303 "рядом",
5304 "тринадцать",
5305 "тринадцатый",
5306 "этих",
5307 "третий",
5308 "тут",
5309 "эту",
5310 "суть",
5311 "чуть",
5312 "тысяч"
5313 ]
5314};
5315
5316},{}],15:[function(require,module,exports){
5317/**
5318 * Created by jan on 9-3-15.
5319 */
5320// Swedish stopwords
5321// http://www.ranks.nl/stopwords/swedish
5322// https://github.com/AlexGustafsson
5323
5324module.exports = {
5325 stopwords: [
5326 "aderton",
5327 "adertonde",
5328 "adjö",
5329 "aldrig",
5330 "alla",
5331 "allas",
5332 "allt",
5333 "alltid",
5334 "alltså",
5335 "än",
5336 "andra",
5337 "andras",
5338 "annan",
5339 "annat",
5340 "ännu",
5341 "artonde",
5342 "artonn",
5343 "åtminstone",
5344 "att",
5345 "åtta",
5346 "åttio",
5347 "åttionde",
5348 "åttonde",
5349 "av",
5350 "även",
5351 "båda",
5352 "bådas",
5353 "bakom",
5354 "bara",
5355 "bäst",
5356 "bättre",
5357 "behöva",
5358 "behövas",
5359 "behövde",
5360 "behövt",
5361 "beslut",
5362 "beslutat",
5363 "beslutit",
5364 "bland",
5365 "blev",
5366 "bli",
5367 "blir",
5368 "blivit",
5369 "bort",
5370 "borta",
5371 "bra",
5372 "då",
5373 "dag",
5374 "dagar",
5375 "dagarna",
5376 "dagen",
5377 "där",
5378 "därför",
5379 "de",
5380 "del",
5381 "delen",
5382 "dem",
5383 "den",
5384 "deras",
5385 "dess",
5386 "det",
5387 "detta",
5388 "dig",
5389 "din",
5390 "dina",
5391 "dit",
5392 "ditt",
5393 "dock",
5394 "du",
5395 "efter",
5396 "eftersom",
5397 "elfte",
5398 "eller",
5399 "elva",
5400 "en",
5401 "enkel",
5402 "enkelt",
5403 "enkla",
5404 "enligt",
5405 "er",
5406 "era",
5407 "ert",
5408 "ett",
5409 "ettusen",
5410 "få",
5411 "fanns",
5412 "får",
5413 "fått",
5414 "fem",
5415 "femte",
5416 "femtio",
5417 "femtionde",
5418 "femton",
5419 "femtonde",
5420 "fick",
5421 "fin",
5422 "finnas",
5423 "finns",
5424 "fjärde",
5425 "fjorton",
5426 "fjortonde",
5427 "fler",
5428 "flera",
5429 "flesta",
5430 "följande",
5431 "för",
5432 "före",
5433 "förlåt",
5434 "förra",
5435 "första",
5436 "fram",
5437 "framför",
5438 "från",
5439 "fyra",
5440 "fyrtio",
5441 "fyrtionde",
5442 "gå",
5443 "gälla",
5444 "gäller",
5445 "gällt",
5446 "går",
5447 "gärna",
5448 "gått",
5449 "genast",
5450 "genom",
5451 "gick",
5452 "gjorde",
5453 "gjort",
5454 "god",
5455 "goda",
5456 "godare",
5457 "godast",
5458 "gör",
5459 "göra",
5460 "gott",
5461 "ha",
5462 "hade",
5463 "haft",
5464 "han",
5465 "hans",
5466 "har",
5467 "här",
5468 "heller",
5469 "hellre",
5470 "helst",
5471 "helt",
5472 "henne",
5473 "hennes",
5474 "hit",
5475 "hög",
5476 "höger",
5477 "högre",
5478 "högst",
5479 "hon",
5480 "honom",
5481 "hundra",
5482 "hundraen",
5483 "hundraett",
5484 "hur",
5485 "i",
5486 "ibland",
5487 "idag",
5488 "igår",
5489 "igen",
5490 "imorgon",
5491 "in",
5492 "inför",
5493 "inga",
5494 "ingen",
5495 "ingenting",
5496 "inget",
5497 "innan",
5498 "inne",
5499 "inom",
5500 "inte",
5501 "inuti",
5502 "ja",
5503 "jag",
5504 "jämfört",
5505 "kan",
5506 "kanske",
5507 "knappast",
5508 "kom",
5509 "komma",
5510 "kommer",
5511 "kommit",
5512 "kr",
5513 "kunde",
5514 "kunna",
5515 "kunnat",
5516 "kvar",
5517 "länge",
5518 "längre",
5519 "långsam",
5520 "långsammare",
5521 "långsammast",
5522 "långsamt",
5523 "längst",
5524 "långt",
5525 "lätt",
5526 "lättare",
5527 "lättast",
5528 "legat",
5529 "ligga",
5530 "ligger",
5531 "lika",
5532 "likställd",
5533 "likställda",
5534 "lilla",
5535 "lite",
5536 "liten",
5537 "litet",
5538 "man",
5539 "många",
5540 "måste",
5541 "med",
5542 "mellan",
5543 "men",
5544 "mer",
5545 "mera",
5546 "mest",
5547 "mig",
5548 "min",
5549 "mina",
5550 "mindre",
5551 "minst",
5552 "mitt",
5553 "mittemot",
5554 "möjlig",
5555 "möjligen",
5556 "möjligt",
5557 "möjligtvis",
5558 "mot",
5559 "mycket",
5560 "någon",
5561 "någonting",
5562 "något",
5563 "några",
5564 "när",
5565 "nästa",
5566 "ned",
5567 "nederst",
5568 "nedersta",
5569 "nedre",
5570 "nej",
5571 "ner",
5572 "ni",
5573 "nio",
5574 "nionde",
5575 "nittio",
5576 "nittionde",
5577 "nitton",
5578 "nittonde",
5579 "nödvändig",
5580 "nödvändiga",
5581 "nödvändigt",
5582 "nödvändigtvis",
5583 "nog",
5584 "noll",
5585 "nr",
5586 "nu",
5587 "nummer",
5588 "och",
5589 "också",
5590 "ofta",
5591 "oftast",
5592 "olika",
5593 "olikt",
5594 "om",
5595 "oss",
5596 "över",
5597 "övermorgon",
5598 "överst",
5599 "övre",
5600 "på",
5601 "rakt",
5602 "rätt",
5603 "redan",
5604 "redigera",
5605 "så",
5606 "sade",
5607 "säga",
5608 "säger",
5609 "sagt",
5610 "samma",
5611 "sämre",
5612 "sämst",
5613 "se",
5614 "sedan",
5615 "senare",
5616 "senast",
5617 "sent",
5618 "sex",
5619 "sextio",
5620 "sextionde",
5621 "sexton",
5622 "sextonde",
5623 "sig",
5624 "sin",
5625 "sina",
5626 "sist",
5627 "sista",
5628 "siste",
5629 "sitt",
5630 "sjätte",
5631 "sju",
5632 "sjunde",
5633 "sjuttio",
5634 "sjuttionde",
5635 "sjutton",
5636 "sjuttonde",
5637 "ska",
5638 "skall",
5639 "skulle",
5640 "slutligen",
5641 "små",
5642 "smått",
5643 "snart",
5644 "som",
5645 "stor",
5646 "stora",
5647 "större",
5648 "störst",
5649 "stort",
5650 "tack",
5651 "tidig",
5652 "tidigare",
5653 "tidigast",
5654 "tidigt",
5655 "till",
5656 "tills",
5657 "tillsammans",
5658 "tio",
5659 "tionde",
5660 "tjugo",
5661 "tjugoen",
5662 "tjugoett",
5663 "tjugonde",
5664 "tjugotre",
5665 "tjugotvå",
5666 "tjungo",
5667 "tolfte",
5668 "tolv",
5669 "tre",
5670 "tredje",
5671 "trettio",
5672 "trettionde",
5673 "tretton",
5674 "trettonde",
5675 "två",
5676 "tvåhundra",
5677 "under",
5678 "upp",
5679 "ur",
5680 "ursäkt",
5681 "ut",
5682 "utan",
5683 "utanför",
5684 "ute",
5685 "vad",
5686 "vänster",
5687 "vänstra",
5688 "vår",
5689 "vara",
5690 "våra",
5691 "varför",
5692 "varifrån",
5693 "varit",
5694 "varken",
5695 "värre",
5696 "varsågod",
5697 "vart",
5698 "vårt",
5699 "vem",
5700 "vems",
5701 "verkligen",
5702 "vi",
5703 "vid",
5704 "vidare",
5705 "viktig",
5706 "viktigare",
5707 "viktigast",
5708 "viktigt",
5709 "vilka",
5710 "vilken",
5711 "vilket",
5712 "vill",
5713 "är",
5714 "år",
5715
5716 "även",
5717 "dessa",
5718 "wikitext",
5719 "wikipedia",
5720 "tyngre",
5721 "tung",
5722 "tyngst",
5723 "kall",
5724 "var",
5725 "minimum",
5726 "min",
5727 "max",
5728 "maximum",
5729 "ökning",
5730 "öka",
5731 "kallar",
5732 "hjälp",
5733 "använder",
5734 "betydligt",
5735 "sätt",
5736 "denna",
5737 "detta",
5738 "det",
5739 "hjälpa",
5740 "används",
5741 "består",
5742 "tränger",
5743 "igenom",
5744 "denna",
5745 "utöka",
5746 "utarmat",
5747 "ungefär",
5748 "sprids",
5749 "betydligt",
5750 "omgivande",
5751 "via",
5752 "huvudartikel",
5753 "exempel",
5754 "exempelvis",
5755 "vanligt",
5756 "per",
5757 "största",
5758 "stor",
5759 "ord",
5760 "ordet",
5761 "kallas",
5762 "påbörjad",
5763 "höra",
5764 "främst",
5765 "ihop",
5766 "antalet",
5767 "the",
5768 "uttryck",
5769 "uttrycket",
5770 "ändra",
5771 "presenteras",
5772 "presenterades",
5773 "tänka",
5774 "delar",
5775 "söka",
5776 "hämta",
5777 "innehåll",
5778 "definera",
5779 "använda",
5780 "pekar",
5781 "istället",
5782 "stället",
5783 "pekar",
5784 "standard",
5785 "vanligaste",
5786 "heter",
5787 "precist",
5788 "felaktigt",
5789 "källor",
5790 "höga",
5791 "mottagare",
5792 "eng",
5793 "bildade",
5794 "bytte",
5795 "bildades",
5796 "grundades",
5797 "svar",
5798 "betyder",
5799 "betydelse",
5800 "möjligheter",
5801 "möjlig",
5802 "möjlighet",
5803 "syfte",
5804 "gamla",
5805 "tioårig",
5806 "år",
5807 "övergångsperiod",
5808 "ersättas",
5809 "användes",
5810 "används",
5811 "utgörs",
5812 "drygt",
5813 "alla",
5814 "allt",
5815 "alltså",
5816 "andra",
5817 "att",
5818 "bara",
5819 "bli",
5820 "blir",
5821 "borde",
5822 "bra",
5823 "mitt",
5824 "ser",
5825 "dem",
5826 "den",
5827 "denna",
5828 "det",
5829 "detta",
5830 "dig",
5831 "din",
5832 "dock",
5833 "dom",
5834 "där",
5835 "edit",
5836 "efter",
5837 "eftersom",
5838 "eller",
5839 "ett",
5840 "fast",
5841 "fel",
5842 "fick",
5843 "finns",
5844 "fram",
5845 "från",
5846 "får",
5847 "fått",
5848 "för",
5849 "första",
5850 "genom",
5851 "ger",
5852 "går",
5853 "gör",
5854 "göra",
5855 "hade",
5856 "han",
5857 "har",
5858 "hela",
5859 "helt",
5860 "honom",
5861 "hur",
5862 "här",
5863 "iaf",
5864 "igen",
5865 "ingen",
5866 "inget",
5867 "inte",
5868 "jag",
5869 "kan",
5870 "kanske",
5871 "kommer",
5872 "lika",
5873 "lite",
5874 "man",
5875 "med",
5876 "men",
5877 "mer",
5878 "mig",
5879 "min",
5880 "mot",
5881 "mycket",
5882 "många",
5883 "måste",
5884 "nog",
5885 "när",
5886 "någon",
5887 "något",
5888 "några",
5889 "nån",
5890 "nåt",
5891 "och",
5892 "också",
5893 "rätt",
5894 "samma",
5895 "sedan",
5896 "sen",
5897 "sig",
5898 "sin",
5899 "själv",
5900 "ska",
5901 "skulle",
5902 "som",
5903 "sätt",
5904 "tar",
5905 "till",
5906 "tror",
5907 "tycker",
5908 "typ",
5909 "upp",
5910 "utan",
5911 "vad",
5912 "var",
5913 "vara",
5914 "vet",
5915 "vid",
5916 "vilket",
5917 "vill",
5918 "väl",
5919 "även",
5920 "över",
5921 "förekommer",
5922 "varierar",
5923 "representera",
5924 "representerar",
5925 "itu",
5926 "påbörjades",
5927 "le",
5928 "åtgärder",
5929 "åtgärd",
5930 "sådant",
5931 "särskilt",
5932 "eftersom",
5933 "som",
5934 "efter",
5935 "syftet",
5936 "syfte",
5937 "ersatts",
5938 "ersätts",
5939 "ersatt",
5940 "ersätt",
5941 "tagits",
5942 "byter",
5943 "benämningar",
5944 "ler",
5945 "ärvs",
5946 "ärv",
5947 "ärvd",
5948 "januari",
5949 "februari",
5950 "mars",
5951 "april",
5952 "maj",
5953 "juni",
5954 "juli",
5955 "augusti",
5956 "september",
5957 "oktober",
5958 "november",
5959 "december",
5960 "on",
5961 "övriga",
5962 "använts",
5963 "använd",
5964 "används",
5965 "använt",
5966 "syftar",
5967 "ex",
5968 "svårt",
5969 "svår",
5970 "lätt",
5971 "lätta",
5972 "lättast",
5973 "lättare",
5974 "svårare",
5975 "svårast",
5976 "list",
5977 "användningsområde",
5978 "användningsområden",
5979 "vissa",
5980 "ii",
5981 "hembyggda",
5982 "krav",
5983 "lugnt",
5984 "ändå",
5985 "stycken",
5986 "styck",
5987 "långa",
5988 "korta",
5989 "små",
5990 "stora",
5991 "smala",
5992 "tjocka",
5993 "början",
5994 "tungt",
5995 "lätt",
5996 "tim",
5997 "st",
5998 "kg",
5999 "km",
6000 "tid",
6001 "ny",
6002 "gammal",
6003 "nyare",
6004 "antal",
6005 "snabbare",
6006 "började",
6007 "ansvar",
6008 "ansvarar",
6009 "både",
6010 "ca",
6011 "låg",
6012 "hög",
6013 "ro",
6014 "ton",
6015 "kap",
6016 "of",
6017 "and",
6018 "vars",
6019 "kr/km",
6020 "rör",
6021 "gällande",
6022 "placeras",
6023 "placerades",
6024 "täckt",
6025 "samt",
6026 "hos",
6027 "sådana",
6028 "endast",
6029 "tillstånd",
6030 "beror",
6031 "på",
6032 "marken",
6033 "minska",
6034 "orsaker",
6035 "lösningar",
6036 "problem",
6037 "namn",
6038 "förväntas",
6039 "förväntan",
6040 "förväntats",
6041 "varning",
6042 "utfärdas",
6043 "utfärda",
6044 "km/h",
6045 "nådde",
6046 "stod",
6047 "området",
6048 "områden",
6049 "källa",
6050 "behövs",
6051 "drabbade",
6052 "drabbat",
6053 "which",
6054 "top",
6055 "that",
6056 "lägre",
6057 "allmänt",
6058 "drog",
6059 "drar",
6060 "enorma",
6061 "ända",
6062 "enda",
6063 "officiella",
6064 "bekräftats",
6065 "bekräftas",
6066 "fall",
6067 "sjunker",
6068 "nedåt",
6069 "värms",
6070 "samtidigt",
6071 "efterföljd",
6072 "problematik",
6073 "uppåt",
6074 "utom",
6075 "förutom",
6076 "hörnet",
6077 "söt",
6078 "salt",
6079 "svag",
6080 "stark",
6081 "ren",
6082 "smutsig",
6083 "förr",
6084 "tiden",
6085 "mångdag",
6086 "tisdag",
6087 "onsdag",
6088 "torsdag",
6089 "fredag",
6090 "lördag",
6091 "söndag",
6092 "måndagar",
6093 "tisdagar",
6094 "onsdagar",
6095 "torsdagar",
6096 "fredagar",
6097 "lördagar",
6098 "söndagar",
6099 "efterlikna",
6100 "som",
6101 "lik",
6102 "bergis",
6103 "bekymmer",
6104 "så",
6105 "lista",
6106 "dig",
6107 "dej",
6108 "mig",
6109 "mej",
6110 "fri",
6111 "vanlig",
6112 "ovanlig",
6113 "sällan",
6114 "ofta",
6115 "avskiljs",
6116 "use",
6117 "släkte",
6118 "släktet",
6119 "släkt",
6120 "kategori",
6121 "kategoriseras",
6122 "rensas",
6123 "renas",
6124 "timmar",
6125 "minuter",
6126 "sekunder"
6127 ]
6128};
6129
6130},{}],16:[function(require,module,exports){
6131module.exports = {
6132 danish: require("./da").stopwords,
6133 dutch: require("./nl").stopwords,
6134 english: require("./en").stopwords,
6135 french: require("./fr").stopwords,
6136 galician: require("./gl").stopwords,
6137 german: require("./de").stopwords,
6138 italian: require("./it").stopwords,
6139 polish: require("./pl").stopwords,
6140 portuguese: require("./pt").stopwords,
6141 romanian: require("./ro").stopwords,
6142 russian: require("./ru").stopwords,
6143 spanish: require("./es").stopwords,
6144 swedish: require("./se").stopwords
6145};
6146
6147},{"./da":3,"./de":4,"./en":5,"./es":6,"./fr":7,"./gl":8,"./it":9,"./nl":10,"./pl":11,"./pt":12,"./ro":13,"./ru":14,"./se":15}],17:[function(require,module,exports){
6148// Underscore.string
6149// (c) 2010 Esa-Matti Suuronen <esa-matti aet suuronen dot org>
6150// Underscore.string is freely distributable under the terms of the MIT license.
6151// Documentation: https://github.com/epeli/underscore.string
6152// Some code is borrowed from MooTools and Alexandru Marasteanu.
6153// Version '2.3.2'
6154
6155!function(root, String){
6156 'use strict';
6157
6158 // Defining helper functions.
6159
6160 var nativeTrim = String.prototype.trim;
6161 var nativeTrimRight = String.prototype.trimRight;
6162 var nativeTrimLeft = String.prototype.trimLeft;
6163
6164 var parseNumber = function(source) { return source * 1 || 0; };
6165
6166 var strRepeat = function(str, qty){
6167 if (qty < 1) return '';
6168 var result = '';
6169 while (qty > 0) {
6170 if (qty & 1) result += str;
6171 qty >>= 1, str += str;
6172 }
6173 return result;
6174 };
6175
6176 var slice = [].slice;
6177
6178 var defaultToWhiteSpace = function(characters) {
6179 if (characters == null)
6180 return '\\s';
6181 else if (characters.source)
6182 return characters.source;
6183 else
6184 return '[' + _s.escapeRegExp(characters) + ']';
6185 };
6186
6187 // Helper for toBoolean
6188 function boolMatch(s, matchers) {
6189 var i, matcher, down = s.toLowerCase();
6190 matchers = [].concat(matchers);
6191 for (i = 0; i < matchers.length; i += 1) {
6192 matcher = matchers[i];
6193 if (!matcher) continue;
6194 if (matcher.test && matcher.test(s)) return true;
6195 if (matcher.toLowerCase() === down) return true;
6196 }
6197 }
6198
6199 var escapeChars = {
6200 lt: '<',
6201 gt: '>',
6202 quot: '"',
6203 amp: '&',
6204 apos: "'"
6205 };
6206
6207 var reversedEscapeChars = {};
6208 for(var key in escapeChars) reversedEscapeChars[escapeChars[key]] = key;
6209 reversedEscapeChars["'"] = '#39';
6210
6211 // sprintf() for JavaScript 0.7-beta1
6212 // http://www.diveintojavascript.com/projects/javascript-sprintf
6213 //
6214 // Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
6215 // All rights reserved.
6216
6217 var sprintf = (function() {
6218 function get_type(variable) {
6219 return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
6220 }
6221
6222 var str_repeat = strRepeat;
6223
6224 var str_format = function() {
6225 if (!str_format.cache.hasOwnProperty(arguments[0])) {
6226 str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
6227 }
6228 return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
6229 };
6230
6231 str_format.format = function(parse_tree, argv) {
6232 var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
6233 for (i = 0; i < tree_length; i++) {
6234 node_type = get_type(parse_tree[i]);
6235 if (node_type === 'string') {
6236 output.push(parse_tree[i]);
6237 }
6238 else if (node_type === 'array') {
6239 match = parse_tree[i]; // convenience purposes only
6240 if (match[2]) { // keyword argument
6241 arg = argv[cursor];
6242 for (k = 0; k < match[2].length; k++) {
6243 if (!arg.hasOwnProperty(match[2][k])) {
6244 throw new Error(sprintf('[_.sprintf] property "%s" does not exist', match[2][k]));
6245 }
6246 arg = arg[match[2][k]];
6247 }
6248 } else if (match[1]) { // positional argument (explicit)
6249 arg = argv[match[1]];
6250 }
6251 else { // positional argument (implicit)
6252 arg = argv[cursor++];
6253 }
6254
6255 if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
6256 throw new Error(sprintf('[_.sprintf] expecting number but found %s', get_type(arg)));
6257 }
6258 switch (match[8]) {
6259 case 'b': arg = arg.toString(2); break;
6260 case 'c': arg = String.fromCharCode(arg); break;
6261 case 'd': arg = parseInt(arg, 10); break;
6262 case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
6263 case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
6264 case 'o': arg = arg.toString(8); break;
6265 case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
6266 case 'u': arg = Math.abs(arg); break;
6267 case 'x': arg = arg.toString(16); break;
6268 case 'X': arg = arg.toString(16).toUpperCase(); break;
6269 }
6270 arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
6271 pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
6272 pad_length = match[6] - String(arg).length;
6273 pad = match[6] ? str_repeat(pad_character, pad_length) : '';
6274 output.push(match[5] ? arg + pad : pad + arg);
6275 }
6276 }
6277 return output.join('');
6278 };
6279
6280 str_format.cache = {};
6281
6282 str_format.parse = function(fmt) {
6283 var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
6284 while (_fmt) {
6285 if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
6286 parse_tree.push(match[0]);
6287 }
6288 else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
6289 parse_tree.push('%');
6290 }
6291 else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
6292 if (match[2]) {
6293 arg_names |= 1;
6294 var field_list = [], replacement_field = match[2], field_match = [];
6295 if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
6296 field_list.push(field_match[1]);
6297 while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
6298 if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
6299 field_list.push(field_match[1]);
6300 }
6301 else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
6302 field_list.push(field_match[1]);
6303 }
6304 else {
6305 throw new Error('[_.sprintf] huh?');
6306 }
6307 }
6308 }
6309 else {
6310 throw new Error('[_.sprintf] huh?');
6311 }
6312 match[2] = field_list;
6313 }
6314 else {
6315 arg_names |= 2;
6316 }
6317 if (arg_names === 3) {
6318 throw new Error('[_.sprintf] mixing positional and named placeholders is not (yet) supported');
6319 }
6320 parse_tree.push(match);
6321 }
6322 else {
6323 throw new Error('[_.sprintf] huh?');
6324 }
6325 _fmt = _fmt.substring(match[0].length);
6326 }
6327 return parse_tree;
6328 };
6329
6330 return str_format;
6331 })();
6332
6333
6334
6335 // Defining underscore.string
6336
6337 var _s = {
6338
6339 VERSION: '2.3.0',
6340
6341 isBlank: function(str){
6342 if (str == null) str = '';
6343 return (/^\s*$/).test(str);
6344 },
6345
6346 stripTags: function(str){
6347 if (str == null) return '';
6348 return String(str).replace(/<\/?[^>]+>/g, '');
6349 },
6350
6351 capitalize : function(str){
6352 str = str == null ? '' : String(str);
6353 return str.charAt(0).toUpperCase() + str.slice(1);
6354 },
6355
6356 chop: function(str, step){
6357 if (str == null) return [];
6358 str = String(str);
6359 step = ~~step;
6360 return step > 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str];
6361 },
6362
6363 clean: function(str){
6364 return _s.strip(str).replace(/\s+/g, ' ');
6365 },
6366
6367 count: function(str, substr){
6368 if (str == null || substr == null) return 0;
6369
6370 str = String(str);
6371 substr = String(substr);
6372
6373 var count = 0,
6374 pos = 0,
6375 length = substr.length;
6376
6377 while (true) {
6378 pos = str.indexOf(substr, pos);
6379 if (pos === -1) break;
6380 count++;
6381 pos += length;
6382 }
6383
6384 return count;
6385 },
6386
6387 chars: function(str) {
6388 if (str == null) return [];
6389 return String(str).split('');
6390 },
6391
6392 swapCase: function(str) {
6393 if (str == null) return '';
6394 return String(str).replace(/\S/g, function(c){
6395 return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase();
6396 });
6397 },
6398
6399 escapeHTML: function(str) {
6400 if (str == null) return '';
6401 return String(str).replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; });
6402 },
6403
6404 unescapeHTML: function(str) {
6405 if (str == null) return '';
6406 return String(str).replace(/\&([^;]+);/g, function(entity, entityCode){
6407 var match;
6408
6409 if (entityCode in escapeChars) {
6410 return escapeChars[entityCode];
6411 } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
6412 return String.fromCharCode(parseInt(match[1], 16));
6413 } else if (match = entityCode.match(/^#(\d+)$/)) {
6414 return String.fromCharCode(~~match[1]);
6415 } else {
6416 return entity;
6417 }
6418 });
6419 },
6420
6421 escapeRegExp: function(str){
6422 if (str == null) return '';
6423 return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
6424 },
6425
6426 splice: function(str, i, howmany, substr){
6427 var arr = _s.chars(str);
6428 arr.splice(~~i, ~~howmany, substr);
6429 return arr.join('');
6430 },
6431
6432 insert: function(str, i, substr){
6433 return _s.splice(str, i, 0, substr);
6434 },
6435
6436 include: function(str, needle){
6437 if (needle === '') return true;
6438 if (str == null) return false;
6439 return String(str).indexOf(needle) !== -1;
6440 },
6441
6442 join: function() {
6443 var args = slice.call(arguments),
6444 separator = args.shift();
6445
6446 if (separator == null) separator = '';
6447
6448 return args.join(separator);
6449 },
6450
6451 lines: function(str) {
6452 if (str == null) return [];
6453 return String(str).split("\n");
6454 },
6455
6456 reverse: function(str){
6457 return _s.chars(str).reverse().join('');
6458 },
6459
6460 startsWith: function(str, starts){
6461 if (starts === '') return true;
6462 if (str == null || starts == null) return false;
6463 str = String(str); starts = String(starts);
6464 return str.length >= starts.length && str.slice(0, starts.length) === starts;
6465 },
6466
6467 endsWith: function(str, ends){
6468 if (ends === '') return true;
6469 if (str == null || ends == null) return false;
6470 str = String(str); ends = String(ends);
6471 return str.length >= ends.length && str.slice(str.length - ends.length) === ends;
6472 },
6473
6474 succ: function(str){
6475 if (str == null) return '';
6476 str = String(str);
6477 return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length-1) + 1);
6478 },
6479
6480 titleize: function(str){
6481 if (str == null) return '';
6482 str = String(str).toLowerCase();
6483 return str.replace(/(?:^|\s|-)\S/g, function(c){ return c.toUpperCase(); });
6484 },
6485
6486 camelize: function(str){
6487 return _s.trim(str).replace(/[-_\s]+(.)?/g, function(match, c){ return c ? c.toUpperCase() : ""; });
6488 },
6489
6490 underscored: function(str){
6491 return _s.trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase();
6492 },
6493
6494 dasherize: function(str){
6495 return _s.trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
6496 },
6497
6498 classify: function(str){
6499 return _s.titleize(String(str).replace(/[\W_]/g, ' ')).replace(/\s/g, '');
6500 },
6501
6502 humanize: function(str){
6503 return _s.capitalize(_s.underscored(str).replace(/_id$/,'').replace(/_/g, ' '));
6504 },
6505
6506 trim: function(str, characters){
6507 if (str == null) return '';
6508 if (!characters && nativeTrim) return nativeTrim.call(str);
6509 characters = defaultToWhiteSpace(characters);
6510 return String(str).replace(new RegExp('\^' + characters + '+|' + characters + '+$', 'g'), '');
6511 },
6512
6513 ltrim: function(str, characters){
6514 if (str == null) return '';
6515 if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str);
6516 characters = defaultToWhiteSpace(characters);
6517 return String(str).replace(new RegExp('^' + characters + '+'), '');
6518 },
6519
6520 rtrim: function(str, characters){
6521 if (str == null) return '';
6522 if (!characters && nativeTrimRight) return nativeTrimRight.call(str);
6523 characters = defaultToWhiteSpace(characters);
6524 return String(str).replace(new RegExp(characters + '+$'), '');
6525 },
6526
6527 truncate: function(str, length, truncateStr){
6528 if (str == null) return '';
6529 str = String(str); truncateStr = truncateStr || '...';
6530 length = ~~length;
6531 return str.length > length ? str.slice(0, length) + truncateStr : str;
6532 },
6533
6534 /**
6535 * _s.prune: a more elegant version of truncate
6536 * prune extra chars, never leaving a half-chopped word.
6537 * @author github.com/rwz
6538 */
6539 prune: function(str, length, pruneStr){
6540 if (str == null) return '';
6541
6542 str = String(str); length = ~~length;
6543 pruneStr = pruneStr != null ? String(pruneStr) : '...';
6544
6545 if (str.length <= length) return str;
6546
6547 var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; },
6548 template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA'
6549
6550 if (template.slice(template.length-2).match(/\w\w/))
6551 template = template.replace(/\s*\S+$/, '');
6552 else
6553 template = _s.rtrim(template.slice(0, template.length-1));
6554
6555 return (template+pruneStr).length > str.length ? str : str.slice(0, template.length)+pruneStr;
6556 },
6557
6558 words: function(str, delimiter) {
6559 if (_s.isBlank(str)) return [];
6560 return _s.trim(str, delimiter).split(delimiter || /\s+/);
6561 },
6562
6563 pad: function(str, length, padStr, type) {
6564 str = str == null ? '' : String(str);
6565 length = ~~length;
6566
6567 var padlen = 0;
6568
6569 if (!padStr)
6570 padStr = ' ';
6571 else if (padStr.length > 1)
6572 padStr = padStr.charAt(0);
6573
6574 switch(type) {
6575 case 'right':
6576 padlen = length - str.length;
6577 return str + strRepeat(padStr, padlen);
6578 case 'both':
6579 padlen = length - str.length;
6580 return strRepeat(padStr, Math.ceil(padlen/2)) + str
6581 + strRepeat(padStr, Math.floor(padlen/2));
6582 default: // 'left'
6583 padlen = length - str.length;
6584 return strRepeat(padStr, padlen) + str;
6585 }
6586 },
6587
6588 lpad: function(str, length, padStr) {
6589 return _s.pad(str, length, padStr);
6590 },
6591
6592 rpad: function(str, length, padStr) {
6593 return _s.pad(str, length, padStr, 'right');
6594 },
6595
6596 lrpad: function(str, length, padStr) {
6597 return _s.pad(str, length, padStr, 'both');
6598 },
6599
6600 sprintf: sprintf,
6601
6602 vsprintf: function(fmt, argv){
6603 argv.unshift(fmt);
6604 return sprintf.apply(null, argv);
6605 },
6606
6607 toNumber: function(str, decimals) {
6608 if (!str) return 0;
6609 str = _s.trim(str);
6610 if (!str.match(/^-?\d+(?:\.\d+)?$/)) return NaN;
6611 return parseNumber(parseNumber(str).toFixed(~~decimals));
6612 },
6613
6614 numberFormat : function(number, dec, dsep, tsep) {
6615 if (isNaN(number) || number == null) return '';
6616
6617 number = number.toFixed(~~dec);
6618 tsep = typeof tsep == 'string' ? tsep : ',';
6619
6620 var parts = number.split('.'), fnums = parts[0],
6621 decimals = parts[1] ? (dsep || '.') + parts[1] : '';
6622
6623 return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals;
6624 },
6625
6626 strRight: function(str, sep){
6627 if (str == null) return '';
6628 str = String(str); sep = sep != null ? String(sep) : sep;
6629 var pos = !sep ? -1 : str.indexOf(sep);
6630 return ~pos ? str.slice(pos+sep.length, str.length) : str;
6631 },
6632
6633 strRightBack: function(str, sep){
6634 if (str == null) return '';
6635 str = String(str); sep = sep != null ? String(sep) : sep;
6636 var pos = !sep ? -1 : str.lastIndexOf(sep);
6637 return ~pos ? str.slice(pos+sep.length, str.length) : str;
6638 },
6639
6640 strLeft: function(str, sep){
6641 if (str == null) return '';
6642 str = String(str); sep = sep != null ? String(sep) : sep;
6643 var pos = !sep ? -1 : str.indexOf(sep);
6644 return ~pos ? str.slice(0, pos) : str;
6645 },
6646
6647 strLeftBack: function(str, sep){
6648 if (str == null) return '';
6649 str += ''; sep = sep != null ? ''+sep : sep;
6650 var pos = str.lastIndexOf(sep);
6651 return ~pos ? str.slice(0, pos) : str;
6652 },
6653
6654 toSentence: function(array, separator, lastSeparator, serial) {
6655 separator = separator || ', ';
6656 lastSeparator = lastSeparator || ' and ';
6657 var a = array.slice(), lastMember = a.pop();
6658
6659 if (array.length > 2 && serial) lastSeparator = _s.rtrim(separator) + lastSeparator;
6660
6661 return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember;
6662 },
6663
6664 toSentenceSerial: function() {
6665 var args = slice.call(arguments);
6666 args[3] = true;
6667 return _s.toSentence.apply(_s, args);
6668 },
6669
6670 slugify: function(str) {
6671 if (str == null) return '';
6672
6673 var from = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź",
6674 to = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz",
6675 regex = new RegExp(defaultToWhiteSpace(from), 'g');
6676
6677 str = String(str).toLowerCase().replace(regex, function(c){
6678 var index = from.indexOf(c);
6679 return to.charAt(index) || '-';
6680 });
6681
6682 return _s.dasherize(str.replace(/[^\w\s-]/g, ''));
6683 },
6684
6685 surround: function(str, wrapper) {
6686 return [wrapper, str, wrapper].join('');
6687 },
6688
6689 quote: function(str, quoteChar) {
6690 return _s.surround(str, quoteChar || '"');
6691 },
6692
6693 unquote: function(str, quoteChar) {
6694 quoteChar = quoteChar || '"';
6695 if (str[0] === quoteChar && str[str.length-1] === quoteChar)
6696 return str.slice(1,str.length-1);
6697 else return str;
6698 },
6699
6700 exports: function() {
6701 var result = {};
6702
6703 for (var prop in this) {
6704 if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse)$/)) continue;
6705 result[prop] = this[prop];
6706 }
6707
6708 return result;
6709 },
6710
6711 repeat: function(str, qty, separator){
6712 if (str == null) return '';
6713
6714 qty = ~~qty;
6715
6716 // using faster implementation if separator is not needed;
6717 if (separator == null) return strRepeat(String(str), qty);
6718
6719 // this one is about 300x slower in Google Chrome
6720 for (var repeat = []; qty > 0; repeat[--qty] = str) {}
6721 return repeat.join(separator);
6722 },
6723
6724 naturalCmp: function(str1, str2){
6725 if (str1 == str2) return 0;
6726 if (!str1) return -1;
6727 if (!str2) return 1;
6728
6729 var cmpRegex = /(\.\d+)|(\d+)|(\D+)/g,
6730 tokens1 = String(str1).toLowerCase().match(cmpRegex),
6731 tokens2 = String(str2).toLowerCase().match(cmpRegex),
6732 count = Math.min(tokens1.length, tokens2.length);
6733
6734 for(var i = 0; i < count; i++) {
6735 var a = tokens1[i], b = tokens2[i];
6736
6737 if (a !== b){
6738 var num1 = parseInt(a, 10);
6739 if (!isNaN(num1)){
6740 var num2 = parseInt(b, 10);
6741 if (!isNaN(num2) && num1 - num2)
6742 return num1 - num2;
6743 }
6744 return a < b ? -1 : 1;
6745 }
6746 }
6747
6748 if (tokens1.length === tokens2.length)
6749 return tokens1.length - tokens2.length;
6750
6751 return str1 < str2 ? -1 : 1;
6752 },
6753
6754 levenshtein: function(str1, str2) {
6755 if (str1 == null && str2 == null) return 0;
6756 if (str1 == null) return String(str2).length;
6757 if (str2 == null) return String(str1).length;
6758
6759 str1 = String(str1); str2 = String(str2);
6760
6761 var current = [], prev, value;
6762
6763 for (var i = 0; i <= str2.length; i++)
6764 for (var j = 0; j <= str1.length; j++) {
6765 if (i && j)
6766 if (str1.charAt(j - 1) === str2.charAt(i - 1))
6767 value = prev;
6768 else
6769 value = Math.min(current[j], current[j - 1], prev) + 1;
6770 else
6771 value = i + j;
6772
6773 prev = current[j];
6774 current[j] = value;
6775 }
6776
6777 return current.pop();
6778 },
6779
6780 toBoolean: function(str, trueValues, falseValues) {
6781 if (typeof str === "number") str = "" + str;
6782 if (typeof str !== "string") return !!str;
6783 str = _s.trim(str);
6784 if (boolMatch(str, trueValues || ["true", "1"])) return true;
6785 if (boolMatch(str, falseValues || ["false", "0"])) return false;
6786 }
6787 };
6788
6789 // Aliases
6790
6791 _s.strip = _s.trim;
6792 _s.lstrip = _s.ltrim;
6793 _s.rstrip = _s.rtrim;
6794 _s.center = _s.lrpad;
6795 _s.rjust = _s.lpad;
6796 _s.ljust = _s.rpad;
6797 _s.contains = _s.include;
6798 _s.q = _s.quote;
6799 _s.toBool = _s.toBoolean;
6800
6801 // Exporting
6802
6803 // CommonJS module is defined
6804 if (typeof exports !== 'undefined') {
6805 if (typeof module !== 'undefined' && module.exports)
6806 module.exports = _s;
6807
6808 exports._s = _s;
6809 }
6810
6811 // Register as a named module with AMD.
6812 if (typeof define === 'function' && define.amd)
6813 define('underscore.string', [], function(){ return _s; });
6814
6815
6816 // Integrate with Underscore.js if defined
6817 // or create our own underscore object.
6818 root._ = root._ || {};
6819 root._.string = root._.str = _s;
6820}(this, String);
6821
6822},{}],18:[function(require,module,exports){
6823// Underscore.js 1.7.0
6824// http://underscorejs.org
6825// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
6826// Underscore may be freely distributed under the MIT license.
6827
6828(function() {
6829
6830 // Baseline setup
6831 // --------------
6832
6833 // Establish the root object, `window` in the browser, or `exports` on the server.
6834 var root = this;
6835
6836 // Save the previous value of the `_` variable.
6837 var previousUnderscore = root._;
6838
6839 // Save bytes in the minified (but not gzipped) version:
6840 var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
6841
6842 // Create quick reference variables for speed access to core prototypes.
6843 var
6844 push = ArrayProto.push,
6845 slice = ArrayProto.slice,
6846 concat = ArrayProto.concat,
6847 toString = ObjProto.toString,
6848 hasOwnProperty = ObjProto.hasOwnProperty;
6849
6850 // All **ECMAScript 5** native function implementations that we hope to use
6851 // are declared here.
6852 var
6853 nativeIsArray = Array.isArray,
6854 nativeKeys = Object.keys,
6855 nativeBind = FuncProto.bind;
6856
6857 // Create a safe reference to the Underscore object for use below.
6858 var _ = function(obj) {
6859 if (obj instanceof _) return obj;
6860 if (!(this instanceof _)) return new _(obj);
6861 this._wrapped = obj;
6862 };
6863
6864 // Export the Underscore object for **Node.js**, with
6865 // backwards-compatibility for the old `require()` API. If we're in
6866 // the browser, add `_` as a global object.
6867 if (typeof exports !== 'undefined') {
6868 if (typeof module !== 'undefined' && module.exports) {
6869 exports = module.exports = _;
6870 }
6871 exports._ = _;
6872 } else {
6873 root._ = _;
6874 }
6875
6876 // Current version.
6877 _.VERSION = '1.7.0';
6878
6879 // Internal function that returns an efficient (for current engines) version
6880 // of the passed-in callback, to be repeatedly applied in other Underscore
6881 // functions.
6882 var createCallback = function(func, context, argCount) {
6883 if (context === void 0) return func;
6884 switch (argCount == null ? 3 : argCount) {
6885 case 1: return function(value) {
6886 return func.call(context, value);
6887 };
6888 case 2: return function(value, other) {
6889 return func.call(context, value, other);
6890 };
6891 case 3: return function(value, index, collection) {
6892 return func.call(context, value, index, collection);
6893 };
6894 case 4: return function(accumulator, value, index, collection) {
6895 return func.call(context, accumulator, value, index, collection);
6896 };
6897 }
6898 return function() {
6899 return func.apply(context, arguments);
6900 };
6901 };
6902
6903 // A mostly-internal function to generate callbacks that can be applied
6904 // to each element in a collection, returning the desired result — either
6905 // identity, an arbitrary callback, a property matcher, or a property accessor.
6906 _.iteratee = function(value, context, argCount) {
6907 if (value == null) return _.identity;
6908 if (_.isFunction(value)) return createCallback(value, context, argCount);
6909 if (_.isObject(value)) return _.matches(value);
6910 return _.property(value);
6911 };
6912
6913 // Collection Functions
6914 // --------------------
6915
6916 // The cornerstone, an `each` implementation, aka `forEach`.
6917 // Handles raw objects in addition to array-likes. Treats all
6918 // sparse array-likes as if they were dense.
6919 _.each = _.forEach = function(obj, iteratee, context) {
6920 if (obj == null) return obj;
6921 iteratee = createCallback(iteratee, context);
6922 var i, length = obj.length;
6923 if (length === +length) {
6924 for (i = 0; i < length; i++) {
6925 iteratee(obj[i], i, obj);
6926 }
6927 } else {
6928 var keys = _.keys(obj);
6929 for (i = 0, length = keys.length; i < length; i++) {
6930 iteratee(obj[keys[i]], keys[i], obj);
6931 }
6932 }
6933 return obj;
6934 };
6935
6936 // Return the results of applying the iteratee to each element.
6937 _.map = _.collect = function(obj, iteratee, context) {
6938 if (obj == null) return [];
6939 iteratee = _.iteratee(iteratee, context);
6940 var keys = obj.length !== +obj.length && _.keys(obj),
6941 length = (keys || obj).length,
6942 results = Array(length),
6943 currentKey;
6944 for (var index = 0; index < length; index++) {
6945 currentKey = keys ? keys[index] : index;
6946 results[index] = iteratee(obj[currentKey], currentKey, obj);
6947 }
6948 return results;
6949 };
6950
6951 var reduceError = 'Reduce of empty array with no initial value';
6952
6953 // **Reduce** builds up a single result from a list of values, aka `inject`,
6954 // or `foldl`.
6955 _.reduce = _.foldl = _.inject = function(obj, iteratee, memo, context) {
6956 if (obj == null) obj = [];
6957 iteratee = createCallback(iteratee, context, 4);
6958 var keys = obj.length !== +obj.length && _.keys(obj),
6959 length = (keys || obj).length,
6960 index = 0, currentKey;
6961 if (arguments.length < 3) {
6962 if (!length) throw new TypeError(reduceError);
6963 memo = obj[keys ? keys[index++] : index++];
6964 }
6965 for (; index < length; index++) {
6966 currentKey = keys ? keys[index] : index;
6967 memo = iteratee(memo, obj[currentKey], currentKey, obj);
6968 }
6969 return memo;
6970 };
6971
6972 // The right-associative version of reduce, also known as `foldr`.
6973 _.reduceRight = _.foldr = function(obj, iteratee, memo, context) {
6974 if (obj == null) obj = [];
6975 iteratee = createCallback(iteratee, context, 4);
6976 var keys = obj.length !== + obj.length && _.keys(obj),
6977 index = (keys || obj).length,
6978 currentKey;
6979 if (arguments.length < 3) {
6980 if (!index) throw new TypeError(reduceError);
6981 memo = obj[keys ? keys[--index] : --index];
6982 }
6983 while (index--) {
6984 currentKey = keys ? keys[index] : index;
6985 memo = iteratee(memo, obj[currentKey], currentKey, obj);
6986 }
6987 return memo;
6988 };
6989
6990 // Return the first value which passes a truth test. Aliased as `detect`.
6991 _.find = _.detect = function(obj, predicate, context) {
6992 var result;
6993 predicate = _.iteratee(predicate, context);
6994 _.some(obj, function(value, index, list) {
6995 if (predicate(value, index, list)) {
6996 result = value;
6997 return true;
6998 }
6999 });
7000 return result;
7001 };
7002
7003 // Return all the elements that pass a truth test.
7004 // Aliased as `select`.
7005 _.filter = _.select = function(obj, predicate, context) {
7006 var results = [];
7007 if (obj == null) return results;
7008 predicate = _.iteratee(predicate, context);
7009 _.each(obj, function(value, index, list) {
7010 if (predicate(value, index, list)) results.push(value);
7011 });
7012 return results;
7013 };
7014
7015 // Return all the elements for which a truth test fails.
7016 _.reject = function(obj, predicate, context) {
7017 return _.filter(obj, _.negate(_.iteratee(predicate)), context);
7018 };
7019
7020 // Determine whether all of the elements match a truth test.
7021 // Aliased as `all`.
7022 _.every = _.all = function(obj, predicate, context) {
7023 if (obj == null) return true;
7024 predicate = _.iteratee(predicate, context);
7025 var keys = obj.length !== +obj.length && _.keys(obj),
7026 length = (keys || obj).length,
7027 index, currentKey;
7028 for (index = 0; index < length; index++) {
7029 currentKey = keys ? keys[index] : index;
7030 if (!predicate(obj[currentKey], currentKey, obj)) return false;
7031 }
7032 return true;
7033 };
7034
7035 // Determine if at least one element in the object matches a truth test.
7036 // Aliased as `any`.
7037 _.some = _.any = function(obj, predicate, context) {
7038 if (obj == null) return false;
7039 predicate = _.iteratee(predicate, context);
7040 var keys = obj.length !== +obj.length && _.keys(obj),
7041 length = (keys || obj).length,
7042 index, currentKey;
7043 for (index = 0; index < length; index++) {
7044 currentKey = keys ? keys[index] : index;
7045 if (predicate(obj[currentKey], currentKey, obj)) return true;
7046 }
7047 return false;
7048 };
7049
7050 // Determine if the array or object contains a given value (using `===`).
7051 // Aliased as `include`.
7052 _.contains = _.include = function(obj, target) {
7053 if (obj == null) return false;
7054 if (obj.length !== +obj.length) obj = _.values(obj);
7055 return _.indexOf(obj, target) >= 0;
7056 };
7057
7058 // Invoke a method (with arguments) on every item in a collection.
7059 _.invoke = function(obj, method) {
7060 var args = slice.call(arguments, 2);
7061 var isFunc = _.isFunction(method);
7062 return _.map(obj, function(value) {
7063 return (isFunc ? method : value[method]).apply(value, args);
7064 });
7065 };
7066
7067 // Convenience version of a common use case of `map`: fetching a property.
7068 _.pluck = function(obj, key) {
7069 return _.map(obj, _.property(key));
7070 };
7071
7072 // Convenience version of a common use case of `filter`: selecting only objects
7073 // containing specific `key:value` pairs.
7074 _.where = function(obj, attrs) {
7075 return _.filter(obj, _.matches(attrs));
7076 };
7077
7078 // Convenience version of a common use case of `find`: getting the first object
7079 // containing specific `key:value` pairs.
7080 _.findWhere = function(obj, attrs) {
7081 return _.find(obj, _.matches(attrs));
7082 };
7083
7084 // Return the maximum element (or element-based computation).
7085 _.max = function(obj, iteratee, context) {
7086 var result = -Infinity, lastComputed = -Infinity,
7087 value, computed;
7088 if (iteratee == null && obj != null) {
7089 obj = obj.length === +obj.length ? obj : _.values(obj);
7090 for (var i = 0, length = obj.length; i < length; i++) {
7091 value = obj[i];
7092 if (value > result) {
7093 result = value;
7094 }
7095 }
7096 } else {
7097 iteratee = _.iteratee(iteratee, context);
7098 _.each(obj, function(value, index, list) {
7099 computed = iteratee(value, index, list);
7100 if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
7101 result = value;
7102 lastComputed = computed;
7103 }
7104 });
7105 }
7106 return result;
7107 };
7108
7109 // Return the minimum element (or element-based computation).
7110 _.min = function(obj, iteratee, context) {
7111 var result = Infinity, lastComputed = Infinity,
7112 value, computed;
7113 if (iteratee == null && obj != null) {
7114 obj = obj.length === +obj.length ? obj : _.values(obj);
7115 for (var i = 0, length = obj.length; i < length; i++) {
7116 value = obj[i];
7117 if (value < result) {
7118 result = value;
7119 }
7120 }
7121 } else {
7122 iteratee = _.iteratee(iteratee, context);
7123 _.each(obj, function(value, index, list) {
7124 computed = iteratee(value, index, list);
7125 if (computed < lastComputed || computed === Infinity && result === Infinity) {
7126 result = value;
7127 lastComputed = computed;
7128 }
7129 });
7130 }
7131 return result;
7132 };
7133
7134 // Shuffle a collection, using the modern version of the
7135 // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
7136 _.shuffle = function(obj) {
7137 var set = obj && obj.length === +obj.length ? obj : _.values(obj);
7138 var length = set.length;
7139 var shuffled = Array(length);
7140 for (var index = 0, rand; index < length; index++) {
7141 rand = _.random(0, index);
7142 if (rand !== index) shuffled[index] = shuffled[rand];
7143 shuffled[rand] = set[index];
7144 }
7145 return shuffled;
7146 };
7147
7148 // Sample **n** random values from a collection.
7149 // If **n** is not specified, returns a single random element.
7150 // The internal `guard` argument allows it to work with `map`.
7151 _.sample = function(obj, n, guard) {
7152 if (n == null || guard) {
7153 if (obj.length !== +obj.length) obj = _.values(obj);
7154 return obj[_.random(obj.length - 1)];
7155 }
7156 return _.shuffle(obj).slice(0, Math.max(0, n));
7157 };
7158
7159 // Sort the object's values by a criterion produced by an iteratee.
7160 _.sortBy = function(obj, iteratee, context) {
7161 iteratee = _.iteratee(iteratee, context);
7162 return _.pluck(_.map(obj, function(value, index, list) {
7163 return {
7164 value: value,
7165 index: index,
7166 criteria: iteratee(value, index, list)
7167 };
7168 }).sort(function(left, right) {
7169 var a = left.criteria;
7170 var b = right.criteria;
7171 if (a !== b) {
7172 if (a > b || a === void 0) return 1;
7173 if (a < b || b === void 0) return -1;
7174 }
7175 return left.index - right.index;
7176 }), 'value');
7177 };
7178
7179 // An internal function used for aggregate "group by" operations.
7180 var group = function(behavior) {
7181 return function(obj, iteratee, context) {
7182 var result = {};
7183 iteratee = _.iteratee(iteratee, context);
7184 _.each(obj, function(value, index) {
7185 var key = iteratee(value, index, obj);
7186 behavior(result, value, key);
7187 });
7188 return result;
7189 };
7190 };
7191
7192 // Groups the object's values by a criterion. Pass either a string attribute
7193 // to group by, or a function that returns the criterion.
7194 _.groupBy = group(function(result, value, key) {
7195 if (_.has(result, key)) result[key].push(value); else result[key] = [value];
7196 });
7197
7198 // Indexes the object's values by a criterion, similar to `groupBy`, but for
7199 // when you know that your index values will be unique.
7200 _.indexBy = group(function(result, value, key) {
7201 result[key] = value;
7202 });
7203
7204 // Counts instances of an object that group by a certain criterion. Pass
7205 // either a string attribute to count by, or a function that returns the
7206 // criterion.
7207 _.countBy = group(function(result, value, key) {
7208 if (_.has(result, key)) result[key]++; else result[key] = 1;
7209 });
7210
7211 // Use a comparator function to figure out the smallest index at which
7212 // an object should be inserted so as to maintain order. Uses binary search.
7213 _.sortedIndex = function(array, obj, iteratee, context) {
7214 iteratee = _.iteratee(iteratee, context, 1);
7215 var value = iteratee(obj);
7216 var low = 0, high = array.length;
7217 while (low < high) {
7218 var mid = low + high >>> 1;
7219 if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
7220 }
7221 return low;
7222 };
7223
7224 // Safely create a real, live array from anything iterable.
7225 _.toArray = function(obj) {
7226 if (!obj) return [];
7227 if (_.isArray(obj)) return slice.call(obj);
7228 if (obj.length === +obj.length) return _.map(obj, _.identity);
7229 return _.values(obj);
7230 };
7231
7232 // Return the number of elements in an object.
7233 _.size = function(obj) {
7234 if (obj == null) return 0;
7235 return obj.length === +obj.length ? obj.length : _.keys(obj).length;
7236 };
7237
7238 // Split a collection into two arrays: one whose elements all satisfy the given
7239 // predicate, and one whose elements all do not satisfy the predicate.
7240 _.partition = function(obj, predicate, context) {
7241 predicate = _.iteratee(predicate, context);
7242 var pass = [], fail = [];
7243 _.each(obj, function(value, key, obj) {
7244 (predicate(value, key, obj) ? pass : fail).push(value);
7245 });
7246 return [pass, fail];
7247 };
7248
7249 // Array Functions
7250 // ---------------
7251
7252 // Get the first element of an array. Passing **n** will return the first N
7253 // values in the array. Aliased as `head` and `take`. The **guard** check
7254 // allows it to work with `_.map`.
7255 _.first = _.head = _.take = function(array, n, guard) {
7256 if (array == null) return void 0;
7257 if (n == null || guard) return array[0];
7258 if (n < 0) return [];
7259 return slice.call(array, 0, n);
7260 };
7261
7262 // Returns everything but the last entry of the array. Especially useful on
7263 // the arguments object. Passing **n** will return all the values in
7264 // the array, excluding the last N. The **guard** check allows it to work with
7265 // `_.map`.
7266 _.initial = function(array, n, guard) {
7267 return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
7268 };
7269
7270 // Get the last element of an array. Passing **n** will return the last N
7271 // values in the array. The **guard** check allows it to work with `_.map`.
7272 _.last = function(array, n, guard) {
7273 if (array == null) return void 0;
7274 if (n == null || guard) return array[array.length - 1];
7275 return slice.call(array, Math.max(array.length - n, 0));
7276 };
7277
7278 // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
7279 // Especially useful on the arguments object. Passing an **n** will return
7280 // the rest N values in the array. The **guard**
7281 // check allows it to work with `_.map`.
7282 _.rest = _.tail = _.drop = function(array, n, guard) {
7283 return slice.call(array, n == null || guard ? 1 : n);
7284 };
7285
7286 // Trim out all falsy values from an array.
7287 _.compact = function(array) {
7288 return _.filter(array, _.identity);
7289 };
7290
7291 // Internal implementation of a recursive `flatten` function.
7292 var flatten = function(input, shallow, strict, output) {
7293 if (shallow && _.every(input, _.isArray)) {
7294 return concat.apply(output, input);
7295 }
7296 for (var i = 0, length = input.length; i < length; i++) {
7297 var value = input[i];
7298 if (!_.isArray(value) && !_.isArguments(value)) {
7299 if (!strict) output.push(value);
7300 } else if (shallow) {
7301 push.apply(output, value);
7302 } else {
7303 flatten(value, shallow, strict, output);
7304 }
7305 }
7306 return output;
7307 };
7308
7309 // Flatten out an array, either recursively (by default), or just one level.
7310 _.flatten = function(array, shallow) {
7311 return flatten(array, shallow, false, []);
7312 };
7313
7314 // Return a version of the array that does not contain the specified value(s).
7315 _.without = function(array) {
7316 return _.difference(array, slice.call(arguments, 1));
7317 };
7318
7319 // Produce a duplicate-free version of the array. If the array has already
7320 // been sorted, you have the option of using a faster algorithm.
7321 // Aliased as `unique`.
7322 _.uniq = _.unique = function(array, isSorted, iteratee, context) {
7323 if (array == null) return [];
7324 if (!_.isBoolean(isSorted)) {
7325 context = iteratee;
7326 iteratee = isSorted;
7327 isSorted = false;
7328 }
7329 if (iteratee != null) iteratee = _.iteratee(iteratee, context);
7330 var result = [];
7331 var seen = [];
7332 for (var i = 0, length = array.length; i < length; i++) {
7333 var value = array[i];
7334 if (isSorted) {
7335 if (!i || seen !== value) result.push(value);
7336 seen = value;
7337 } else if (iteratee) {
7338 var computed = iteratee(value, i, array);
7339 if (_.indexOf(seen, computed) < 0) {
7340 seen.push(computed);
7341 result.push(value);
7342 }
7343 } else if (_.indexOf(result, value) < 0) {
7344 result.push(value);
7345 }
7346 }
7347 return result;
7348 };
7349
7350 // Produce an array that contains the union: each distinct element from all of
7351 // the passed-in arrays.
7352 _.union = function() {
7353 return _.uniq(flatten(arguments, true, true, []));
7354 };
7355
7356 // Produce an array that contains every item shared between all the
7357 // passed-in arrays.
7358 _.intersection = function(array) {
7359 if (array == null) return [];
7360 var result = [];
7361 var argsLength = arguments.length;
7362 for (var i = 0, length = array.length; i < length; i++) {
7363 var item = array[i];
7364 if (_.contains(result, item)) continue;
7365 for (var j = 1; j < argsLength; j++) {
7366 if (!_.contains(arguments[j], item)) break;
7367 }
7368 if (j === argsLength) result.push(item);
7369 }
7370 return result;
7371 };
7372
7373 // Take the difference between one array and a number of other arrays.
7374 // Only the elements present in just the first array will remain.
7375 _.difference = function(array) {
7376 var rest = flatten(slice.call(arguments, 1), true, true, []);
7377 return _.filter(array, function(value){
7378 return !_.contains(rest, value);
7379 });
7380 };
7381
7382 // Zip together multiple lists into a single array -- elements that share
7383 // an index go together.
7384 _.zip = function(array) {
7385 if (array == null) return [];
7386 var length = _.max(arguments, 'length').length;
7387 var results = Array(length);
7388 for (var i = 0; i < length; i++) {
7389 results[i] = _.pluck(arguments, i);
7390 }
7391 return results;
7392 };
7393
7394 // Converts lists into objects. Pass either a single array of `[key, value]`
7395 // pairs, or two parallel arrays of the same length -- one of keys, and one of
7396 // the corresponding values.
7397 _.object = function(list, values) {
7398 if (list == null) return {};
7399 var result = {};
7400 for (var i = 0, length = list.length; i < length; i++) {
7401 if (values) {
7402 result[list[i]] = values[i];
7403 } else {
7404 result[list[i][0]] = list[i][1];
7405 }
7406 }
7407 return result;
7408 };
7409
7410 // Return the position of the first occurrence of an item in an array,
7411 // or -1 if the item is not included in the array.
7412 // If the array is large and already in sort order, pass `true`
7413 // for **isSorted** to use binary search.
7414 _.indexOf = function(array, item, isSorted) {
7415 if (array == null) return -1;
7416 var i = 0, length = array.length;
7417 if (isSorted) {
7418 if (typeof isSorted == 'number') {
7419 i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;
7420 } else {
7421 i = _.sortedIndex(array, item);
7422 return array[i] === item ? i : -1;
7423 }
7424 }
7425 for (; i < length; i++) if (array[i] === item) return i;
7426 return -1;
7427 };
7428
7429 _.lastIndexOf = function(array, item, from) {
7430 if (array == null) return -1;
7431 var idx = array.length;
7432 if (typeof from == 'number') {
7433 idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1);
7434 }
7435 while (--idx >= 0) if (array[idx] === item) return idx;
7436 return -1;
7437 };
7438
7439 // Generate an integer Array containing an arithmetic progression. A port of
7440 // the native Python `range()` function. See
7441 // [the Python documentation](http://docs.python.org/library/functions.html#range).
7442 _.range = function(start, stop, step) {
7443 if (arguments.length <= 1) {
7444 stop = start || 0;
7445 start = 0;
7446 }
7447 step = step || 1;
7448
7449 var length = Math.max(Math.ceil((stop - start) / step), 0);
7450 var range = Array(length);
7451
7452 for (var idx = 0; idx < length; idx++, start += step) {
7453 range[idx] = start;
7454 }
7455
7456 return range;
7457 };
7458
7459 // Function (ahem) Functions
7460 // ------------------
7461
7462 // Reusable constructor function for prototype setting.
7463 var Ctor = function(){};
7464
7465 // Create a function bound to a given object (assigning `this`, and arguments,
7466 // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
7467 // available.
7468 _.bind = function(func, context) {
7469 var args, bound;
7470 if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
7471 if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
7472 args = slice.call(arguments, 2);
7473 bound = function() {
7474 if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
7475 Ctor.prototype = func.prototype;
7476 var self = new Ctor;
7477 Ctor.prototype = null;
7478 var result = func.apply(self, args.concat(slice.call(arguments)));
7479 if (_.isObject(result)) return result;
7480 return self;
7481 };
7482 return bound;
7483 };
7484
7485 // Partially apply a function by creating a version that has had some of its
7486 // arguments pre-filled, without changing its dynamic `this` context. _ acts
7487 // as a placeholder, allowing any combination of arguments to be pre-filled.
7488 _.partial = function(func) {
7489 var boundArgs = slice.call(arguments, 1);
7490 return function() {
7491 var position = 0;
7492 var args = boundArgs.slice();
7493 for (var i = 0, length = args.length; i < length; i++) {
7494 if (args[i] === _) args[i] = arguments[position++];
7495 }
7496 while (position < arguments.length) args.push(arguments[position++]);
7497 return func.apply(this, args);
7498 };
7499 };
7500
7501 // Bind a number of an object's methods to that object. Remaining arguments
7502 // are the method names to be bound. Useful for ensuring that all callbacks
7503 // defined on an object belong to it.
7504 _.bindAll = function(obj) {
7505 var i, length = arguments.length, key;
7506 if (length <= 1) throw new Error('bindAll must be passed function names');
7507 for (i = 1; i < length; i++) {
7508 key = arguments[i];
7509 obj[key] = _.bind(obj[key], obj);
7510 }
7511 return obj;
7512 };
7513
7514 // Memoize an expensive function by storing its results.
7515 _.memoize = function(func, hasher) {
7516 var memoize = function(key) {
7517 var cache = memoize.cache;
7518 var address = hasher ? hasher.apply(this, arguments) : key;
7519 if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
7520 return cache[address];
7521 };
7522 memoize.cache = {};
7523 return memoize;
7524 };
7525
7526 // Delays a function for the given number of milliseconds, and then calls
7527 // it with the arguments supplied.
7528 _.delay = function(func, wait) {
7529 var args = slice.call(arguments, 2);
7530 return setTimeout(function(){
7531 return func.apply(null, args);
7532 }, wait);
7533 };
7534
7535 // Defers a function, scheduling it to run after the current call stack has
7536 // cleared.
7537 _.defer = function(func) {
7538 return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
7539 };
7540
7541 // Returns a function, that, when invoked, will only be triggered at most once
7542 // during a given window of time. Normally, the throttled function will run
7543 // as much as it can, without ever going more than once per `wait` duration;
7544 // but if you'd like to disable the execution on the leading edge, pass
7545 // `{leading: false}`. To disable execution on the trailing edge, ditto.
7546 _.throttle = function(func, wait, options) {
7547 var context, args, result;
7548 var timeout = null;
7549 var previous = 0;
7550 if (!options) options = {};
7551 var later = function() {
7552 previous = options.leading === false ? 0 : _.now();
7553 timeout = null;
7554 result = func.apply(context, args);
7555 if (!timeout) context = args = null;
7556 };
7557 return function() {
7558 var now = _.now();
7559 if (!previous && options.leading === false) previous = now;
7560 var remaining = wait - (now - previous);
7561 context = this;
7562 args = arguments;
7563 if (remaining <= 0 || remaining > wait) {
7564 clearTimeout(timeout);
7565 timeout = null;
7566 previous = now;
7567 result = func.apply(context, args);
7568 if (!timeout) context = args = null;
7569 } else if (!timeout && options.trailing !== false) {
7570 timeout = setTimeout(later, remaining);
7571 }
7572 return result;
7573 };
7574 };
7575
7576 // Returns a function, that, as long as it continues to be invoked, will not
7577 // be triggered. The function will be called after it stops being called for
7578 // N milliseconds. If `immediate` is passed, trigger the function on the
7579 // leading edge, instead of the trailing.
7580 _.debounce = function(func, wait, immediate) {
7581 var timeout, args, context, timestamp, result;
7582
7583 var later = function() {
7584 var last = _.now() - timestamp;
7585
7586 if (last < wait && last > 0) {
7587 timeout = setTimeout(later, wait - last);
7588 } else {
7589 timeout = null;
7590 if (!immediate) {
7591 result = func.apply(context, args);
7592 if (!timeout) context = args = null;
7593 }
7594 }
7595 };
7596
7597 return function() {
7598 context = this;
7599 args = arguments;
7600 timestamp = _.now();
7601 var callNow = immediate && !timeout;
7602 if (!timeout) timeout = setTimeout(later, wait);
7603 if (callNow) {
7604 result = func.apply(context, args);
7605 context = args = null;
7606 }
7607
7608 return result;
7609 };
7610 };
7611
7612 // Returns the first function passed as an argument to the second,
7613 // allowing you to adjust arguments, run code before and after, and
7614 // conditionally execute the original function.
7615 _.wrap = function(func, wrapper) {
7616 return _.partial(wrapper, func);
7617 };
7618
7619 // Returns a negated version of the passed-in predicate.
7620 _.negate = function(predicate) {
7621 return function() {
7622 return !predicate.apply(this, arguments);
7623 };
7624 };
7625
7626 // Returns a function that is the composition of a list of functions, each
7627 // consuming the return value of the function that follows.
7628 _.compose = function() {
7629 var args = arguments;
7630 var start = args.length - 1;
7631 return function() {
7632 var i = start;
7633 var result = args[start].apply(this, arguments);
7634 while (i--) result = args[i].call(this, result);
7635 return result;
7636 };
7637 };
7638
7639 // Returns a function that will only be executed after being called N times.
7640 _.after = function(times, func) {
7641 return function() {
7642 if (--times < 1) {
7643 return func.apply(this, arguments);
7644 }
7645 };
7646 };
7647
7648 // Returns a function that will only be executed before being called N times.
7649 _.before = function(times, func) {
7650 var memo;
7651 return function() {
7652 if (--times > 0) {
7653 memo = func.apply(this, arguments);
7654 } else {
7655 func = null;
7656 }
7657 return memo;
7658 };
7659 };
7660
7661 // Returns a function that will be executed at most one time, no matter how
7662 // often you call it. Useful for lazy initialization.
7663 _.once = _.partial(_.before, 2);
7664
7665 // Object Functions
7666 // ----------------
7667
7668 // Retrieve the names of an object's properties.
7669 // Delegates to **ECMAScript 5**'s native `Object.keys`
7670 _.keys = function(obj) {
7671 if (!_.isObject(obj)) return [];
7672 if (nativeKeys) return nativeKeys(obj);
7673 var keys = [];
7674 for (var key in obj) if (_.has(obj, key)) keys.push(key);
7675 return keys;
7676 };
7677
7678 // Retrieve the values of an object's properties.
7679 _.values = function(obj) {
7680 var keys = _.keys(obj);
7681 var length = keys.length;
7682 var values = Array(length);
7683 for (var i = 0; i < length; i++) {
7684 values[i] = obj[keys[i]];
7685 }
7686 return values;
7687 };
7688
7689 // Convert an object into a list of `[key, value]` pairs.
7690 _.pairs = function(obj) {
7691 var keys = _.keys(obj);
7692 var length = keys.length;
7693 var pairs = Array(length);
7694 for (var i = 0; i < length; i++) {
7695 pairs[i] = [keys[i], obj[keys[i]]];
7696 }
7697 return pairs;
7698 };
7699
7700 // Invert the keys and values of an object. The values must be serializable.
7701 _.invert = function(obj) {
7702 var result = {};
7703 var keys = _.keys(obj);
7704 for (var i = 0, length = keys.length; i < length; i++) {
7705 result[obj[keys[i]]] = keys[i];
7706 }
7707 return result;
7708 };
7709
7710 // Return a sorted list of the function names available on the object.
7711 // Aliased as `methods`
7712 _.functions = _.methods = function(obj) {
7713 var names = [];
7714 for (var key in obj) {
7715 if (_.isFunction(obj[key])) names.push(key);
7716 }
7717 return names.sort();
7718 };
7719
7720 // Extend a given object with all the properties in passed-in object(s).
7721 _.extend = function(obj) {
7722 if (!_.isObject(obj)) return obj;
7723 var source, prop;
7724 for (var i = 1, length = arguments.length; i < length; i++) {
7725 source = arguments[i];
7726 for (prop in source) {
7727 if (hasOwnProperty.call(source, prop)) {
7728 obj[prop] = source[prop];
7729 }
7730 }
7731 }
7732 return obj;
7733 };
7734
7735 // Return a copy of the object only containing the whitelisted properties.
7736 _.pick = function(obj, iteratee, context) {
7737 var result = {}, key;
7738 if (obj == null) return result;
7739 if (_.isFunction(iteratee)) {
7740 iteratee = createCallback(iteratee, context);
7741 for (key in obj) {
7742 var value = obj[key];
7743 if (iteratee(value, key, obj)) result[key] = value;
7744 }
7745 } else {
7746 var keys = concat.apply([], slice.call(arguments, 1));
7747 obj = new Object(obj);
7748 for (var i = 0, length = keys.length; i < length; i++) {
7749 key = keys[i];
7750 if (key in obj) result[key] = obj[key];
7751 }
7752 }
7753 return result;
7754 };
7755
7756 // Return a copy of the object without the blacklisted properties.
7757 _.omit = function(obj, iteratee, context) {
7758 if (_.isFunction(iteratee)) {
7759 iteratee = _.negate(iteratee);
7760 } else {
7761 var keys = _.map(concat.apply([], slice.call(arguments, 1)), String);
7762 iteratee = function(value, key) {
7763 return !_.contains(keys, key);
7764 };
7765 }
7766 return _.pick(obj, iteratee, context);
7767 };
7768
7769 // Fill in a given object with default properties.
7770 _.defaults = function(obj) {
7771 if (!_.isObject(obj)) return obj;
7772 for (var i = 1, length = arguments.length; i < length; i++) {
7773 var source = arguments[i];
7774 for (var prop in source) {
7775 if (obj[prop] === void 0) obj[prop] = source[prop];
7776 }
7777 }
7778 return obj;
7779 };
7780
7781 // Create a (shallow-cloned) duplicate of an object.
7782 _.clone = function(obj) {
7783 if (!_.isObject(obj)) return obj;
7784 return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
7785 };
7786
7787 // Invokes interceptor with the obj, and then returns obj.
7788 // The primary purpose of this method is to "tap into" a method chain, in
7789 // order to perform operations on intermediate results within the chain.
7790 _.tap = function(obj, interceptor) {
7791 interceptor(obj);
7792 return obj;
7793 };
7794
7795 // Internal recursive comparison function for `isEqual`.
7796 var eq = function(a, b, aStack, bStack) {
7797 // Identical objects are equal. `0 === -0`, but they aren't identical.
7798 // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
7799 if (a === b) return a !== 0 || 1 / a === 1 / b;
7800 // A strict comparison is necessary because `null == undefined`.
7801 if (a == null || b == null) return a === b;
7802 // Unwrap any wrapped objects.
7803 if (a instanceof _) a = a._wrapped;
7804 if (b instanceof _) b = b._wrapped;
7805 // Compare `[[Class]]` names.
7806 var className = toString.call(a);
7807 if (className !== toString.call(b)) return false;
7808 switch (className) {
7809 // Strings, numbers, regular expressions, dates, and booleans are compared by value.
7810 case '[object RegExp]':
7811 // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
7812 case '[object String]':
7813 // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
7814 // equivalent to `new String("5")`.
7815 return '' + a === '' + b;
7816 case '[object Number]':
7817 // `NaN`s are equivalent, but non-reflexive.
7818 // Object(NaN) is equivalent to NaN
7819 if (+a !== +a) return +b !== +b;
7820 // An `egal` comparison is performed for other numeric values.
7821 return +a === 0 ? 1 / +a === 1 / b : +a === +b;
7822 case '[object Date]':
7823 case '[object Boolean]':
7824 // Coerce dates and booleans to numeric primitive values. Dates are compared by their
7825 // millisecond representations. Note that invalid dates with millisecond representations
7826 // of `NaN` are not equivalent.
7827 return +a === +b;
7828 }
7829 if (typeof a != 'object' || typeof b != 'object') return false;
7830 // Assume equality for cyclic structures. The algorithm for detecting cyclic
7831 // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
7832 var length = aStack.length;
7833 while (length--) {
7834 // Linear search. Performance is inversely proportional to the number of
7835 // unique nested structures.
7836 if (aStack[length] === a) return bStack[length] === b;
7837 }
7838 // Objects with different constructors are not equivalent, but `Object`s
7839 // from different frames are.
7840 var aCtor = a.constructor, bCtor = b.constructor;
7841 if (
7842 aCtor !== bCtor &&
7843 // Handle Object.create(x) cases
7844 'constructor' in a && 'constructor' in b &&
7845 !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
7846 _.isFunction(bCtor) && bCtor instanceof bCtor)
7847 ) {
7848 return false;
7849 }
7850 // Add the first object to the stack of traversed objects.
7851 aStack.push(a);
7852 bStack.push(b);
7853 var size, result;
7854 // Recursively compare objects and arrays.
7855 if (className === '[object Array]') {
7856 // Compare array lengths to determine if a deep comparison is necessary.
7857 size = a.length;
7858 result = size === b.length;
7859 if (result) {
7860 // Deep compare the contents, ignoring non-numeric properties.
7861 while (size--) {
7862 if (!(result = eq(a[size], b[size], aStack, bStack))) break;
7863 }
7864 }
7865 } else {
7866 // Deep compare objects.
7867 var keys = _.keys(a), key;
7868 size = keys.length;
7869 // Ensure that both objects contain the same number of properties before comparing deep equality.
7870 result = _.keys(b).length === size;
7871 if (result) {
7872 while (size--) {
7873 // Deep compare each member
7874 key = keys[size];
7875 if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
7876 }
7877 }
7878 }
7879 // Remove the first object from the stack of traversed objects.
7880 aStack.pop();
7881 bStack.pop();
7882 return result;
7883 };
7884
7885 // Perform a deep comparison to check if two objects are equal.
7886 _.isEqual = function(a, b) {
7887 return eq(a, b, [], []);
7888 };
7889
7890 // Is a given array, string, or object empty?
7891 // An "empty" object has no enumerable own-properties.
7892 _.isEmpty = function(obj) {
7893 if (obj == null) return true;
7894 if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0;
7895 for (var key in obj) if (_.has(obj, key)) return false;
7896 return true;
7897 };
7898
7899 // Is a given value a DOM element?
7900 _.isElement = function(obj) {
7901 return !!(obj && obj.nodeType === 1);
7902 };
7903
7904 // Is a given value an array?
7905 // Delegates to ECMA5's native Array.isArray
7906 _.isArray = nativeIsArray || function(obj) {
7907 return toString.call(obj) === '[object Array]';
7908 };
7909
7910 // Is a given variable an object?
7911 _.isObject = function(obj) {
7912 var type = typeof obj;
7913 return type === 'function' || type === 'object' && !!obj;
7914 };
7915
7916 // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
7917 _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
7918 _['is' + name] = function(obj) {
7919 return toString.call(obj) === '[object ' + name + ']';
7920 };
7921 });
7922
7923 // Define a fallback version of the method in browsers (ahem, IE), where
7924 // there isn't any inspectable "Arguments" type.
7925 if (!_.isArguments(arguments)) {
7926 _.isArguments = function(obj) {
7927 return _.has(obj, 'callee');
7928 };
7929 }
7930
7931 // Optimize `isFunction` if appropriate. Work around an IE 11 bug.
7932 if (typeof /./ !== 'function') {
7933 _.isFunction = function(obj) {
7934 return typeof obj == 'function' || false;
7935 };
7936 }
7937
7938 // Is a given object a finite number?
7939 _.isFinite = function(obj) {
7940 return isFinite(obj) && !isNaN(parseFloat(obj));
7941 };
7942
7943 // Is the given value `NaN`? (NaN is the only number which does not equal itself).
7944 _.isNaN = function(obj) {
7945 return _.isNumber(obj) && obj !== +obj;
7946 };
7947
7948 // Is a given value a boolean?
7949 _.isBoolean = function(obj) {
7950 return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
7951 };
7952
7953 // Is a given value equal to null?
7954 _.isNull = function(obj) {
7955 return obj === null;
7956 };
7957
7958 // Is a given variable undefined?
7959 _.isUndefined = function(obj) {
7960 return obj === void 0;
7961 };
7962
7963 // Shortcut function for checking if an object has a given property directly
7964 // on itself (in other words, not on a prototype).
7965 _.has = function(obj, key) {
7966 return obj != null && hasOwnProperty.call(obj, key);
7967 };
7968
7969 // Utility Functions
7970 // -----------------
7971
7972 // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
7973 // previous owner. Returns a reference to the Underscore object.
7974 _.noConflict = function() {
7975 root._ = previousUnderscore;
7976 return this;
7977 };
7978
7979 // Keep the identity function around for default iteratees.
7980 _.identity = function(value) {
7981 return value;
7982 };
7983
7984 _.constant = function(value) {
7985 return function() {
7986 return value;
7987 };
7988 };
7989
7990 _.noop = function(){};
7991
7992 _.property = function(key) {
7993 return function(obj) {
7994 return obj[key];
7995 };
7996 };
7997
7998 // Returns a predicate for checking whether an object has a given set of `key:value` pairs.
7999 _.matches = function(attrs) {
8000 var pairs = _.pairs(attrs), length = pairs.length;
8001 return function(obj) {
8002 if (obj == null) return !length;
8003 obj = new Object(obj);
8004 for (var i = 0; i < length; i++) {
8005 var pair = pairs[i], key = pair[0];
8006 if (pair[1] !== obj[key] || !(key in obj)) return false;
8007 }
8008 return true;
8009 };
8010 };
8011
8012 // Run a function **n** times.
8013 _.times = function(n, iteratee, context) {
8014 var accum = Array(Math.max(0, n));
8015 iteratee = createCallback(iteratee, context, 1);
8016 for (var i = 0; i < n; i++) accum[i] = iteratee(i);
8017 return accum;
8018 };
8019
8020 // Return a random integer between min and max (inclusive).
8021 _.random = function(min, max) {
8022 if (max == null) {
8023 max = min;
8024 min = 0;
8025 }
8026 return min + Math.floor(Math.random() * (max - min + 1));
8027 };
8028
8029 // A (possibly faster) way to get the current timestamp as an integer.
8030 _.now = Date.now || function() {
8031 return new Date().getTime();
8032 };
8033
8034 // List of HTML entities for escaping.
8035 var escapeMap = {
8036 '&': '&amp;',
8037 '<': '&lt;',
8038 '>': '&gt;',
8039 '"': '&quot;',
8040 "'": '&#x27;',
8041 '`': '&#x60;'
8042 };
8043 var unescapeMap = _.invert(escapeMap);
8044
8045 // Functions for escaping and unescaping strings to/from HTML interpolation.
8046 var createEscaper = function(map) {
8047 var escaper = function(match) {
8048 return map[match];
8049 };
8050 // Regexes for identifying a key that needs to be escaped
8051 var source = '(?:' + _.keys(map).join('|') + ')';
8052 var testRegexp = RegExp(source);
8053 var replaceRegexp = RegExp(source, 'g');
8054 return function(string) {
8055 string = string == null ? '' : '' + string;
8056 return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
8057 };
8058 };
8059 _.escape = createEscaper(escapeMap);
8060 _.unescape = createEscaper(unescapeMap);
8061
8062 // If the value of the named `property` is a function then invoke it with the
8063 // `object` as context; otherwise, return it.
8064 _.result = function(object, property) {
8065 if (object == null) return void 0;
8066 var value = object[property];
8067 return _.isFunction(value) ? object[property]() : value;
8068 };
8069
8070 // Generate a unique integer id (unique within the entire client session).
8071 // Useful for temporary DOM ids.
8072 var idCounter = 0;
8073 _.uniqueId = function(prefix) {
8074 var id = ++idCounter + '';
8075 return prefix ? prefix + id : id;
8076 };
8077
8078 // By default, Underscore uses ERB-style template delimiters, change the
8079 // following template settings to use alternative delimiters.
8080 _.templateSettings = {
8081 evaluate : /<%([\s\S]+?)%>/g,
8082 interpolate : /<%=([\s\S]+?)%>/g,
8083 escape : /<%-([\s\S]+?)%>/g
8084 };
8085
8086 // When customizing `templateSettings`, if you don't want to define an
8087 // interpolation, evaluation or escaping regex, we need one that is
8088 // guaranteed not to match.
8089 var noMatch = /(.)^/;
8090
8091 // Certain characters need to be escaped so that they can be put into a
8092 // string literal.
8093 var escapes = {
8094 "'": "'",
8095 '\\': '\\',
8096 '\r': 'r',
8097 '\n': 'n',
8098 '\u2028': 'u2028',
8099 '\u2029': 'u2029'
8100 };
8101
8102 var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
8103
8104 var escapeChar = function(match) {
8105 return '\\' + escapes[match];
8106 };
8107
8108 // JavaScript micro-templating, similar to John Resig's implementation.
8109 // Underscore templating handles arbitrary delimiters, preserves whitespace,
8110 // and correctly escapes quotes within interpolated code.
8111 // NB: `oldSettings` only exists for backwards compatibility.
8112 _.template = function(text, settings, oldSettings) {
8113 if (!settings && oldSettings) settings = oldSettings;
8114 settings = _.defaults({}, settings, _.templateSettings);
8115
8116 // Combine delimiters into one regular expression via alternation.
8117 var matcher = RegExp([
8118 (settings.escape || noMatch).source,
8119 (settings.interpolate || noMatch).source,
8120 (settings.evaluate || noMatch).source
8121 ].join('|') + '|$', 'g');
8122
8123 // Compile the template source, escaping string literals appropriately.
8124 var index = 0;
8125 var source = "__p+='";
8126 text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
8127 source += text.slice(index, offset).replace(escaper, escapeChar);
8128 index = offset + match.length;
8129
8130 if (escape) {
8131 source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
8132 } else if (interpolate) {
8133 source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
8134 } else if (evaluate) {
8135 source += "';\n" + evaluate + "\n__p+='";
8136 }
8137
8138 // Adobe VMs need the match returned to produce the correct offest.
8139 return match;
8140 });
8141 source += "';\n";
8142
8143 // If a variable is not specified, place data values in local scope.
8144 if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
8145
8146 source = "var __t,__p='',__j=Array.prototype.join," +
8147 "print=function(){__p+=__j.call(arguments,'');};\n" +
8148 source + 'return __p;\n';
8149
8150 try {
8151 var render = new Function(settings.variable || 'obj', '_', source);
8152 } catch (e) {
8153 e.source = source;
8154 throw e;
8155 }
8156
8157 var template = function(data) {
8158 return render.call(this, data, _);
8159 };
8160
8161 // Provide the compiled source as a convenience for precompilation.
8162 var argument = settings.variable || 'obj';
8163 template.source = 'function(' + argument + '){\n' + source + '}';
8164
8165 return template;
8166 };
8167
8168 // Add a "chain" function. Start chaining a wrapped Underscore object.
8169 _.chain = function(obj) {
8170 var instance = _(obj);
8171 instance._chain = true;
8172 return instance;
8173 };
8174
8175 // OOP
8176 // ---------------
8177 // If Underscore is called as a function, it returns a wrapped object that
8178 // can be used OO-style. This wrapper holds altered versions of all the
8179 // underscore functions. Wrapped objects may be chained.
8180
8181 // Helper function to continue chaining intermediate results.
8182 var result = function(obj) {
8183 return this._chain ? _(obj).chain() : obj;
8184 };
8185
8186 // Add your own custom functions to the Underscore object.
8187 _.mixin = function(obj) {
8188 _.each(_.functions(obj), function(name) {
8189 var func = _[name] = obj[name];
8190 _.prototype[name] = function() {
8191 var args = [this._wrapped];
8192 push.apply(args, arguments);
8193 return result.call(this, func.apply(_, args));
8194 };
8195 });
8196 };
8197
8198 // Add all of the Underscore functions to the wrapper object.
8199 _.mixin(_);
8200
8201 // Add all mutator Array functions to the wrapper.
8202 _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
8203 var method = ArrayProto[name];
8204 _.prototype[name] = function() {
8205 var obj = this._wrapped;
8206 method.apply(obj, arguments);
8207 if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
8208 return result.call(this, obj);
8209 };
8210 });
8211
8212 // Add all accessor Array functions to the wrapper.
8213 _.each(['concat', 'join', 'slice'], function(name) {
8214 var method = ArrayProto[name];
8215 _.prototype[name] = function() {
8216 return result.call(this, method.apply(this._wrapped, arguments));
8217 };
8218 });
8219
8220 // Extracts the result from a wrapped and chained object.
8221 _.prototype.value = function() {
8222 return this._wrapped;
8223 };
8224
8225 // AMD registration happens at the end for compatibility with AMD loaders
8226 // that may not enforce next-turn semantics on modules. Even though general
8227 // practice for AMD registration is to be anonymous, underscore registers
8228 // as a named module because, like jQuery, it is a base library that is
8229 // popular enough to be bundled in a third party lib, but not be part of
8230 // an AMD load request. Those cases could generate an error when an
8231 // anonymous define() is called outside of a loader request.
8232 if (typeof define === 'function' && define.amd) {
8233 define('underscore', [], function() {
8234 return _;
8235 });
8236 }
8237}.call(this));
8238
8239},{}]},{},[1]);