Підкажіть, як скомпілювати? Мені важливо локально запускати на машині у wsl: згодовувати текстовий файл скрипту, в якому він перетворює рядки тексту на відповідний відмінок.knedlyk можна не ковертувати, а або скомпілити у CLI і смикати пайтоном через консоль, або там вже є готова версія що піднімає http сервер і стукатись пайтоном до нього.
npm i --global pkg
npx pkg .
дякую!knedlyk
Для початку має бути встановлений nodejs. Далі інсталюємо `pkg`
У директорії з кодом набираємоBash:npm i --global pkg
Bash:npx pkg .
На виході має бінарники для вінди/лінукса/мака. Опціонально можна передавати в аргументах аби білдилось тільки під одну платформу.
Ну і звісно треба написати index.js який буде приймати агрументи з консолі і видавати потрібний формат на виході.
Ну і Шевченко.ЖС явно працює тільки з ПІБ, воно не розраховане на довільні слова. Якщо тобі саме для ПІБ потрібно - напиши у ПП, я тобі зроблю ті бінарники. Там роботи на 5 хв.
const shevchenko = require('shevchenko');
const genderDetection = require('gender-detection');
const { promisify } = require('util');
const fs = require('fs');
const readFile = promisify(fs.readFile);
async function main() {
const args = process.argv.slice(2);
const inputFile = args[0];
const outputFile = args[1];
const caseType = args[2] || 'nominative';
if (!inputFile || args [0] == '-h' || args [0] =='--help') {
console.error('Usage: node index.js <inputFile> <outputFile> [male|female] [caseType] | [--help]');
console.error('\nOptions for "caseType":');
console.error(' - nominative, is default if none is given');
console.error(' - genitive');
console.error(' - dative');
console.error(' - accusative');
console.error(' - ablative');
console.error(' - locative');
console.error(' - vocative');
console.error('\nExample: node index.js input.txt output.txt female vocative\n');
return;
}
// читаємо зовнішній файл та отримуємо рядки з прізвищами
const fileData = await readFile(inputFile, 'utf8');
const namesArray = fileData.split('\n');
// конвертуємо кожне прізвище
const convertedNames = await Promise.all(namesArray.map(async (name) => {
const [familyName, givenName, patronymicName] = name.trim().split(' ');
// перевірка на наявність порожнього рядка
if (!givenName) {
// console.warn(`Warning: Given name is missing for "${familyName} ${patronymicName}"`);
return name;
}
// const gender = genderDetection.detect(givenName.toLowerCase()) || 'unknown';
const anthroponym = { givenName, patronymicName, familyName };
const gender = await shevchenko.detectGender(anthroponym); // "feminine"
if (gender == null) {
throw new Error('Failed to detect grammatical gender.');
}
const genderShevchenko = gender === 'female' ? 'feminine' : 'masculine';
const genderShevchenkoDetected = await shevchenko.detectGender(anthroponym);
const genderShevchenkoFinal = genderShevchenkoDetected || genderShevchenko;
const input = { ...anthroponym, gender: genderShevchenkoFinal };
const output = await shevchenko[`in${caseType[0].toUpperCase()}${caseType.slice(1)}`](input);
return `${output.familyName} ${output.givenName} ${output.patronymicName}`;
}));
// записуємо
// записуємо результат в зовнішній файл
// await fs.promises.writeFile(outputFqzile, convertedNames.join('\n'));
await fs.promises.writeFile(outputFile, convertedNames.filter(Boolean).join('\n'));
console.log('Converted successfully to '+caseType+'! See output file '+outputFile);
}
main().catch((error) => console.error(error));
// never used
const helpReq = args[3];
// args - массив, тому args=='-h' || args =='--help' завжи повертатиме false
if (!inputFile || args=='-h' || args =='--help')
// якщо текстовий документ створений на windows чи mac, цей шматок може відпрацювати некорретно, бо там інші переноси рядків.
const namesArray = fileData.split('\n');
// якщо хоч один рядок видасть помилку - воно усе зафейлиться.
// плюс код не відпрацює з пустими рядками у кінці, можна додати нагорі fileData.trim().split('\n') щоб їх трімнути
const convertedNames = await Promise.all(namesArray.map(async (name) => {
// сумнівно додатково детектити стать сторонньою лібою, яка до того ж початково розрахована на англійську
// але тобі видніше юзати вбудований у шевченка детектор чи додавати ще щось
const gender = genderDetection.detect(givenName) || 'unknown';
[/QUOTE]
[/SPOILER]
Дякую за відгук! Вніс перевірки. З арґументами в масиві працює для видачі підказки.knedlyk
Код:// never used const helpReq = args[3]; // args - массив, тому args=='-h' || args =='--help' завжи повертатиме false if (!inputFile || args=='-h' || args =='--help') // якщо текстовий документ створений на windows чи mac, цей шматок може відпрацювати некорретно, бо там інші переноси рядків. const namesArray = fileData.split('\n'); // якщо хоч один рядок видасть помилку - воно усе зафейлиться. // плюс код не відпрацює з пустими рядками у кінці, можна додати нагорі fileData.trim().split('\n') щоб їх трімнути const convertedNames = await Promise.all(namesArray.map(async (name) => { // сумнівно додатково детектити стать сторонньою лібою, яка до того ж початково розрахована на англійську // але тобі видніше юзати вбудований у шевченка детектор чи додавати ще щось const gender = genderDetection.detect(givenName) || 'unknown'; [/QUOTE] [/SPOILER]
Я подумав, що з рештою фраз (крім ПІП) впорається бібліотека pymorph2 чи pymorph3 - вона це ніби вміє робити. Можливо ви підкажете инший сценарій?knedlyk
Для початку має бути встановлений nodejs. Далі інсталюємо `pkg`
У директорії з кодом набираємоBash:npm i --global pkg
Bash:npx pkg .
На виході має бінарники для вінди/лінукса/мака. Опціонально можна передавати в аргументах аби білдилось тільки під одну платформу.
Ну і звісно треба написати index.js який буде приймати агрументи з консолі і видавати потрібний формат на виході.
Ну і Шевченко.ЖС явно працює тільки з ПІБ, воно не розраховане на довільні слова. Якщо тобі саме для ПІБ потрібно - напиши у ПП, я тобі зроблю ті бінарники. Там роботи на 5 хв.
На жаль не підкажу. Лінгвістичними лібами не цікавивсяЯ подумав, що з рештою фраз (крім ПІП) впорається бібліотека pymorph2 чи pymorph3 - вона це ніби вміє робити. Можливо ви підкажете инший сценарій?
килограммы яиц, миллиметры Киева.![]()
Про затвердження Положення про територіальні центри комплектування та соціальної підтримки
Постанова Кабінету Міністрів України; Положення, Перелік від 23.02.2022 № 154zakon.rada.gov.ua
Міста.килограммы яиц, миллиметры Киева.![]()
Про затвердження Положення про територіальні центри комплектування та соціальної підтримки
Постанова Кабінету Міністрів України; Положення, Перелік від 23.02.2022 № 154zakon.rada.gov.ua
абзацы II, VIII, IX
"мм. Києві та Севастополі",
Моє припущення на основі "пп."knedlyk, это ДСТУшная замена "м. Києві та м.Севастополі"? По аналогии с годами (гг.)?
Я довго думав, читав наукові дослідження. Що таке "30 х", а може "30 кх"?Posylka AENM00........ priamuie do vas u "Punkt pryimannia-vydachi (do 30 kh): vul. ..........., .." ............... (Lvivska obl.). Protiahom doby vy mozhete zminyty mistse dostavky, detali - https://my.novaposhtaglobal.ua
Хвилин?Що таке "30 х"