Интересная тема. Я как-то в "годы молодости" тоже озадачивался такой проблемой. Даже тетрадь завел, где писал мысли, факты и все что может помочь. Потом как-то за учебой в универе и прочими более приземленными делами забросил.
Могу поделиться своими мыслями, может они помогут.
1. Я предположил сначала. что надо писать хотя бы для одного языка (примитивный переводчик делать не стоит, хотя в данном случае он не помешает и будет нужен), иначе это будет чисто думалка для ... (..русского, ...английского и пр.), то есть локальная.
Так вот я начал изучать учебник русского языка Розенталя и первоначально создал правила для выделения слов, а также их написаний. Классический пример.
"елка" "Ёлка", "олка", "иолка", "елга" ну и т.п.
В общем все это свелось к элементарной словарной базе, но с расширением по признакам.
= глагол = деепричастие = существительное = прилагательное = частица = и так. далее.
Так же в базу я ввел связи, типа
"это слово МОЖЕТ быть связано с ТЕМ словом"
Так же ввел базу основных окончаний типа "ой" "ай" "ий" и т.п. и что-то типа правила, к каким словам они могу лепиться. типа "существ."
у глагола "ать" "ять" "ить"
Кроме того слова хранились не просто, а в ввиде уже разобранного слова
"корень" "суффикс" "окончание"
Кроме того для слова были связи его неправильных форм, типа
"Шурик - Александр - Саша - Саня"
"Петр - Петя - Петро - Петян"
"Санкт-Питербург - Ленинград"
Ну и т.п.
Скажем - так это было начальной базой.
2. По мере развития мысли я сделал вывод, что этого мало и надо хранить правила русского языка. Ну например, по аналогии с той же проверкой в Ворде орфографии.
То есть хранение структуры предложений - простый, сложные, сложносочиненные, сложноподчиненные и прочее.
Правила хранил как-то так
(поиск по глаголу)
глагол=1: глагол существ прилаг - ПРАВИЛО1
глагол=2: существ глагол частича глагол и .... ПРАВИЛО2
(поиск по существ)
сущ = 2: глагол существ прилаг - ПРАВИЛО1
сущ = 1: сущ прилаг глагол ПРАВИЛО3
......
3. Этап - смысловой. Я помучился и сопоставил. словам их "эмоциональные определения". и ВЕСА их в зависимости от употребления.
Например
1- злой (пошел ты // рожа // оружие и т.п.)
2- положительный (любовь // свет // еда и т.пр.
3- холодный (снег // дождь // ...)
4- мокрый (дождь // вода // ... )
Ну естественно база выглядела что-то типа
дождь = существ // 3=холодный=50%: // 4 =мокрый=100% .....
Это скажем так - основная база знаний. Чем больше ассоциаций и связей построено, тем "точнее" понимание машиной языка.
Естественно попытался придумать какие-то правила выделения определения слова, если его нет.
Были и нейтральные слова, типа "шел" "прыгал" "стоял"
В итоге база слов усложнилась на признаки....
первая базаэ
тип смысл
1. холодный
2. мокрый
3. нейтральный
4. мягкий
5. жидкий
6. твердый
.....
слово определения
снег (1 / 2 / 4 / 5 / 6 )
вода (2 / 4 / 5)
и т.п.
При этом возникла проблема со списками неограниченной длины.
Для одного слова может быть 20 определений. для другого 3-4.
Как это все хранить, да еще эффективно искать и "понимать".
Тогда я еще не все знал и плохо понимал, особенно базы данных.
Мало того возникла проблема "взаимоисключающих определений".
Снег может быть и твердый, и жидкий. и мокрый.
Пришлось вводить что-то типа "уточнений" и состояний вещества...
чуть ли не физику.
4. Самое сложное, на чем я запоролся - это "анализ" фразы.
Нет, логически я понимал, а программно сложно (тем более, что я и тогда и сейчас не очень понимал нейронные сети просто потому. что не занимался изучением, что это и как?).
Так вот, разбор типа
глагол - частица - сущ - прилаг - сущ - прилаг
получался.
даже получалось, что-то типа
нейтрал - нейтрал - (холодный мокрый жидкий) - (возвышенная степень) - (мокрый твердый) - (определение)
А вот генерить ответ было сложно.
Первое решение было что-то вроде такого
Шел - (куда - место действия)
Ищем по глаголу ответ с признаком (место действия).
Уточняем существительным.....
Вообщем тут я застрял...
5. Проблема встала русской генерации ответа. Фразы типа
"идти в школа понял ты" - это жуть......
а надо было "шел в школу, понятно тебе"
Вообщем окончания, формы слова и прочее - тоже не цветочки, особенно в русском языке.
собственно проект можно продолжить бы... только что плохо "исходники" остались на бумаге в тетради.
Единственное, что осталось из того проекта - это программа подсчитывающая число слов в предложении по двум направлениям - выборка из базы подобного и подсчет по признакам, хотя были "обломы", когда по признаку "ать" ловился не глагол, а существительное "МАТЬ".
Нет, его можно занести в базу (просто этот пример пришел в голову, но смысл понятен).
А еще был тормоз с поиском, я использовал метод сортировки "золотым сечением" и поиск отсечением типа "в правой" или "левой" части списка слово?
А задумка была глобальная. - не просто "говорилка",
"понимающая говорилка" - "понимающая" имелось ввиду - отвечающая по смыслу и сама предлагающая темы.
В идела была задумка заставить "писать стихи" на тему....
буду рад, если кто-то это доведет до ума.
|