const fs = require("fs"); const fetch = require("node-fetch"); const { readDictionary } = require("@lingdocs/pashto-inflector"); const path = require("path"); const wordsPath = path.join(".", "src", "words"); const wordsFile = "raw-words.ts"; const verbCollectionPath = path.join(wordsPath, "verb-categories"); const nounAdjCollectionPath = path.join(wordsPath, "noun-adj-categories"); const adverbCollectionPath = path.join(wordsPath, "adverbs"); const verbTsFiles = fs.readdirSync(verbCollectionPath); const nounAdjTsFiles = fs.readdirSync(nounAdjCollectionPath); const adverbTsFiles = fs.readdirSync(adverbCollectionPath); const allVerbTsS = verbTsFiles.flatMap(fileName => [ ...require(path.join("..", verbCollectionPath, fileName)).map(x => x.ts) ]).filter((v, i, a) => a.findIndex(x => x === v) === i); const allNounAdjTsS = nounAdjTsFiles.flatMap(fileName => [ ...require(path.join("..", nounAdjCollectionPath, fileName)).map(x => x.ts) ]).filter((v, i, a) => a.findIndex(x => x === v) === i); const allAdverbTsS = adverbTsFiles.flatMap(fileName => [ ...require(path.join("..", adverbCollectionPath, fileName)).map(x => x.ts) ]).filter((v, i, a) => a.findIndex(x => x === v) === i); console.log("getting words from dictionary..."); fetch(process.env.LINGDOCS_DICTIONARY_URL).then(res => res.arrayBuffer()).then(buffer => { const dictionary = readDictionary(buffer); const entries = dictionary.entries; // MAKE VERBS FILE const allWords = [ ...getVerbsFromTsS(entries), ...getNounsAdjsFromTsS(entries), ]; const content = ` // @ts-ignore const words: Word[] = ${JSON.stringify(allWords)}; export default words;`; fs.writeFileSync(path.join(wordsPath, wordsFile), content); }); function getVerbsFromTsS(entries) { const missingEc = []; const toReturn = allVerbTsS.map(ts => { const entry = entries.find(x => ts === x.ts); if (!entry) { console.log("couldn't find ts", ts); return undefined; } if (!entry.ec) { missingEc.push(entry.ts); } if (entry.c && entry.c.includes("comp.")) { const complement = entries.find(x => entry.l === x.ts); return { entry, complement, }; } return { entry }; }).filter(x => x); if (missingEc.length !== 0) { console.log("Verbs missing ec:", missingEc); } return toReturn; } function getNounsAdjsFromTsS(entries) { const b = [...allNounAdjTsS, ...allAdverbTsS].map(ts => { const entry = entries.find(x => ts === x.ts); if (!entry) { console.log("couldn't find ts", ts); return undefined; } // const firstWord = entry.e.split(",")[0].split(";")[0].split("(")[0].trim(); // console.log(firstWord, entry.f, entry.ts); // if (firstWord.contains(" ")) console.log("SPACE PRESENT"); return entry; }).filter(x => x); return b; // console.log(b.length, "number of nouns/adjs"); }