Вот нашёл алгоритм тщательного анализа русских предложений. Сейчас веду "переговоры", могут дать кусок системы.
http://axofiber.org.ru:8100/rm/volkova-dissertation.pdf
Неактивен
Ну, как там переговоры?
Мне очень интересно, что из себя представляет этот модуль, и можно ли из него сделать универсальный русский парсер (типа Rparser.dll , так как я сам щас занимаюсь проблемой рус. парсера.
Неактивен
Обещали после праздников прислать вместе с базами существительных и прилагательных. Ещё жду. Модуль написан на MSVC и можно к чему хочешь прилепить. Я платформы не пишу и хочу только использовать его для генерации форм названий объекта, но настоящая русская платформа должна иметь его внутри. Так что если ты это сделаешь - честь тебе и хвала. Дам тебе как только получу.
Неактивен
MSVC - это удобно!
базы сущ и прил - тоже удобно!
Я-то прогаю платформу, и тестирую фичи на маленьком кусочке Adventure, написанном мною-же на моей-же платформе. Самый геморрой- существительные и прилагательные в словарь вводить со всеми их формами -
нужен генератор
Я-то собирался сам все постепенно делать, но если есть надежда, что кто-то уже сделал кусок работы, то почему бы не воспользоваться?
Неактивен
Я по прежнему жду, у человека диплом, и он видимо занят - времени обкоцывать свою версию нет. Пока можно посмотреть следующую вещь - http://www.multitran.ru/cgi-bin/Mtsrv.e … ge=Russian
Тоже MSVC, компилил, всё замечательно, но весит 3 Мб и прийдётся самому ковыряться, потому как это АНАЛИЗАТОР, но, с возможностью генерации.
Ещё посмотри мой генераторhttp://rtads.narod.ru/generator.zip. Написан в Билдере,
небольшой, порой не точен, но для ввода - самое то.
Неактивен
Если тебя устраивает Билдер, то пошлю. Только не забудь
жирными буквами указать, что это мой алгоритм
Но его и самому нетрудно сделать. Нужно менять окончание в зависимости от заданных условий.
Неактивен
Я с билдером плохо знаком, но раз это Си-билдер, то там же алгоритм на Си должен быть написан? в общем, разберусь. А Алгоритм твой я скорее всего изменю (ряд недостатков уже заметил), но в любом случае в кредитсах будет ссылка на тебя, мол, спасибо такому-то за алгоритм того-то. устраивает?
Неактивен
Наконец-то я дописал "Парсер фраз"! Анализирует введённую фразу методом шаблонов (как в Inform), смотрите: http://toysoft.narod.ru/phpars_0.1ap2.zip
Неактивен
GrAndrey написал:
Архив битый
Попробуй эту ссылку: http://toysoft.narod.ru/phpars_0.1ap2.rar
Неактивен
Не смог себя сдержать, похвастаюсь.
Парсер РТАДС теперь может понимать предложения вида "стукнуть Васю кирпичиком", тогда как ранее мог понять лишь "стукнуть Васю с помощью кирпичика". Это же касается слов "им","этим","ею". Поэтому, как мне кажется, РТАДС сейчас имеет единственный парсер который может понять фразу "поднять меч и зарубить им гоблина".
Механизм этот не так сложен, как описанный в статье Olegus'а. Просто ввод игроком комбинации глагола, требующего вспомогательный объект, со словом в творительном падеже вызывает замену этого слова на "с помощью <слово>" на этапе разбора до семантического. Аналогично слово в предложном может заменяться на "to <слово в именительном>".
Например: дать козлу капусту -> дать капусту to козёл
Таким образом, вместо оригинального и мудрёного табличного подхода Olegus'а можно использовать классические схемы английского парсинга, заменяя русские падежные формы на соответствующие английские грамматические конструкции. Впрочем, часть Olegusова подхода остаётся, так как придётся рассматривать табличку или флаги глагола.
Но в любом случае проблемы остаются: как анализировать "дать кость колли"? Что кому даём? У колли только один падеж, и это не единственное такое слово. Для примера "любым" - это "to any" или "with any"?
Неактивен
Как мне кажется, не совсем правильно решать проблему парсера путём попыток вогнать русский язык в правила английского. В нашем языке также существует определённая система, которую и нужно уловить и использовать.
Неактивен
Olegus t.Gl. написал:
Как мне кажется, не совсем правильно решать проблему парсера путём попыток вогнать русский язык в правила английского.
А правильно ли снова и снова писать парсеры и платформы, когда можно перевести существующие?
Olegus t.Gl. написал:
В нашем языке также существует определённая система, которую и нужно уловить и использовать.
А может лучше уловить глобальные языковые законы, применимые к любому языку?
Неактивен
Платформы и парсеры будут писаться до тех пор, пока не станут удовлетворять потребности определённых групп людей или конкретных личностей. И это правильно, поскольку иногда только создавая что-то новое, избавляешься от старого (ошибок, недочётов, непоняток, ограничений и т.п.).
А что до глобальных языковых законов, то это похоже на создание велосипеда, пригодного для использования и двуногими, и шестиногими людьми. То бишь занятно, но толку, а также простора для дальнейшего развития маловато.
Неактивен
Хочу предложить одну фразу людям, пишущим парсеры: "Надень на голову тролля горшок со сметаной".
Как вам такое?
Неактивен
Olegus t.Gl. написал:
Хочу предложить одну фразу людям, пишущим парсеры: "Надень на голову тролля горшок со сметаной".
Как вам такое?
Грешно глумиться над больными людми... (просто в тему, не обижайтесь)
"со сметаной" - это уже сложное семантическое отношение, и парсер должен будет исследовать, находится ли сметана в том гошке, если не определить это сочетание как обычное прилагательное, которое должно пропасть, если сметану съесть. В игровом процессе это ИЗБЫТОЧНАЯ информация. Чего всех тянет создавать интеллектуальные системы? Если есть желание -обращайтесь к профессорам, которые уже кучу времени на это угробили.
Неактивен
Я бы не считал такую информацию избыточной. Словосочетания типа "горшок со сметаной", "наконечник стрелы", "осколок стекла" и т.п. вполне могут встретиться в тексте игры. А коль так, то и игроком они могуть быть использованы.
Я как раз работаю над этой проблемой, и она оказывается не такой сложной, как поначалу казалось.
Неактивен
"Осколок стекла", "наконечник стрелы" - это просто. "стекла" и "стрелы" задаём как прилагательные и всё замечательно, так как осколок он всегда остаётся осколком стекла, а наконечник - наконечником стрелы. А насчёт "со сметаной", то это тоже решаемо, но это будет не общее, а лишь частное решение(в ТАДС, по крайней мере).
Интересно узнать, как ты преодолеваешь эту проблему.
Неактивен
Как это "стекла" и "стрелы" задаём как прилагательные?
А как тогда обрабатывать эти слова отдельно от слова "наконечник"? Например "возьми стрелы"?..
Неактивен
Провёл эксперимент. Парсер игнорирует прилагательное и выполняет действие над объектом с таким существительным. Если вынести второй объект из комнаты, то действие будет относится к первому.
>Взять стрелы
Взял стрелы.
>Сломать стрелы
Сломал стрелы.
>Взять стрелы
Взял наконечник стрелы.
Неактивен
Как-то странно это выглядит. По-моему, гораздо логичней было бы в результате разбора помечать одно существительное как дополнение ко второму.
То есть, фраза "Возьми наконечник стрелы" превращается в "Возьми наконечник", где у слова "наконечник" будет дополнение "стрелы".
Конечно, для этого придётся корпеть над исходным словарём, но результат получается интересный.
Неактивен
Olegus t.Gl. написал:
Хочу предложить одну фразу людям, пишущим парсеры: "Надень на голову тролля горшок со сметаной".
Как вам такое?
Есди брать классический метод Inform (в применении к "Парсеру фраз", что я написал), выходит такой шаблон для фразы:
"на" ВП РП ВП "со" ТП
Неактивен
У каждого шаблона есть указатель на имя функции и порядок следования параметров (передаваемых существительных, которые указаны в падежах). Эти параметры определяются исходя из имён объектов парсером и передаются в качестве ссылок на объекты. А функция уже сама "решает", что ей делать с переданными объектами.
Неактивен
Тогда, как я понял, автору игры нужно будет для команды "Надень на голову тролля горшок со сметаной" (точнее для глагола "надень") задать несколько шаблонов для корректного распознавания фраз:
"Надень на голову тролля горшок со сметаной"
"Надень горшок со сметаной на голову тролля"
"Надень горшок со сметаной на тролля"
"Надень горшок на голову тролля"
"Надень горшок на тролля"
и т.д.
Во что тогда превратится сам процесс разработки игры?..
Неактивен
Примерно так. А куда денешься? Хотя, ты подал очень интересную идею этим примером. Если действительно конструкции вроде "голова тролля" и "горшок со сметаной" рассматривать как единой целое, то фраза вообще упрощается. Надо подумать... Просто шаблоны - это метод Inform, я взял его за основу.
Неактивен
Ой, прошу прощения. Ошибочка вышла. RTADS не понимал "прилагательные" идущие после определяемого слова. Для этого необходимо наличие связующего предлога "of". Например, "sheet of paper", что по-русски "лист бумаги". Таким образом, как и в случае творительного и дательного падежа, родительный падеж эквивалентен комбинации предлога и слова. Теперь это введено, а также я нашёл путь распозновать предложения типа:
"взять кольцо из золота", "подарить средство от блох, "кинуть разделочный нож для рыбы в ящик". Как и в предыдущих случаях, для поддержки этого автору необходимо ввести слова "золота","блох","рыбы" в список прилагательных и их копию с пометкой на конце ("золота#r","блох#r","рыбы#r"), что скоро можно будет сделать моим "генератором".
Теперь всё поддерживается, даже "бросить горшок со сметаной в голову тролля"
(надеть горшок со сметаной на голову тролля - реально, но муторно для реализации, так как придётся менять глагол "одеть", который пока не знает, как одевать других,
а отдельную часть тела - тем более).
Всё это теперь есть в новой версии библиотек RTADS.
Неактивен
>troll:create ("troll_head", "troll head")
>player:create ("pot", "pot with_smetana")
>parse "Надень на голову тролля горшок со сметаной"
Пре-парсинг:
with_smetana = со сметаной
wear = надень, надеть, одеть
on = на
head = голов*
troll = трол*
pot = горшок
wear on head troll pot with_smetana
verb = wear
prep1 = on
obj1 = head troll pot with_smetana
prep2 = with
obj2 = nil
head troll pot with_smetana не найден
head troll pot - не найден, with_smetana - найден pot with smetana
head troll найден, pot with_smetana - найден
Ok, let's see
verb = wear
prep1 = on
obj1 = head troll -> troll_head
obj2 = pot with_smetana -> pot
troll_head:wear {preps = {"on"}, obj = pot, names = "pot with_smetana"}
Неактивен
"Надень на голову тролля горшок со сметаной"
"Надень горшок со сметаной на голову тролля"
"Надень горшок со сметаной на тролля"
"Надень горшок на голову тролля"
"Надень горшок на тролля"
Всё это разбирает мой парсер. На выходе структура семантическая, по которой легко распознать компу что к чему происходит. Тут уже для движка, который генерирует действия идёт работа - если в действиях есть "голова" некоего объекта, то делаем действие "на голову", если нет то надеваем на сам объект. видимо горшок не налезет на самого тролля