Предлагаю в этой ветке публиковать найденые дырки в генераторе и дополнения правил, их исправляющие.
Вот первое. Неправильная форма винительного падежа для слова "фонарь". Исправил, добавив в vrules
следующие строки:
['1M' 'рь' 'рь'] // фонарь ['1MI' 'рь' 'ря'] // звонарь
Неактивен
Моя версия:
vrules = [ ... ['1MI' 'ь' 'я'] ] commonrules5 = // на -ь [... ['' 'ь' 'я' 'ю' 'ь' 'ем' 'е']
Изменил общее правило. По умолчанию, все слова муж. и ср. рода с 'ь' на конце с ним и останутся в В.П., кроме одушевленных.
Примеры: киль, руль, гвоздь, пень, день
Неактивен
Согласен. Я просто "подгонял" под свои существительные... Спасибо, Андрей.
Ты меня поправляй. Я в программировании разбираюсь, а в морфологии - ни бельмеса.
Отредактировано fireton (16.07.2008 13:14)
Неактивен
"ЖИ", "ШИ" - пиши с буквой "И"...
Наткнулся с прилагательным "большой". В творительном падеже получилось "большым". Исправил так:
trules= [ ... ['A' '(4|ж)ой' '$1им'] ]
Может, не только с прилагательными это сделать?
Неактивен
Поискал методы обкатки генератора и обнаружил отличные вещи: реверсивный словарь существительных (сортировка по окончаниям) и программа "Словоискатель".
При внесении новых правил нужно только проверить какие существуют слова с таким окончанием, и натравить на них генератор.
Попутно выяснил, что в ТАДС есть лимит лексем - около 30 тысяч (вероятно, значение имеет не количество, а лимит памяти). Учитывая, что у нас на каждое слово по 8 (в среднем) лексем, в нашем распоряжении не более 3,5 тысяч слов, на которые будет откликаться система...
Неактивен
GrAndrey написал:
Попутно выяснил, что в ТАДС есть лимит лексем - около 30 тысяч (вероятно, значение имеет не количество, а лимит памяти). Учитывая, что у нас на каждое слово по 8 (в среднем) лексем, в нашем распоряжении не более 3,5 тысяч слов, на которые будет откликаться система...
Имеется в виду - 3500 разных слов? Когда-то читал, кажется у С.Симоновича что адвентюры Инфокома понимали до 5000 слов - правда мне непонятно и тогда было - это вместе со словоформами или как? С другой стороны, в английском словоформ-то кажется поменее.
Неактивен
Надо будет зыркнуть в исходниках на предмет причины ограничения. Возможно, если это просто вручную заданное ограничение (например, статический массив или константа), то можно его немного "раздвинуть".
Разумеется, мы потеряем совместимость с непропатченными версиями проигрывателей.
Неактивен
Гы. Вы игру сначала напишите, такую, чтобы ограничения реально мешали...
А когда напишите, можно Майку Робертсу написать письмо. Думаю, он поможет.
Отредактировано fireton (21.07.2008 17:03)
Неактивен
Повторы не так страшны, потому как лексемы могут наследоваться от родительского класса.
В крайнем случае можно генерировать склонения на ходу, либо стирать те, что больше не понадобятся.
Неактивен
Перепроверил лимит на лексемы - ошибка на генерации 2477 слова, если для каждого слова создавать отдельный объект (оставлять в одном - переполняется стек). При общем лимите в 30 тысяч выходит по 12 лексем на слово, из них 1 - изначальное, 6 падежей, 2 с метками. Ещё два на второй творительный только у части слов. Куда девается остальное - не понял. Удаляю изначальные лексемы - точно тот же результат (изначальные лексемы не учитываются, но все равно храняться в памяти?)
Ошибка выглядит так:
fatal: too many vocabulary word relations (internal limit)
Количество можно увеличить, вынеся директивы генератору из noun в другое свойство, а также отдельно записывая лексемы творительного и дательного падежа. Так можно получить 4 с лишним тысячи. Кстати, 2500 тоже не мало, генерируется полминуты.
Вот ещё идея:
если в лексеме прописано несколько слов, помеченных для генерации и разделенных пробелами, то разбить их в отдельные лексемы.
Например:
noun = 'водка/ вино/ карты/2 женщины/2'
Так переключать раскладку придется только один раз - в начале строки, написав noun = ''
Неактивен
Слово "камень" склоняет неправильно:
1му - камень(-) каменя(-) каменю(-)(#d) камень(-) каменем(-)(#t) камене(-)
Никак не могу прикинуть общее правило... Поможите, люди добрые.
Неактивен
Все существительные мужского рода на -ень теряют гласную при склонении, за исключением:
-бюллетень, олень, пельмень, тюлень, ясень, ячмень + некоторые устаревшие слова. Их в правиле не прописал, они в меньшинстве. Стоит вписать?
Все слова м.р. на -оть: коготь, лапоть, ломоть
Внес единственное слово - огонь, так как довольно частое.
P.S. Исследовал с помощью "Словоискателя v1.0"
commonrules5 =
// на -ь
[['F' 'ь' 'и' 'и' 'ь' 'ью' 'и']
// -ень,-оть щебень, стержень, ломоть, лапоть, коготь; всего более 30-ти
// но!!! -олень, тюлень, окунь, пельмень, бюллетень, ясень, ячмень (это почти все)
['M' 'ень' 'ня' 'ню' 'ень' 'нем' 'не']
['M' 'оть' 'тя' 'тю' 'оть' 'тем' 'те']
['M' 'огонь' 'огня' 'огню' 'огонь' 'огнём' 'огне']
['' 'ь' 'я' 'ю' 'ь' 'ем' 'е']
Неактивен
Попутно выяснил, что в ТАДС есть лимит лексем - около 30 тысяч (вероятно, значение имеет не количество, а лимит памяти).
Андрей, смотрел вот это:
tc32 -m?
Компилятору можно сказать, чтобы он увеличил объем используемой памяти... Это может помочь?
Неактивен
Насчет памяти - проверю.
Ввел правило для творительного падежа существительных на -ец. Под ударением -цом, без -цем.
Например: торгОвец -> торгОвцем, резЕц -> резцОм.
trules= [ ... ['U' '(8[бвгджзйкмнпрстфхцчшщ])ец' '$1цом'] //леденЕц ] commonrules6 = [ ... ['' '(8[бвгджзйкмнпрстфхцчшщ])ец' '$1ца' '$1цу' '$1ец' '$1цем' '$1це'] // мздОимец ]
Проблема в том, что, как мне кажется, большая часть этих слов оканчивается на ударный -ец, а ударение все будут забывать ставить. И вычислить где должно быть окончание тоже нереально. В общем, песЕц.
Неактивен
Проблема в том, что, как мне кажется, большая часть этих слов оканчивается на ударный -ец, а ударение все будут забывать ставить. И вычислить где должно быть окончание тоже нереально. В общем, песЕц.
Нормально. Пару раз забудут, потом приучатся. Это ж дело такое...
Неактивен
может, быть в правила ещё один элемент включить? Строку с замечанием. Например:
['' '(8[бвгджзйкмнпрстфхцчшщ])ец' '$1ца' '$1цу' '$1ец' '$1цем' '$1це' 'Правило для этого слова зависит от ударения!'] // мздОимец
Эта строка будет выводиться вместе с результатом генерации и вопросов в корректности работы генератора не возникнет
Неактивен