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 ... 19
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
Было бы прикольно: freimuorci studium, например. ;D

Есть книжка про средневековый латинский, Даг Норберг написал. (Кстати, есть на португальском: https://latim.paginas.ufsc.br/files/2012/06/Manual-Pr%C3%A1tico-de-Latim-Medieval-2007.-Dag-Norberg.pdf) Он там приводит такой прелестный варваризм как daywerca. К сожалению, не нашёл текст, в котором он встречается.
  • 1
  • 0

4
вы говорите о единичных случаях, они писали фор-фан, а не потому что латынь продолжала быть языком науки. А вот Ньютон писал на латыни, когда писать на латыни всё ещё было нормально, это была опция по умолчанию. Но он уже застал то время, когда вернакуляры спихивали латынь на свалку истории, его работа Оптика уже была издана на английском

Я не специалист по всем наукам. Но в математике латынь сосуществовала с национальными языками на протяжении всего восемнадцатого века. На латинском писали такие столпы как Иоганн Бернулли и Эйлер - кого из современников вы поставите рядом с ними? Гаусс был последним представителем этой традиции. После Гаусса на латинском писали только диссертации. И ещё Пеано свою работу по основаниям арифметики. Вот он был "островом" и писал на латинском фор фан (точнее говоря, считал свою работу нетленкой). (А потом ещё и латино сине флексионе выдумал, большой оригинал.)
  • 1
  • 0

5
Ньютона переплюнуть, конечно, трудно. Но Эйлер и Гаусс тоже писали по-латински, а Гаусс - король математиков.
  • 1
  • 0

6
Итальянский / Re: i quali
« on: 01 April 2024, 13:29:38 »
вот авторитетный ответ от Zanichelli:
 https://aulalingue.scuola.zanichelli.it/benvenuti/2011/04/28/pronomi-relativi/


как я и говорил, che в итальянском используется только в прямом падеже, если нужен предлог, то надо использовать либо il quale либо cui

Я понял! Речь в любом случае об относительных предложениях (напрасно я вчера напирал на их относительность), но у вас в голове перепутались антецеденты и относительные местоимения. А я говорил правильно.

Che/cui и il quale - относительные местоимения, а не антецеденты. Ограничения на синтаксические функции касаются их роли в придаточном предложении, членом которого они являются.

Антецедентами являются существительные или указательные местоимения. Я также уверен, что il quale антецедентом быть не может. Это противно моей интуиции и пока не подтверждается гуглом.

Для примера, забьём в гугл "credo a ciò che" и проанализируем первый из четырёх тысяч примеров: credo a ciò che vedo "я верю в то, что вижу". Здесь антецедентом является указательное местоимение ciò с предлогом, в главном предложении оно является косвенным дополнением. Относительное местоимение che является прямым дополнением глагола vedo.

Для закрепления забьём в гугл "penso a ciò che". Первые две ссылки на сайты перевода пропустим, возьмём третью Penso a ciò che mi disse Hobie "Я думаю о том, что мне сказала Гоби" - как раз с глаголом "сказать". Опять же в главном предложении видим антецедент - косвенное дополнение, выраженное указательным местоимением с предлогом, а в зависимом - относительное местоимение che в роли прямого дополнения к disse.

Насчёт употребления che, cui / il quale см. https://www.treccani.it/enciclopedia/che-o-il-quale_(La-grammatica-italiana)/. Кстати, употребление практически идентично португальскому, вплоть до стилистики (бОльшая формальность il quale/o qual) и неупотребления il quale/o qual в ограничительных предложениях. Самое существенное различие - наличие в итальянском формы cui, которая употребляется с предлогами; в португальском с (короткими) предлогами употребляется que: a que, de que, но sobre o qual.
  • 1
  • 0

7
"Те государства, которые..." - в смысле, "все государства на свете"?  :lol:
  • 1
  • 0

8
Рашку конечно не жалко, но вот эсперанту жалко. Язык будет ассоциироваться с фашистами, тем более что риторика "фина веко" и правда очень близка к совковой идеологии "мировой революции". Это будет настоящий конец эсперанты.

Ага, я про это. Как-то двусмысленно написал.
  • 1
  • 0

9
За что эсперанто в военную-послевоенную РФ? Чтобы навсегда замазать?
  • 2
  • 0

10
Совершенно верно, но зачем префикс?

Всегда там был! Старое слово, у Плавта и Катона уже засвидетельствовано. То есть романские ни при чём.

В латинском com- иногда давал значение завершённости (facere - conficere, edere - comedere), а иногда просто усиливал значение (vellere - convellere, tundere - contundere). В разговорной речи любили префиксы за экспрессивность, поэтому не удивительно, что выжил этот вариант. А в других языках - "жевать" > "есть". Интересно, edere в чистом виде где-нибудь сохранился?
  • 1
  • 0

11
Обычно - добровольно-принудительное. Есть стандарты оформления кода. Есть и проверяющие их программы.
  • 1
  • 0

12
Если в общем и целом, то "?" означает, что начинаются так называемые query parameters - пары ключ=значение, разделённые литерой "&". Сервер получает запрос "url такой-то, параметры такие-то", и возвращает что-то, соответствующее этому url и параметрам. Веб-страница тоже знает, какой у неё url, и может использовать эту информацию через JS. В данном случае запрос идёт на сервер яндекса, у него просится превью с соответствующим id, и вместе с этим даются какие-то параметры. Что это за параметры - нам знать не надо, а для яндекса они имеют какой-то смысл. В принципе, единственная нетривиальная часть - parent-reqid, но что она значит - нам неведомо. Наверно, id, позволяющий яндексу понять, из какой поисковой сессии пользователь перешёл на превью.

Адрес ютуба привязан к id превью. Наверно, эта связь хранится в какой-то базе данных.
  • 1
  • 0

13
Фарш невозможно повернуть назад. :) История двигалась в противоположном направлении. Но нафига Бразилия в ЕС, там же коррупция и вообще.
  • 1
  • 0

14
нет, не так. Не надо ставить телегу поперек лошади: если нет законного основания для получения ВНЖ на концептуальном уровне, то и бумажке взяться неоткуда :negozhe:
Я это и написал, вы ломитесь в открытую дверь. Документы являются подтверждением законных оснований. Поэтому закон об иммиграции перечисляет именно список документов - иначе как чиновник может понять, что основания соблюдены?

Насколько мне известно, нет ниодной вменяемой страны мира, куда можно приехать совершенно беспричинно и надеяться получить ВНЖ. Если ты не официальный беженец/ супруг и/или восстанавливающий гражданство по корням/ суперспециалист по спецпрограмме (вроде синей карты в ЕС)/ крупный инвестор по спецпрограмме - хрен тебя кто ждет и хрен тебе чего выдадут и никакие горы бумаг этого не изменят.

Достаточно легально жить и работать в стране некоторое время. В случае Эквадора - 21 месяц, как вам показали. Жениться и выходить замуж не требуется.
  • 1
  • 0

15
еще раз для альтернативно одаренных: получение ВНЖ не сводится к собиранию бумажек, сначала надо иметь законное основание, чтобы ходатайствовать о ВНЖ

Мм... Бумажки и законное основание - это одно и то же. Бумажки являются подтверждением законных оснований. Типа, нужно подтвердить, что ты такое-то время законно прожил в стране (бумажка), имеешь постоянное место жительства (бумажка), работаешь и получаешь зарплату (бумажка), платишь налоги (бумажка) и т. п. Совокупность этих законных оснований, выраженная в гербарии бумажек, является достаточной для получения ВНЖ. Дьявол в деталях, то есть под "и т. п." Возможны вот такие казусы, когда один из документов должно выдать родное государство, а оно не даёт. Или вот у беларусов засада, у них теперь нельзя получить новый паспорт за границей, и тогда либо рисковать возвращаться в родные пенаты, либо иметь просроченный основной документ.

Конечно, иммигранту досадно. Но куда деваться, не отказываться же от справок о судимости. Кому нужны лишние уголовники? Вот и получается: если у тебя в своей стране всё нормально, дай справку; а если она тебя угнетает, проси убежище. Или вот беженцам отменили справки: если на вас падают бомбы, справка не нужна.
  • 3
  • 0

Pages: [1] 2 3 ... 19