Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Квас

Pages: [1] 2 3 ... 86
1
Вот пример на TS (с одним хаком, где TS не справляется). Если игнорировать типы, он превращается в пример на JS. :) Зато с типами работает автокомплит, и компилятор подскажет, если в конфиге чего-то не хватает.

Для простоты я сделал транслитерацию одного слова. Можно читать сразу пример - там конфигурация транслита и пример использования. А "фреймворк" обеспечивает магию, превращающую конфиг в рабочую функцию.

Code: [Select]
// "Фреймворк"

interface CharAnalyzerContext {
  word: string;
  position: number;
  wordLength: number;
}

type CharAnalyzer<T> = (char: string, context: CharAnalyzerContext) => T;

type Analyzer<T> = {
  [K in keyof T]: CharAnalyzer<T[K]>;
};

// Хак с кастами типа, зато одна реализация работает для любого T
function applyAnalyzer<T>(analyzer: Analyzer<T>): CharAnalyzer<T> {
  return (char, context) => {
    const metadata: any = {};
    Object.entries(analyzer).forEach(([key, analyzerFn]) => { metadata[key] = (analyzerFn as CharAnalyzer<any>)(char, context) });
    return metadata as T;
  }
}

interface TranslitConfig<T> {
  analyzer: Analyzer<T>;
  substitutions: Record<string, string | ((metadata: T, char: string) => string)>;
  defaultSubstitution: (metadata: T, char: string) => string;
}

function createTranslit<T>(config: TranslitConfig<T>): (word: string) => string {
  const analyze = applyAnalyzer(config.analyzer);
  return word => {
    const substituted: string[] = [];
    const wordLength = word.length;
    for (let position = 0; position < wordLength; ++position) {
      const char = word[position];
      const substitution = config.substitutions[char] ?? config.defaultSubstitution;
      let substitutedString: string;
      if (typeof substitution === 'string') {
        substitutedString = substitution;
      } else {
        const context: CharAnalyzerContext = { word, position, wordLength };
        const metadata = analyze(char, context);
        substitutedString = substitution(metadata, char);
      }
      substituted.push(substitutedString);
    }
    return substituted.join('');
  }
}

// Пример

interface Metadata {
  isFirst: boolean;
  precededBy: string | null;
}

const translitConfig: TranslitConfig<Metadata> = {
  analyzer: {
    isFirst: (char, context) => context.position === 0,
    precededBy: (char, context) => context.position === 0 ? null : context.word[context.position - 1],
  },
  substitutions: {
    'с': 's',
    'л': 'l',
    'ъ': '',
    'е': ({ isFirst, precededBy }) => isFirst || precededBy === 'ъ' ? 'je' : 'e',
  },
  defaultSubstitution: (_, char) => char,
}

const translit = createTranslit(translitConfig);

console.log(['сел', 'съел', 'ел'].map(translit));
// ["sel", "sjel", "jel"]
  • 1
  • 0

2
Очень общая постановка задачи. Алгоритмы могут быть довольно заковыристыми - например, бета-код для древнегреческого.

В качестве противоположного к регуляркам полюса можно предложить побить слово на буквы и для каждой буквы собрать "метаданные", имеющие смысл для конкретной схемы транслитирации ("позиция в слове", "сочетание символов"), и применять замену не побуквенно, а к букве + метаданные. Скорее всего получится несколько громоздко и, вероятно, не очень эффективно, зато решение концептуально простое, гибкое и конфигурируемое. (Оверинжиниринг - моё второе имя.) Могу игрушечный пример набросать.
  • 1
  • 0

3
читайте внимательней: написано, что людей с визами пропустили без проблем :stop:

Написано - людей с американскими визами.
  • 0
  • 0

4
Так это старая добрая King James Version (KJV), also the King James Bible (KJB) and the Authorized Version (AV). В более поздних версиях там императив: 9 Resist him, firm in your faith.

Собственно мой вопрос такой: чувак, который это написал, тупо скалькировал оригинал или в его версии английского фраза имела такой же смысл, как сейчас с императивом? Мне кажется что скорее первое...

В KJV тоже императив.
  • 0
  • 0

5
Какое в языке управление, такие и падежи. Devorare - переходный, resistere - непереходный (с дательным); а в английском devour и resist переходные.

Кстати, в латинском относительные местоимения широко использовались просто для связи предложений, cui "которому" можно считать эквивалентным et ei "и оному". Но это важно, наверно, только если с латинского переводили. Не знаю, с какого переводили KJV.
  • 0
  • 0

6
Да это ж Библия! https://www.biblegateway.com/passage/?search=1+Peter+5%3A8-9&version=VULGATE
Quote
8 Sobrii estote, et vigilate: quia adversarius vester diabolus tamquam leo rugiens circuit, quaerens quem devoret:
9 cui resistite fortes in fide: scientes eamdem passionem ei quae in mundo est vestrae fraternitati fieri.
  • 0
  • 0

7
извините, но это бред.  :no: императив по своей природе не может предваряться практически ничем, кроме отрицательной частицы и уж точно не относительным местоимением, вводящим придаточное :negozhe:

Ну вот вам пример, когда предваряется. :dunno:
  • 0
  • 0

8
Ну да, я думаю. В разных предложениях.
  • 0
  • 0

9
Императив! Be..., be..., resist...; whom resist, steadfast in the faith "которому сопротивляйся, будучи непреклонным в вере".
  • 0
  • 0

10
Ну там и семей как таковых не было, каждый сам по себе.
  • 0
  • 0

11
У Ефремова были колхозы? Ничего не могу вспомнить из сюжета "Туманности Андромеды", даже в чём там конфликт, и почему так называется. Только "биполярная математика". :)
  • 0
  • 0

12
Апулея в классики записать - это сильно.
  • 0
  • 0

13
В португальском от pastinaca вроде бы происходит слово bisnaga, которое значит - внезапно - металлический тюбик.
  • 0
  • 0

14
Надо же, а я тоже думал, что carota - позднее. А вот же оно: http://lexica.linguax.com/forc2.php?searchedLG=carota
Quote
Est autem praedulci radice, odorata, lutea, rufa, vel interdum purpurea, quae cocta in aceto et oleo manditur. Apic. 3. 21. Carotae, seu pastinacae frictae, etc.
Вообще, De re culinaria - годная книжка. Я оттуда узнал такое классное слово enucleatus - "без косточки".
  • 0
  • 0

15
Блин, халтура какая-то :fp.
Я всё-таки ориентируюсь на учебники уровня Ярхо и Лободы.

У Ярхо--Лободы нет ничего о биологической номенклатуре, ботаникам от него мало толку. А вообще, он, во-первых, для филологов (не классических), а во-вторых, для общего ознакомления с латынью в её археологической ипостаси. А не для того чтобы читать или, не дай бог, писать неолатинские тексты. Кстати, листаю его, и упражнений на составление латинских предложений там особо нет.
  • 0
  • 0

Pages: [1] 2 3 ... 86