Філологи-мовознавці. Клуб ботанів

Реєстрація
26.10.07
Місто
London
Телефон
Samsung Galaxy S20
knedlyk можна не ковертувати, а або скомпілити у CLI і смикати пайтоном через консоль, або там вже є готова версія що піднімає http сервер і стукатись пайтоном до нього.
 
Реєстрація
29.03.18
Місто
🟦🟨
Телефон
Піксель
knedlyk можна не ковертувати, а або скомпілити у CLI і смикати пайтоном через консоль, або там вже є готова версія що піднімає http сервер і стукатись пайтоном до нього.
Підкажіть, як скомпілювати? Мені важливо локально запускати на машині у wsl: згодовувати текстовий файл скрипту, в якому він перетворює рядки тексту на відповідний відмінок.
Ідеально було би спробувати створити розширення для libreoffice, яке могло би це робити автоматом або макрос (я в тому не дуже розбираюся).
 
Реєстрація
26.10.07
Місто
London
Телефон
Samsung Galaxy S20
knedlyk
Для початку має бути встановлений nodejs. Далі інсталюємо `pkg`
Bash:
npm i --global pkg
У директорії з кодом набираємо
Bash:
npx pkg .

На виході має бінарники для вінди/лінукса/мака. Опціонально можна передавати в аргументах аби білдилось тільки під одну платформу.
Ну і звісно треба написати index.js який буде приймати агрументи з консолі і видавати потрібний формат на виході.
Ну і Шевченко.ЖС явно працює тільки з ПІБ, воно не розраховане на довільні слова. Якщо тобі саме для ПІБ потрібно - напиши у ПП, я тобі зроблю ті бінарники. Там роботи на 5 хв.
 
Реєстрація
29.03.18
Місто
🟦🟨
Телефон
Піксель
knedlyk
Для початку має бути встановлений nodejs. Далі інсталюємо `pkg`
Bash:
npm i --global pkg
У директорії з кодом набираємо
Bash:
npx pkg .

На виході має бінарники для вінди/лінукса/мака. Опціонально можна передавати в аргументах аби білдилось тільки під одну платформу.
Ну і звісно треба написати index.js який буде приймати агрументи з консолі і видавати потрібний формат на виході.
Ну і Шевченко.ЖС явно працює тільки з ПІБ, воно не розраховане на довільні слова. Якщо тобі саме для ПІБ потрібно - напиши у ПП, я тобі зроблю ті бінарники. Там роботи на 5 хв.
дякую!

врешті вийшов такий код, який аналізує вхідний файл зі списком прізвищ, імен, по батькові, змінює відмінок залежно від параметру та зберігає до зазначеного файлу, можна примусово зазначити граматичний рід. Використовується JS бібліотека "Шевченко". Залежності треба встановити вручну.
Код:
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));
 
Останнє редагування:
Реєстрація
26.10.07
Місто
London
Телефон
Samsung Galaxy S20
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]
 
Реєстрація
29.03.18
Місто
🟦🟨
Телефон
Піксель
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]
Дякую за відгук! Вніс перевірки. З арґументами в масиві працює для видачі підказки.
Я з JS раніше не працював, тому тут багато нубівського )))
 
Реєстрація
29.03.18
Місто
🟦🟨
Телефон
Піксель
knedlyk
Для початку має бути встановлений nodejs. Далі інсталюємо `pkg`
Bash:
npm i --global pkg
У директорії з кодом набираємо
Bash:
npx pkg .

На виході має бінарники для вінди/лінукса/мака. Опціонально можна передавати в аргументах аби білдилось тільки під одну платформу.
Ну і звісно треба написати index.js який буде приймати агрументи з консолі і видавати потрібний формат на виході.
Ну і Шевченко.ЖС явно працює тільки з ПІБ, воно не розраховане на довільні слова. Якщо тобі саме для ПІБ потрібно - напиши у ПП, я тобі зроблю ті бінарники. Там роботи на 5 хв.
Я подумав, що з рештою фраз (крім ПІП) впорається бібліотека pymorph2 чи pymorph3 - вона це ніби вміє робити. Можливо ви підкажете инший сценарій?
 
Реєстрація
26.10.07
Місто
London
Телефон
Samsung Galaxy S20
Я подумав, що з рештою фраз (крім ПІП) впорається бібліотека pymorph2 чи pymorph3 - вона це ніби вміє робити. Можливо ви підкажете инший сценарій?
На жаль не підкажу. Лінгвістичними лібами не цікавився
 

drmz

маниакально-депрессивный стэндап
Реєстрація
13.03.09
Місто
Гуляйполе
килограммы яиц, миллиметры Киева.

абзацы II, VIII, IX
"мм. Києві та Севастополі",
 
Реєстрація
29.03.18
Місто
🟦🟨
Телефон
Піксель
килограммы яиц, миллиметры Киева.

абзацы II, VIII, IX
"мм. Києві та Севастополі",
Міста.
 

dzidzio

Генерал Ухилянтських Військ
Реєстрація
23.04.19
Місто
Тарнопіль
Телефон
iPhone

Кочевник

Ховрах-Терорист
Команда форуму
Реєстрація
30.01.08
Місто
Свята Галичина
Телефон
Sams Note 20 Ultra + S8
Нова пішта надіслала смс згідно нової дибільної системи транслітерації:
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 х", а може "30 кх"?
 

Кочевник

Ховрах-Терорист
Команда форуму
Реєстрація
30.01.08
Місто
Свята Галичина
Телефон
Sams Note 20 Ultra + S8
А вага в системі СІ також в hram'ах вимірюється. Хоч би вже не позорилися. Є міжнародні позначення Kg, не потрібно використовувати свої дебільні милиці.

І ще, як відрізнити Kh - це транслітерація Kг чи Х?
 

yahoo

username
Реєстрація
21.11.09
Місто
Kharkiv
Телефон
Nubia Neo, Poco M3 Pro
Кочевник, вірогідно автоматично роботом повідомлення було цілком транслітероване з української кирилиці на латинку згідно оф правил.
Яка система СІ, які міжнародні позначення? Роботу про них невідомо
 
Зверху