StrangeAttractor
@StrangeAttractor

Как алгоритмически сгенерировать правильный словарь-фигарь?

Так сказать из области "занимательных задачек" по языковой морфологической обработке.

Т.к. мат здесь запрещён, всем известное слово я заменил более нейтральным, оригинал идеи тут.

И так:

Словарь - фигарь, лебеди - фигебеди, яйца - фигайца, книга - фигига, патологоанатом - фигологофигатом, пользователь - фигользователь... как-то так.

На первый взгляд кажется просто, а на второй уже не очень - надо формализовать определение корня, заменить (причём иногда не весь, а только его часть как в примере с "пользователем") корень на другой, обеспечить "благозвучную" фонетическую стыковку и рифму и т.д.

Вот интересно: на сколько это вообще возможно сделать.
  • Вопрос задан
  • 2457 просмотров
Пригласить эксперта
Ответы на вопрос 1
qmax
@qmax
программер
Upd. В общем, алгоритм должен быть такой:
1. во-первых, выделить заменяемую часть (основу или корень)
"однояйцевый" -> 'одно' + "яйц" + 'ев' + 'ый'
"переплаченный" -> 'пере' + "плач" + 'енн' + 'ый'
"гидроэлектростанция" -> 'гидро' + 'электро' + "станц" + 'ия'

Есть алгоритм стемминга для отделения окончаний: snowball.tartarus.org
Думаю, его можно переделать для приставок.
В случае подразумеваегого слова в один слог особого смысла заморачиваться с аффиксами нету, достаточно отделить приставки и добавочные корни по шаблону /многобукв/ + "о"

2. транслировать то, что получилось в фонемы.
Правила чтения русского языка - это около 100 шаблоновых правил, они нагугливаются табличкой.
Конкретно для подразумеваемого слова, скорее всего понадобится только раскрытие йе, йо, йу, йа)
"яйц" -> "йайц"

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

4. Начало заменяемой части, соответствующую какому-то шаблону, заменить на подсавной корень.
Для слова "гой" (С=согл, А=гласн, Й=й): /^С+/, /^.*?Й/ (все согласные или всё до первой "й")
"йайц" -> "гойайц"
"плач" -> "гойач"
"станц" -> "гойанц"
"айпад" -> "гойпад"
"район" -> "гойон"

5. свернуть всё обратно в буквы
"гойайц" -> "гояйц"
"гойач" - > "гояч"
"гойанц" -> "гоянц"

6. собрать обратно оторванные компоненты
Однозначных правил написания по фонетике для русского не существует, но, опятьже, наверняка будет достаточно сворачивания "йе" "йо "йу" на стыках.
'одно' + "яйц" + 'ев' + 'ый' -> "одногояйцевый"
'пере' + "плач" + 'енн' + 'ый' -> "перегояченный"
'гидро' + 'электро' + "станц" + 'ия' -> "гидроэлектрогоянция"

Основной, четвёртый, пункт, конечно, сильно зависит от самого слова и представлений о благозвучности, но общий смысл и пространство экспериментирования, думаю, ясно.

Если хочется сохранения стихотворного размера, то нужно сохранять количество гласных (заменять только первый слог или его часть)

Если хочется сохранения стихотворного ритма, то нужно сохранять ударения. А тут в русском такая лютейшая засада, что проще забить, чем пытаться даже разобраться (около 100 печатных страниц научным языком). Темболее, что слова будут получатя в основном несущствующие.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы