UNPKG

labo-components

Version:
510 lines (497 loc) 8.24 kB
export const sanitize = s => s.replace(/\.|,|:|;|\)|\(|"|'/g, '').toLowerCase(); export const createWordList = (words, searchTerm, size) => { // sanitize words and remove short strings words = words.map(w => sanitize(w)).filter(w => w.length > 1); // Add word combinations [n, n+1] for (let i = 0, len = words.length - 1; i < len; i++) { words.push(words[i] + '_' + words[i + 1]); } // Filter by searchTerm if (searchTerm) { const searchTerms = searchTerm .toLowerCase() .trimLeft() .trimRight() .split(' '); words = words.filter(w => searchTerms.some(s => w.indexOf(s) !== -1)); } // Build word index const wordIndex = {}; words.forEach(w => { if (!(w in wordIndex)) { wordIndex[w] = 1; } else { wordIndex[w] = wordIndex[w] + 1; } }); // generate items from index const items = Object.keys(wordIndex) // filter out combined words that have only score 1 .filter(w => wordIndex[w] > 1 || w.indexOf('_') == -1) .map(w => ({ id: w, label: w, score: wordIndex[w], size: 1 })) .sort((a, b) => (a.score == b.score ? 0 : b.score - a.score)) // Optimization: As filtering the stopwords is quite heavy: // 1. first slice to required size + length of stop words set .slice(0, size + DutchStopWords.length) // 2. exclude stopwords .filter(item => { // single word in stopwords if (DutchStopWords.includes(item.id)) { return false; } // combined word if (item.id.indexOf('_') !== -1) { const parts = item.id.split('_'); for (let i = 0, len = parts.length; i < len; i++) { if (DutchStopWords.includes(parts[i])) { return false; } } } return true; }) // 3. slice again to get required size .slice(0, size); // get max score let maxScore = items.reduce( (maxScore, item) => (item.score > maxScore ? item.score : maxScore), 0 ); // calculate sqrt normalized size items.forEach(item => { item.size = Math.sqrt(item.score / maxScore); }); return items; }; // copy/adapted from https://github.com/stopwords-iso/stopwords-nl/blob/master/stopwords-nl.json export const DutchStopWords = [ 'aan', 'aangaande', 'aangezien', 'achte', 'achter', 'achterna', 'af', 'afgelopen', 'al', 'aldaar', 'aldus', 'alhoewel', 'alias', 'alle', 'allebei', 'alleen', 'alles', 'als', 'alsnog', 'altijd', 'altoos', 'ander', 'andere', 'anders', 'anderszins', 'beetje', 'behalve', 'behoudens', 'beide', 'beiden', 'ben', 'beneden', 'bent', 'bepaald', 'betreffende', 'bij', 'bijna', 'bijv', 'binnen', 'binnenin', 'blijkbaar', 'blijken', 'boven', 'bovenal', 'bovendien', 'bovengenoemd', 'bovenstaand', 'bovenvermeld', 'buiten', 'bv', 'daar', 'daardoor', 'daarheen', 'daarin', 'daarna', 'daarnet', 'daarom', 'daarop', 'daaruit', 'daarvanlangs', 'dan', 'dat', 'de', 'deden', 'deed', 'der', 'derde', 'derhalve', 'dertig', 'deze', 'dhr', 'die', 'dikwijls', 'dit', 'doch', 'doe', 'doen', 'doet', 'door', 'doorgaand', 'drie', 'duizend', 'dus', 'echter', 'een', 'eens', 'eer', 'eerdat', 'eerder', 'eerlang', 'eerst', 'eerste', 'eigen', 'eigenlijk', 'elk', 'elke', 'en', 'enig', 'enige', 'enigszins', 'enkel', 'er', 'erdoor', 'erg', 'ergens', 'etc', 'etcetera', 'even', 'eveneens', 'evenwel', 'gauw', 'ge', 'gedurende', 'geen', 'gehad', 'gekund', 'geleden', 'gelijk', 'gemoeten', 'gemogen', 'genoeg', 'geweest', 'gewoon', 'gewoonweg', 'haar', 'haarzelf', 'had', 'hadden', 'hare', 'heb', 'hebben', 'hebt', 'hedden', 'heeft', 'heel', 'hem', 'hemzelf', 'hen', 'het', 'hetzelfde', 'hier', 'hierbeneden', 'hierboven', 'hierin', 'hierna', 'hierom', 'hij', 'hijzelf', 'hoe', 'hoewel', 'honderd', 'hun', 'hunne', 'ieder', 'iedere', 'iedereen', 'iemand', 'iets', 'ik', 'ikzelf', 'in', 'inderdaad', 'inmiddels', 'intussen', 'inzake', 'is', 'ja', 'je', 'jezelf', 'jij', 'jijzelf', 'jou', 'jouw', 'jouwe', 'juist', 'jullie', 'kan', 'klaar', 'kon', 'konden', 'krachtens', 'kun', 'kunnen', 'kunt', 'laatst', 'later', 'liever', 'lijken', 'lijkt', 'maak', 'maakt', 'maakte', 'maakten', 'maar', 'mag', 'maken', 'me', 'meer', 'meest', 'meestal', 'men', 'met', 'mevr', 'mezelf', 'mij', 'mijn', 'mijnent', 'mijner', 'mijzelf', 'minder', 'miss', 'misschien', 'missen', 'mits', 'mocht', 'mochten', 'moest', 'moesten', 'moet', 'moeten', 'mogen', 'mr', 'mrs', 'mw', 'na', 'naar', 'nadat', 'nam', 'namelijk', 'nee', 'neem', 'negen', 'nemen', 'nergens', 'net', 'niemand', 'niet', 'niets', 'niks', 'noch', 'nochtans', 'nog', 'nogal', 'nooit', 'nu', 'nv', 'of', 'ofschoon', 'om', 'omdat', 'omhoog', 'omlaag', 'omstreeks', 'omtrent', 'omver', 'ondanks', 'onder', 'ondertussen', 'ongeveer', 'ons', 'onszelf', 'onze', 'onzeker', 'ooit', 'ook', 'op', 'opnieuw', 'opzij', 'over', 'overal', 'overeind', 'overige', 'overigens', 'paar', 'pas', 'per', 'precies', 'recent', 'redelijk', 'reeds', 'rond', 'rondom', 'samen', 'sedert', 'sinds', 'sindsdien', 'slechts', 'sommige', 'spoedig', 'steeds', 'tamelijk', 'te', 'tegen', 'tegenover', 'tenzij', 'terwijl', 'thans', 'tien', 'tiende', 'tijdens', 'tja', 'toch', 'toe', 'toen', 'toenmaals', 'toenmalig', 'tot', 'totdat', 'tussen', 'twee', 'tweede', 'u', 'uit', 'uitgezonderd', 'uw', 'vaak', 'vaakwat', 'van', 'vanaf', 'vandaan', 'vanuit', 'vanwege', 'veel', 'veeleer', 'veertig', 'verder', 'verscheidene', 'verschillende', 'vervolgens', 'via', 'vier', 'vierde', 'vijf', 'vijfde', 'vijftig', 'vol', 'volgend', 'volgens', 'voor', 'vooraf', 'vooral', 'vooralsnog', 'voorbij', 'voordat', 'voordezen', 'voordien', 'voorheen', 'voorop', 'voorts', 'vooruit', 'vrij', 'vroeg', 'waar', 'waarom', 'waarschijnlijk', 'wanneer', 'want', 'waren', 'was', 'wat', 'we', 'wederom', 'weer', 'weg', 'wegens', 'weinig', 'wel', 'weldra', 'welk', 'welke', 'werd', 'werden', 'werder', 'wezen', 'whatever', 'wie', 'wiens', 'wier', 'wij', 'wijzelf', 'wil', 'wilden', 'willen', 'word', 'worden', 'wordt', 'zal', 'ze', 'zei', 'zeker', 'zelf', 'zelfde', 'zelfs', 'zes', 'zeven', 'zich', 'zichzelf', 'zij', 'zijn', 'zijne', 'zijzelf', 'zo', 'zoals', 'zodat', 'zodra', 'zonder', 'zou', 'zouden', 'zowat', 'zulk', 'zulke', 'zullen', 'zult', // additions "z'n", 'één', "d'r", 'nou', 'mmm', 'hè', 'ie', 'oh', 'dr', 'zn' ];