Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 30.04.2019
Сообщений: 89

Задача разбора предложения естественного языка

01.08.2019, 23:32. Показов 2597. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть задача написать парсер предложений русского языка. Я взял корпус, написал КС-грамматику, составил дерево разбора. На односоставных предложениях парсер работает отлично.

Python
1
2
3
4
5
6
7
8
9
10
11
12
>>> t[0].display()
S
         NP[case='nomn'] 
              я ['NPRO', 'sing', '1per', 'nomn']
    VP[tran]
      VP[tran]
                 VP[tran] 
                          чувствую ['VERB', 'sing', '1per', 'tran', 'pres']
                 NP[case='accs'] 
                          себя ['NPRO', 'sing', 'accs']
             ADVB 
                    комфортно ['ADVB']
В простом виде грамматика выглядит так:

Python
1
2
3
4
5
6
7
8
9
10
S -> NP VP
NP -> NOUN 
VP -> VERB | VERB NP | VERB CONJ | VP S
 
S - предложение
NP - именная группа
VP - глагольная группа
NOUN - существительное
VERB - глагол
CONJ - союз
На сложных предложениях дела плохи. Для справки: сложное предложение содержит две и более грамматические основы, например, "Он сказал, что Иван приедет завтра".

Я использую восходящий LR-разбор: парсер работает по принципу автомата с магазинном - идет слева направо и пытается найти правило, если находит - происходит свертка и дереве появляется новый узел.

Проблема в том, что если парсер будет идти по предложению "Он сказал, что Иван приедет завтра", то

Python
1
2
3
4
5
6
7
8
9
он - NOUN // на самом деле, он - это местоимение
сказал что - VERB CONJ  
 
происходит свертка VP -> VERB CONJ 
 
Иван  - NOUN 
приедет  - VERB
 
свертка:  NP -> NOUN , VP -> VERB
И конце мы получаем два узла с правилом S !

Но правильно будет, если второе S (Иван приедет) будет левым потомком VP (сказал что).

Вкратце: я хочу получать вложения одного предложения в другое, а не просто набор предложений.

Добавлено через 2 минуты
Вероятно я не совсем ясно описал ситуацию. Задачу можно переформулировать на языке теории формальных языков, с некоторой поправкой на особенности естественного языка. Если кто-то может порекомендовать туториал или литературу - буду благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2019, 23:32
Ответы с готовыми решениями:

Обработка естественного языка на Python. Задача на программирование
Здравствуйте! Помогите переписать этот код или же написать полностью новый. Так как моё чудо не проходит по ограничению времени. Заранее...

Обработка естественного языка
Здравствуйте! Меня интересует компьютерная лингвистика, которая решает задачи обработки естественного языка. Имею достаточно смутное...

Обработка естественного языка
Всем доброго времени суток! Делаю учебный пример на тему обработки естественного языка с использованием библиотеки natasha версии...

2
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
03.08.2019, 00:46
constantin_01, Сразу предупреждаю, что я не знаю, как Вам помочь. Просто хочу уточнить Вашу проблему, как я ее понимаю. Вы хотите создать парсер содержательного текста, по аналогии с парсингом сайтов. Я начал было изучать парсинг сайтов, думая, что с его помощью можно будет парсить произвольный сайт. Но углубившись в эту проблему понял, что на текущий момент под каждый сайт пишется свой парсер. И это охладило мой пыл. Понятно, что существуют шаблоны, которые можно использовать, что бы из них писать парсеры для конкретных сайтов. Но что бы программа сама писала парсер под произвольный сайт, такой технологии я не нашел.
По аналогии, я думаю у Вас та же проблема, Вы создаете парсер под конкретное предложение, но Ваша программа не может автоматически создавать парсер для предложений любого типа.
Я думаю что эта задача уже относится к области искусственного интеллекта. Один из разделов искусственного интеллекта, это понимать смысл написанного предложения. И подраздел этого раздела, это автоматически анализировать структуру предложения, что собственно и пытаетесь делать Вы.
Попытайтесь найти какую либо информацию в тематике, посвященной искусственному интеллекту и в частности относящуюся к анализу текста (разбору текста).
Путин обозначил создание искусственного интеллекта, как первоочередную задачу на сегодняшний день.
Поэтому искрене желаю Вам удачи в разработке этой тематики.
Кстати Garry Galler, в теме
Перевод текстовых числительных в натуральную форму
рассказал что в Python есть морфоанализатор pymorphy2. Это не совсем то, чем занимаетесь Вы, но тоже относится к анализу содержания текста, а именно отдельных слов из текста. Объединение морфологического анализа текста и Вашего анализа структуры текста, как раз и решает частично задачу анализа смыслового содержания текста.

Добавлено через 10 минут
Кстати у меня появилась мысль, что один из подходов создания искусственного интеллекта, это процесс обучения компьютера, по аналогии, как обучают ученика в школе.
Так же последовательно вкладывать в него знания, как они вкладываются школой в ученика.
0
1 / 1 / 0
Регистрация: 30.04.2019
Сообщений: 89
03.08.2019, 22:11  [ТС]
Viktorrus, спасибо за ответ!

Я знаю, что данная задача может быть решена без привлечения ИИ, например, stanford NLP использует статистические и КС-грамматику для разбора предложений (на английском). Статистические методы я использовать не могу, так как недостаточно материала (помеченных текстов на русском).

Что касается pymorphy2, то я использую как тот же API к корпусу, то есть на уровне морфологии - та же технология. Проблема просто в бедности грамматики наверное или алгоритма.

А что касается вашей аналогии обучения компьютера с обучением ребенка, то на эту тему сейчас есть много статьей. Например, на Хабре есть одна такая (перевод с англ.), где мать будучи IT специалистом сравнивает опыт воспитания и обучения детей с опытом обучения компьютера. Называется "Воспитание ребенка VS машинное обучение ... "
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.08.2019, 22:11
Помогаю со студенческими работами здесь

Задача 4: Обработка естественного языка
2.1 Вкрапления слов (a) Вам был предоставлен небольшой набор документов в файле nlp_data.json, сопровождающий этому тесту. Напишите...

Перевод естественного языка
Есть задание, в котором даны два текста на русском и немецком языках. Нужно написать программу, которая будет создавать новый файл и...

Перевести с естественного языка на язык предикатов
Переведите с естественного языка на язык логики предикатов Зайцы не всегда глупее лис.

Перевести с естественного языка на язык предикатов
Здравствуйте, форумчане. Помогите, пожалуйста, перевести с естественного языка на язык логики предикатов следующее утверждение: Две...

Перевод с естественного языка на язык логики
Переведите с естественного языка на язык логики предикатов: Так как 60 делится на 2 и на 3, то 60 делится на некоторые числа, отличные от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru