close

Вход

Забыли?

вход по аккаунту

?

ОтчетКурсач2

код для вставкиСкачать
Оглавление
ВВЕДЕНИЕ3
1.ФУНДАМЕНТ СИНТАКСИЧЕСКОГО АНАЛИЗА4
2.РАЗРАБОТКА СИСТЕМЫ СИНТАКСИЧЕСОГО АНАЛИЗА ТЕКСТА 7
2.1.Структура системы синтаксического анализатора текста и используемая методика анализа текста7
2.2.Графематический анализ8
2.2.1.Общее описание8
2.2.2.Входные и выходные данные8
2.2.3.Графематические дескрипторы9
2.2.4.Деление на предложения13
2.3.Фрагментационный анализ15
2.3.1.Общие положения15
2.3.2.Объекты анализа15
2.3.3.Алгоритм работы анализа16
2.3.4.Взаимодействие с синтаксическим анализом30
2.4.Морфологический анализ31
2.4.1.Структура морфологического словаря31
2.4.2.Русский морфологический словарь31
2.5Синтаксический анализ34
2.5.1 Клауза34
2.5.2 Морфологический вариант34
2.5.3 Синтаксическая группа34
2.5.4 Синтаксическое правило35
2.5.5 Алгоритм работы36
2.5.6 Синтаксические правила36
2.5.7 Объединение результатов фрагментации и синтаксического анализа37
3.РАЗРАБОТКА БАЗЫ ДАННЫХ СИНТАКСИЧЕСКИХ ПРАВИЛ38
3.1 Структура системы синтаксического анализатора текста и используемая методика анализа текста
4.РАЗРАБОТКА ЭКРАННОЙ ФОРМЫ ДЛЯ ПРОСМОТРА И РЕДАКТИРОВАНИЯ БАЗЫ ДАННЫХ СИНТАКСИЧЕСКИХ ПРАВИЛ.40
СПИСОК ЛИТЕРАТУРЫ42
ПРИЛОЖЕНИЕ43
ВВЕДЕНИЕ
Системы анализа естественного текста до сих пор остаются одним из актуальнейших направлений информатики. Среди таких систем особо выделяются программы машинного перевода, поскольку для их адекватного функционирования требуется очень глубокое понимание входного текста.
Синтаксический анализ является одним из наиболее исследованных направлений в теории computer science. Синтаксические анализаторы широко применяются в таких областях как создание компиляторов, проектирование интерфейсов баз данных, искусственный интеллект (ИИ), автоматическая обработка текстов (АОТ), в том числе для автоматизированных информационно-поисковых систем (АИПС, или "поисковых машин"), машинный перевод (МП), анализ химических формул и распознавание хромосом.
Целью практической работы является разработка алгоритма работы синтаксического анализатора текста, а также базы данных синтаксических правил русского языка.
1. ФУНДАМЕНТ СИНТАКСИЧЕСКОГО АНАЛИЗА
Все языковые средства, которыми располагает система для определения синтаксических понятий, являются либо свойствами самого объекта, т.е. предложения естественного языка, либо свойствами его элементов, т.е. словоформ и знаков пунктуации (операторов). Синтаксические понятия, по существу, представляют собой функции, где параметрами служат языковые средства, а сами функции используются в условиях грамматических стратегий или правил. Ниже приведены пять языковых средств синтаксического анализа: 1. Словоизменительные морфологические средства. Для языков с развитой морфологией, каким является русский, - это основной способ материализации синтаксических связей. Словоформа w1 морфологически зависит от словоформы w2 по морфологической категории C, если граммема (значение грамматической категории) g категории С, характеризующей w1 , выбирается в зависимости от некоторого свойства f словоформы w2. Словоформа w2 называется контролером морфологической зависимости, аw1 - ее мишенью.\1\ Другими словами, один элемент предложения подстраивается под другой, т.е. принимает грамматическую форму продиктованную вторым элементом. Показателем морфологической зависимости в русском служит флексия, т.к. граммемы в русском обычно приписаны флексии, что позволяет в некоторых случаях обнаружить зависимость между двумя словоформами, отсутствующими в словаре, (например, "глок-ая куздр-а"). Если категория C, по которой наблюдается морфологическая зависимость, выражается в вершине, налицо вершинное маркирование, если же эта категория выражается в зависимой словоформе - зависимостное маркирование.\1\ В русском языке граммемы многих форм омонимичны ('ночи' = [[рд., дт., пр., ед.], [им., вн., мн.]] - омонимия числа и падежа), что создает определенные трудности в процессе анализа. Неоднозначность граммем в ходе автоматического синтаксического анализа иногда приводит к возникновению синтаксической омонимии и построению альтернативного синтаксического варианта (графа синтагм). Падежная омонимия с номинативом часто приводит к неоднозначному определению правой границы сегмента и, как следствие, к построению альтернативной структуры сегментации (графа сегментов). Парадокс или скорее взаимовлияние двух уровней анализа морфологического и синтаксического состоит в том, что граммема, являясь эффективным средством поиска морфологической зависимости, которая служит одним из способов реализации синтаксического отношения, может быть однозначно проинтерпретирована только вследствие фиксации этого отношения. 2. Селективные признаки: Классифицирующие (селективные) признаки приписываются лексемам в грамматическом словаре, в отличие от граммем, которые вычисляются, исходя из парадигматического класса, для каждой словоформы на этапе морфологического анализа. Наиболее важной для синтаксиса является классификация лексем по категориальным (частеречным) признакам: существительное, глагол, прилагательное, и т.д. Существует и более дробное деление на субкатегориальные признаки внутри частей речи, так существительные можно разбить на два класса: одушевленные и неодушевленные. Категориальные признаки задают потенциальных участников синтаксической связи и определяют в большинстве случаев вершину в структуре, а также предопределяют понятия управления и согласования. Одушевленность и неодушевленность в русском языке служит контролером согласования для некоторых форм мужского рода или во множественном числе - 'вижу большого [мр., ед., вн.] кролика[мр., ед., вн.] (*большой [мр., ед., вн.] кролика [мр., ед., вн.])' ~ 'вижу большой [мр., ед., вн.] стол [мр., ед., вн.] (*большого [мр., ед., вн.] стол [мр., 23ед., вн.])' или 'вижу четкие фотомодели' ~ 'вижу красивых фотомоделей' (пример Е. Ножовой). 3. Служебные слова: предлоги, союзы и союзные слова, вспомогательные компоненты аналитических форм, частицы и т.д. Средства, которые служат в качестве опорных точек анализа. Так, союз может быть использован для определения поверхностного типа сегмента, или вспомогательный компонент аналитической формы содержит недостающие предикату граммемы, или предлог оформляет актант глагола. 4. Знаки препинания (операторы): запятая, тире, точка, вопросительный знак, и т.д. Это средство не выделяется в теоретических описаниях, так как теоретический синтаксис имеет дело больше с устным языком, чем с письменным, к тому же не все письменные языки, в отличие от русского, имеют жесткие правила расстановки знаков препинания. В первую очередь, операторы определяют границы, как сегментов, так и всего предложения. Тире является выражением эллиптированного элемента предложения и часто используется в стратегиях поиска неморфологического предиката. Анализ бифункциональности оператора (когда, например, оператор является одновременно и правой границей сегмента, и оператором сочинения слов) - одна из самых трудных задач сегментации, которая и задает рекурсивный характер как грамматических стратегий анализа, так и методов программной реализации. В теоретических работах принято выделять интонацию как средство синтаксического анализа. Действительно, операторы в письменном тексте являются частичным выражением подмножества синтаксических случаев, характеризующихся интонацией в устном языке. В примере А. Кибрика предложение "В этой гимназии учился впоследствии всемирно известный киноартист", произнесенное с падением интонации на 'впоследствии' имеет синтаксическую связь 'учился Æ впоследствии', а при отсутствии падения тона - 'известный Æ впоследствии' [А. Кибрик, 2001]. Такие случаи применения интонации для различения синтаксических связей не фиксируются операторами в письменной форме, поэтому идеальный синтаксический процессор должен решить эту проблему через понятие синтаксической омонимии, построив две равноправных синтаксических структуры предложения. 5. Порядок слов: Линейное расположение слов в предложении играет особую роль в изолирующих языках (китайский) и является основным средством для выражения синтаксических отношений в этих языках. Наряду с селективными признаками порядок слов имеет доминирующее значение в проектировании синтаксических анализаторов языков с бедной морфологией (английский). Во многих системах английского синтаксиса порядок слов задает направление поиска хозяина или слуги для каждого класса лексем и типа связи [D. Sleator, D. Temperley, 1991]. Для русского языка это средство анализа имеет второстепенное значение, хотя и применяется в ряде случаев для установление синтаксических связей или оценки омонимичных структур предложения. Несмотря на свободный порядок слов в русском, некоторые синтаксические зависимости имеют обязательным критерием выделения жесткий линейный порядок: генитивное определение должно следовать за определяемым словом ('ножка стол-а', 'сын отц-а'); предлог предшествует существительному ('на стол-е', 'у отц-а'); в 90% случаев определение, выраженное прилагательным или местоименным прилагательным, стоит до существительного (['большой красивый стол', 'седой отец'] ~ ['впечатление необычное']). Порой статистическое расположение синтаксических вершин и их зависимых позволяет разделить все типы синтаксических отношений на три типа: левоветвящиеся (прилагательное существительное: 90%), правоветвящиеся (генитивное определение: 100%) и смешанные (слабые актанты глагола: 50%/50%). Подобные эмпирические распределения могут эффективно использоваться в прикладных моделях. В лингвистической типологии эмпирически установлена универсальная классификация языков мира: языки левого (японский) и правого ветвления (русский и английский). Правда, эта классификация, в основном, строится на статистическом распределении фразовых категорий в линейном порядке предложения, к которым относятся именные (NP), предложные группы (PP) и клаузы (некоторые виды сегментов: придаточные определительные, причастные обороты, etc.). Другая синтаксическая классификация оперирует линейным порядком основных членов предложения: подлежащее (subject), сказуемое (verb) и дополнение (object). Английский относится к языкам Subject Verb Object (SVO) порядка, для русского SVO порядок является статистически доминирующим и наиболее естественным, но грамматически не 25единственно возможным. В английском предложении 'The farmer kills the duckling' 'Фермер убивает утенка' (пример Э. Сепира [Э. Сепир, 1993]) любое изменение порядка слов ведет к изменению смысла всего высказывания ('The duckling kills the farmer' 'Утенок убил фермера.') или к потере грамматической правильности ('* The farmer the duckling kills.'Фермер утенка убил.'), то в русском переводном эквиваленте ('Фермер убивает утенка') возможен 3! перестановок, сохраняющих как общий смысл высказывания, так и грамматическую правильность, т.е. в русском варианте данного предложения возможны любые комбинаторные порядки: SVO, SOV, OVS, и т.д. Таким образом, линейный порядок предложения в автоматическом синтаксическом анализе используется как указатель наиболее вероятного направления поиска слуги или хозяина, и только в редких случаях как обязательный критерий установления синтаксической зависимости.
2. РАЗРАБОТКА СИСТЕМЫ СИНТАКСИЧЕСКОГО АНАЛИЗА ТЕКСТА
2.1. Структура системы синтаксического анализатора текста и используемая методика анализа текста
Разбор текста подразделяется на 4 этапа:
1. Графематический анализ (анализ структуры текста). На данном этапе производится анализ структуры текста, выделяются слова и словосочетания, аббревиатуры, знаки препинания и другие устоявшиеся структуры.
2. Фрагментационный анализ. В предложении выделяются синтаксические единства (фрагменты) больших или равных словосочетанию (синтаксической группе) и устанавливаются иерархии на множестве этих единств
3. Морфологический анализ. Анализ словообразования.
4. Синтаксический анализ. Проверка синтаксиса предложений. Разбор на структурные составляющие.
Таким образом, всю систему можно представить в виде схемы, изображенной на рисунке 2.1
Рис 2.1. Общая схема модулей ССА и их взаимодействия
Для того, чтобы понять важность и необходимость этих шести этапов разбора, рассмотрим их более подробно.
2.2. Графематический анализ
2.2.1. Общее описание
Данный этап генерирует выходную информацию, необходимую для дальнейшей обработки при помощи морфологического, фрагментационного и синтаксического анализаторов. В задачу графематического анализа входят:
1. Разделение входного текста на слова, разделители и т.д. 2. Сборка слов, написанных в разрядку; 3. Выделение устойчивых оборотов, не имеющих словоизменительных вариантов; 4. Выделение дат в цифровых форматах; 5. Выделение ФИО (фамилия, имя, отчество), когда имя и отчество написаны инициалами; 6. Выделение электронных адресов; 7. Выделение предложений из входного текста; 8. Выделение абзацев, заголовков, примечаний. 2.2.2. Входные и выходные данные
На вход графематике подается файл текста в Windows-кодировке. На выходе графематика строит таблицу, состоящую из двух столбцов. В первом столбце стоит некоторый кусок входного текста (выделенный по правилам, о которых мы скажем ниже), во втором столбце стоят графематические дескрипторы, характеризующие этот кусок текста. Например, из текста "Иван спал" будет построена таблица из трех Кусок входного текстаГрафематические дескрипторыИванЛЕ Бб ПРД1_РЗД ПРБспалЛЕ бб ПРД2 В первый столбец всегда помещается часть входного текста, если эта часть не является последовательностью из мягких разделителей (пробел, табуляция). В последнем случае используются другие символы, номера которых включены в описание на языке idl.
2.2.3. Графематические дескрипторы
Опишем теперь все графематические дескрипторы. У каждого графематического дескриптора есть два названия: кириллическое и латинское. Первое используется во втором столбце графематической таблице, второе внутри программы. Сначала приведем главные дескрипторы, один из которых обязательно должен присутствовать на каждой строке графематической таблицы. Кир. НазваниеОбъяснениеПримерыЛЕрусская лексема, присваивается последовательностям, состоящим из кириллицыИванИЛЕиностранная лексема, присваивается последовательностям из латиницыJohnРЗДразделитель. "*', '=', '_'ЗПРзнак препинания, присваивается последовательностям, состоящим из одинаковых знаков препинания".", '[', ']', '(', ')', '-', ':', ';'ЦКцифровой комплекс, присваивается последовательностям, состоящим из цифр1234ЦБКцифро-буквенный комплекс, присваивается последовательностям, состоящим из цифр и букв34h???сложный узел, присваивается последовательностям, не обладающим вышеперечисленными признаками Разновидности дескриптора РЗД:
Кир. НазваниеОбъяснениеПРБстрока пробелов или табуляцийКСТ признак конца строкиПАРсимвол параграфаПСнулевой символ Разновидности дескриптора ЗПР:
Кир. НазваниеОбъяснениеПримерыОТКоткрывающая скобка'{', '[', '('ЗАКзакрывающая скобка'}', ']', ')'ДЕФдефис- Разновидности дескриптора ЗПР и РЗД:
Кир. НазваниеОбъяснениеДЗПРпоследовательность одинаковых символов, длина которой больше 20МНЖпоследовательность одинаковых символов, длина которой больше 1 Разновидности дескриптора ЛЕ и ИЛЕ:
Кир. НазваниеОбъяснениеПримерыббпризнак того, что все символы лексемы - малыемамаБбпризнак того, что первый символ лексемы - большой;МамаББпризнак того, что все символы лексемы - большиеМАМА Теперь опишем дескрипторы, которые появляются на строке в зависимости от контекста, т.е. они вычисляются не только из текущей строки, но и из номера текущей строки и строк, которые находятся выше и ниже вычисляемой.
Контекстные дескрипторы:
Кир. НазваниеОбъяснениеПримерыНАЧставится на начале текста (входного файла), т.е. всегда стоит на нулевой строке таблице. Причем, важно сказать, что нулевая строка таблицы используется как служебная (содержимое первого столбца нулевой строки не входит во входной текст) КФРставится на конце фразы.Концом фразы считается только ";". ПРД1 начало предложения ПРД2конец предложения ИМ?признак того, что лексема, возможно, является частьюимени собственного. Присваивается лексеме, начинающейся с большойбуквы и не имеющей перед собой символа конца предложения. ППставится на начале пункта перечисления АБЗставится на начале абзаца ОБ1ставится на начале оборотатипа "во взаимодействии с"ОБ2ставится на конце оборота ФИ1ставится на начале ФИОтипа "Иванов И.И." ФИ2ставится на конце ФИО ДЕ1ставится на слове, после которого идет дефис и конец строки, после которых идет другое слово ДЕ2ставится на слове, до которого идет конец строки и дефис, до которых идет другое слово ДТ1ставится на начале даты ДТ2ставится на конце даты РЕ1было использовано для офиц. текстов РЕ2было использовано для офиц. текстов ЧПТ1начало числа с плавающей точкой111.111ЧПТ2конец числа с плавающей точкой ЭА1начало электронного адресаftp.com.comЭА2конец электронного адреса АБ1начало сокращенияи т.п.АБ2конец сокращение Кроме этого, используются дескрипторы, относящиеся к макросинтаксическому анализу (анализу расположения абзацев, заголовков). В макросинтаксическом анализе абзацы, заголовки и т.д. называются условно предложениями (УП). Макросинтаксические дескрипторы ставятся на конце УП в зависимости от типа УП.
Кир. НазваниеОбъяснениеУП?ставится на конце УП, тип которого не определен УПставится на конце простого УП Загставится на конце заголовкапримставится на конце УП, заключенного в скобки УПвводставится на конце УП, заканчивающегося на двоеточие Докставится на нулевой строке графематической таблицы2.2.4. Деление на предложения
Этот алгоритм работает на графематике, поскольку на результаты его работы опирается макросинтаксический анализ. На вход алгоритма подается два числа StartPos и EndPos, которые обозначают первую и последнюю строки входного текста. На начале предложения алгоритм ставит помету ПРД1, на конце - ПРД2.
Программа ищет конец предложения (ПРД2), а потом после него ищет начало предложения (ПРД1). Алгоритм основывается на следующих постулатах:
1. Начало текста совпадает с началом первого предложения, конец текста - с концом последнего. 2. Предложение всегда начинается с большой буквы; 3. Предложение не бывает больше одного абзаца. 4. Предложение не может состоять только из знаков препинания. Это означает, что некоторые знаки препинания, если они не будут отнесены к предыдущему предложению, могут остаться вне предложений. Например, "Мама мыла раму", здесь ПРД1 будет стоять на Мама, а не на открывающей кавычке.
На самом деле, все дальнейшие анализаторы (постморфология, синтаксис) используют в своей работе только помету ПРД2, что означает, что текст разбивается полностью, все строки оказываются охваченными. Помета ПРД1 нужна лишь только для нужд графематики.
Определим вспомогательный примитив IsSentenceEndMark. На вход подается номер строки. Функция возращает истину, если эта строка содержит символ "?", "!", "." или многоточие
Определим вспомогательный примитив IsSentenceEndSeq. На вход подается номер строки. Функция возращает истину в двух следующих случаях:
1. Если для этой строки верна функция IsSentenceEndMark; и контактно справа нет закрывающей кавычки (если предложение закавычено, закрывающая кавычка входит в это предложение); 2. Если строка является закрывающей кавычкой, а контактно слева стоит строка, для которой верно IsSentenceEndMark. Программа делает следующее:
1. Проходит все знаки препинания в начале текста и ставит первому слову помету ПРД1. 2. Пусть i - текущая строка между StartPos и EndPos. 3. Если на строке i стоит помета начала абзаца, тогда нужно пройти назад все пробелы и длинные разделители (ДЗПР) и дойти до конца предыдущего абзаца. Если в конце абзаца (до первого слова) стоит строка, которая удовлетворяет IsSentenceEndSeq, тогда нужно поставить ПРД2 этой строке, иначе нужно поставить ПРД2 на конец предыдущего абзаца. 4. Если на строке i стоит макросинтаксическая помета УП, тогда нужно сделать то же самое, что и в пункте 3, только надо учесть, что помета УП ставится на конце абзаца, а не начале (как в пункте 3). 5. Если до начала текущего предложений стояла открывающая скобка, и текущая строка указывает на слово до соотв. закрывающей скобки, тогда нужно поставить ПРД2 на закрывающую скобку, а текущую строку сместить на ближайшее после закрывающей скобки слово. 6. Если текущая строка удовлетворяет функции IsSentenceEndSeq и не входит в графематические группы (ФИ1-ФИ2, ДТ1-ДТ2 и т.д.) непоследним словом, тогда проходим все знаки препинания от текущей строки. Проверяем, что знак препинания, который заканчивает предложения, не должен стоять в самом начале строки. Далее ищем первое слово от текущей строки и считаем его началом нового предложения. Этот алгоритм работает избыточно, это означает, что он иногда ставит пометы ПРД2 и ПРД1 по многу раз на одной строке. Например, в конце абзаца ПРД2 может быть поставлена по пп 3. 4. и 6.
2.3. Фрагментационный анализ
2.3.1. Общие положения
2.3.1.1. Цель анализа
Задача фрагментационного анализа состоит в выделении в предложении синтаксических единств (фрагментов) больших или равных словосочетанию (синтаксической группе) и в установлении иерархии на множестве этих единств, не используя информации о модели управления. Иерархия отражает тот факт, что в предложении некоторые фрагменты синтаксически зависимы от других.
2.3.1.2. Мотивировка
Важная особенность фрагментов заключается в том, что их границы не пересекают синтаксические связи, соединяющие отдельные слова или словосочетания. Таким образом, при успешной работе фрагментационного анализа перед синтаксическим исключается возможность построения большого числа неправильных синтаксических связей, которые допускаются морфологией и синтаксисом.
2.3.2. Объекты анализа 2.3.2.1. Входные данные
На вход фрагментационного анализа поступает текст, разбитый на предложения. Каждое предложение разбито на слова и знаки препинания. Каждому слову приписана морфологическая информация (все возможные пары <грамматическая характеристика, лемма>, которым удовлетворяет слово. Подробнее смотри 3.4). При некоторых словах имеются графематические пометы пометы: начало/конец числового, букво-числового комплекса. Подробнее в 3.2.
2.3.2.2. Выходные данные
На выходе - текст, состоящий из предложений, разбитых на линейно неразрывные фрагменты. На фрагментах установлена иерархия, т.е. про каждый фрагмент известно, какие фрагменты в него непосредственно вложены и в какие он непосредственно вложен. Каждому фрагменту приписано множество типов и список союзов и союзных слов, входящих в фрагмент.
2.3.2.3. Структура фрагмента
Структура фрагмента устроена следующим образом: Тип фрагмента
Глагол в личной форме, Краткое причастие, Краткое прилагательное, Предикативное слово, Причастие, Деепричастие, Инфинитив, Вводное слово, Пустыха. Левая граница, Правая граница
Знаки препинания, стоящие слева и справа от фрагмента, и сочинительные союзы без знака препинания. Союз Неподчинительный союз, Подчинительный союз. Все слова, стоящие в начале фрагмента, которые могут быть союзом, союзным словом или другой скрепой. При каждом таком "союзе" указывается, подчинительный он или нет. "Который", "Чей" Наличие в фрагменте лексемы чей, какой или который. 2.3.3. Алгоритм работы анализа
2.3.3.1. Правила в фрагментационном анализе
В фрагментационном анализе можно выделить три группы правил:
1. Правила, уничтожающие некоторые омонимы. В отличие от постморфологических они рассматривают не только ближайшее окружение слова, но весь фрагмент или все предложение. 2. Правила, устанавливающие иерархию. Это правила, которые включают данный фрагмент в непосредственно соседний. 3. Правила, которые объединяют два дистантно расположенных фрагмента или группу контактных (непосредственных соседей). При этом все объединявшиеся фрагменты уничтожаются и создается один большой фрагмент. Его границы определяются стандартно из границ объединенных фрагментов; заполнение других полей в структуре фрагмента определяется каждым правилом отдельно. 2.3.3.2. Порядок применения правил
2.3.3.2.1. Начальное разбиение предложения
2.3.3.2.1.1. Расстановка границ
По всем знакам препинания и сочинительным союзам без запятой проводятся границы фрагментов. Исключения: 1. Граница не проходит по тем знакам препинания, которые входят в состав определенных графематическим анализом единиц (сокращения, дробные числа, букво-числовые комплексы и др.); 2. В том случае, если несколько знаков препинания идут подряд, по ним проходит одна граница. (Не строится фрагментов, не содержащих ни одного слова). 2.3.3.2.1.1.1. Правило о двух предикатах в одной клаузе
Список глаголов ГС = {давать, становиться, оказаться}
Список значений частей речи, которые могут принимать предикаты ПС = {VERB (гл. в личн. форме), ADVERB_PARTICIPLE (деепричастие), ADJ_SHORT (кр. прил.), PARTICIPLE_SHORT (кр. прич.), PREDK (предикатив)}
В одной клаузе не может находиться две словоформы, все омонимы которой ПС & ГС. В случаях, когда возникает такая ситуация (опечатка или ошибка морфологии), перед вторым предикатом восстанавливается запятая. Данное правило работает внутри правила расстановки границ и учитывает информацию об аналитических формах. Примеры для клауз исключений, содержащих словоформы из ГС: "давайте будем дружить", "Ему там могло бы за это время стать совсем скучно" и т.д.
2.3.3.2.1.1.2. Алгоритм интерпретации клауз с тире и восстановления тире в клаузах с нулевым Копулом, написанный для Синтаксиса
Правило1.
Если мы видим тире, то идем от него направо и налево. Пусть С1 - клауза слева от тире, а С2 - клауза справа. Осуществим следующую проверку: ищем в С1 и в С2 глагол в личной форме или предикатив, если находим, то алгоритм обрывается.
Правило2.
Если непосредственно слева от тире стоит запятая, (дом, построенный на холме, - большой), то это говорит о конце причастного оборота (P1) либо деепричастного, либо оборота с вершиной "который", либо вводного слова, мы ищем его начало (вершины "причастие", "деепричастие", "который", "вводное слово"), и группу (слово), которая им управляет (R1). Затем мы объединяем R1, P1, C2 в одну клаузу "тире".
Правило3.
Восстановление тире.
Работа производится на этапе первоначальной фрагментации. Мы имеем первоначальный фрагмент.
Если фрагмент не "Пустыха", то мы выходим из работы алгоритма. Если фрагмент имеет вариант "Пустыха", то мы все равно выходим из работы алгортима. Алгоритм не восстанавливает тире в клаузах с двумя инфинитивами ("жить все равно что родине служить") по той причине, что случаев, требующих восстановление тире, много меньше, чем случаев, где восстановленное тире - ошибка ("Он еще поигрался с этой мыслью, прежде чем позволить ей удалиться.")
1 случай (тип клаузы ТИРЕ)
Определяем в составе:
Таблица 1
Первое словоВторое словоПримерС,им.С/МС,им. "маша красавица"С,им.П,им "Маша красивая"МС, имС/МС,им "Она красавица"МС, имП,им "Она красивая""это"С/МС,им., "Это Маша""у"+С/МС,рдС/МС,им "У соседей ссора" Дополнительные условия:
1. Прилагательное может стоять только справа от существительного или местоимения. 2. Существительное с большой буквы может стоять только слева (кроме случаев с "это" и "у+рд"). 3. Все части речи неомонимичны, в том числе не должно быть падежной омонимии ( типа "глазок" - С,ед.им., или С,мн.рд), за исключением случая омонимии С,им,ед,но, С,вн,ед,но (стол - стол) и омонимии С ед,мн,им (дело-дела) . В противном случае алгоритм обрывается. 4. Тире не может восстанавливаться непосредственно перед запятой и другими знаками препинания. 5. Тире не восстанавливается, если в одной из клауз есть инфинитив, даже если он омоним ("вести свое хозяйство на крестьянский лад"). Если состав фрагмента определен согласно таблице 1, то во фрагменте восстанавливаем тире и тип фрагмента становится "ТИРЕ". Если мы имеем "это"+С им,ср" и хотя бы еще один претендент на восстановление тире по вышеуказанным правилам ("это окно белое"), то мы после "это" тире не восстанавливаем. 6. Если в клаузе есть предлог ("покушение на жизнь", "в стол рукопись"), то тире не восстанавливается, за исключением предлога "у" ("Ссора у соседей") 7. В случаях, требующих восстановления тире, последнее востанавливается после первого слова ("Покушение - по-человечески жизнь.") 8. В клаузе не может восстанавливаться больше одного тире. В случае, если одно тире уже есть или восстановилось, то прцедура обрывается. (тире не строится после "это" в примере "Мир - это сон") К МС мы приравниваем здесь также местоименные прилагательные "один", "каждый", "другой", "тот".
2 случай (тип клаузы КОПУЛ)
Если находится следующее
Таблица 2
С,им. +как
словно
будто
что
точно
как будто С,им.
"Иван что герой"то мы тире не восстанавливаем, называем клаузу "Copul" с вершиной из списка выделенных курсивом слов, при этом "обрубив" у этой клаузы все граммемы Корпус примеров. Там, где есть тире, Синтаксис именует клаузу "ТИРЕ", где тире нет, там оно восстанавливается и Синтаксис именует клаузу "ТИРЕ". Примеры, выделенные жирным шрифтом, не обрабатываются в соответствии с указанными после них правилами.
"Петя - человек"
"вести свое хозяйство на крестьянский лад" (см правило 5)
"жить все равно что родине служить" (см правило 3)
"дом, построенный на холме, - большой"
"Вчера в лесу мы работали старой пилой, а сегодня во дворе - новой" (см правило 1)
2.3.3.2.1.2. Определение типа фрагмента
Типом фрагмента может быть ровно одно значение из списка (см. 3.3.2.3). Начиная с первого значения из списка, по порядку проверяется есть ли в данном фрагменте слово этой части речи. Если такое слово найдено и у него нет омонимов других частей речи, то дальнейшие поиски прекращаются и тип фрагмента - значение, на котором остановились. Если для данного значения из списка не нашлось неомонимичных (с точностью до части речи) подходящих слов, но есть омонимичные, тогда для фрагмента не устанавливается однозначно тип, а постулируется несколько вариантов, которые либо уничтожатся на уровне семантики, либо останутся в выходной структуре. Пример: на этот раз она не права
Для этого фрагмента есть два варианта:
1. Тип фрагмента - краткое прилагательное (права - ж.р., ед.ч. от правый) 2. Тип фрагмента - пустыха (права - и.п./в.п. мн.ч.; р.п. ед.ч. от право) Пример: мои права забрали в милиции
Для этого фрагмента тип определяется однозначно, т.к. забрали - неомонимичный глагол в личной форме. Глагол в личной форме стоит в списке на первом месте, дальнейшие поиски возможных вершин фрагмента не ведутся.
2.3.3.2.1.2.1. Алгоритм выявления ВВОДНЫХ
Проверка клаузы на наличие вводных слов.
Если найдено слово из списка 1 вводных слов (см. ниже), при этом оно ограничено с обеих сторон какими-либо знаками препинания из следующих:
1. запятая, 2. точка, 3. вскл.знак, 4. вопр.знак, 5. точка с запятой, 6. тире, 7. двоеточие, 8. начало предложения (Бб), 9. конец предложения, 10. кавычки. То это слово "ВВОДН"
Дополнительное правило:
Если слева от вводного слова стоит сочинительный союз или частица, не отделенные от него знаком препинания, то они включаются в клаузу "ВВОДН". ("Она двинулась в путь, и наверно,быстро бы достигла цели, если бы не гроза.") 2.3.3.2.1.3. Определение союзов и союзных слов фрагмента
Сначала определяется, нет ли такого сложного союза (из файла оборотов obor.dic), начало которого (слово с пометой Об1) находится в соседнем слева фрагменте, а конец (помета Об2) в данном. (Это такие сложные союзы, которые разделяются запятой, часто имеют варианты, при которых запятая стоит перед всем союзом - для того, чтобы; с тем, чтобы; потому, что и др.) Если такой союз есть, то он относится к данному фрагменту, т.е. к тому, в котором заканчивается. Далее все слова фрагмента, у которых есть омоним - союз, считаются союзами данного фрагмента. Эта процедура несовершенна и требует доработки с учетом индивидуальных особенностей отдельных союзов.
2.3.3.2.2. Работа с фрагментами
В правилах обработки фрагментов может использоваться как стандартная информация (см. структура фрагмента), так и сведения об отдельных словах.
2.3.3.2.2.1. Правила, устанавливающие иерархию
Здесь мы рассмотрим правила, которые один фрагмент вкладывают в другой.
1) Алгоритм вкладывания "ВВОДН"
Процесс вкладывания, а не слияния клаузы "ВВОДН" происходит на синтаксисе до объединения всех групп "ГЛ_личн", "КР-прил" и др. Клауза "ВВОДН" вкладывается в другие клаузы слева или справа следующим образом:
1. Если "ВВОДН" - первая клауза в предложении. Если с правой стороны от "ВВОДН" стоит Подчиненное предложение любого типа ("ГЛ_ЛИЧН когда","Наверно, когда пошла домой, она что-то забыла."), то "ВВОДН" в него не вкладывается, в остальных случаях происходит вложение. 2. Если после следующих слов, имеющих омоним "ВВОДН", стоит подчинительная клауза со "что" ("бесспорно, что это так"), то омоним "ВВОДН" убивается и ставится "ПРЕДК":
верно
вероятно
возможно
бесспорно
безусловно
несомненно
известно
понятно
похоже 3. Если "ВВОДН" - последняя клауза в предложении. В таком случае "ВВОДН" всегда вкладывается в левую клаузу. 4. Если "ВВОДН" ограничено с одной стороны запятой, а с другой другим знаком препинания или запятой и еще одним знаком препинания, то "ВВОДН" вкладывается в клаузу со стороны запятой безотносительно к иерархическому статусу оной . ("- Не знаю, - прошептал Врумфундель, - наверно, наши мозги слишком натренированы, Маджиктиз." "Убийца потерял что-то - наверно, пальто.", "- Да нет, конечно, - вздохнул Зафод.") 5. Если обе клаузы слева и справа от "ВВОДН" имеют союз, то клауза "ВВОДН" вкладывается в левую клаузу независимо от иерархии. ("И пошла Маша домой, наверно, а не в гости.") 6. Если обе клаузы слева и справа без союзов и если в составе клаузы "ВВОДН" имеется союз или частица ("Она пошла в гости, приготовив ужин, и наверно, поев."), то клауза "ВВОДН" вкладывается в правую клаузу независимо от иерархического уровня последней, за исключением случаев конца предложения и других знаков препинания с правой стороны, кроме запятой. Имеет место следующая иерархия: 1. ГЛ_ЛИЧН ("Она, наверно, пошла гулять", "Зеленые, красные и сиреневые облака, наверно, плыли над нами.", "Какую, наверно, она возбуждает зависть у других!" "Такого царственного существа, наверно, больше нигде не найдешь.") // но: Я думаю, наверно, наши мозги слишком натренированы. 2. ПРЕДК ("Возможно, конечно, наши мозги слишком натренированы.", "Это, наверно, интересно") 3. КР_ПРИЛ ("Она, наверно, красива") 4. КР_ПРЧ ("Оттого, наверно, наши мозги слишком натренированы.") 5. ДПР ("Она, приготовив, наверно, ужин, пошла в кино") 6. ПРЧ ("Она, строящая, наверно, дом, умна", "Дом, наверно,строящийся рабочими.") 7. ИНФ ("Нам, наверно, уходить?") 8. СРАВН ("Ему, наверно, было немногим больше двадцати лет.") 9. ПУСТЫХА ("Дом, наверно, который построил Джек, развалился.") 10. ВВОДН ("- Конечно, конечно, - сказал Зафод.", "Я, конечно, конечно, с тобой согласен." "Она пришла, конечно, наверно, министр ее примет" или "Она пришла, конечно, и конечно же, министр ее примет") Вывод: Чем меньше номер у типа клаузы, тем больше связывающей силы она имеет, но иерархия не работает, если клауза имеет союз. ("Стена джунглей, тянувшаяся покуда хватало глаз и, наверно, еще на добрых две тысячи миль.", "Если это был и ты, наверно, ты не прав.."), хотя "Но у них, наверно, по всему лесу рыщут разведчики.", "Это была, наверно, только приписка."
1.1) Дополнительные правила объединения клауз после вкладывания "ВВОДН":
Если правая клауза имеет сочинительный союз, то объединения клауз после вкладывания "ВВОДН" не происходит. а) Если мы имеем линейную цепочку "Пустыха", "ВВОДН", "Х", где "Х" - любая из групп выше по вышеприведенной иерархии ("это, конечно, здорово"), чем "Пустыха", то "Пустыха" присоединяется к получившейся клаузе после того, как ВВОДН" вольется в правую от себя клаузу. б) Если мы имеем цепочку "Х", "ВВОДН", "Пустыха", где "Х" - любая из групп выше по вышеприведенной иерархии, чем "Пустыха" ("На этот вот момент, конечно, главная из новостей - пройдоха Президент."), то она ("Пустыха") присоединяется к получившейся слева клаузе после вливания "ВВОДН" только в том случае, если 1) не имеет союза перед собой, ("Они пошли, наверно, в лес, а затем решили остановиться.")
2) если она является последней клаузой в предложении или после стоит ("ГЛ_личн" || "КР_ПРИЛ" || "КР_ПРЧ" || "ПРЕДК" ) без подчинительного союза ("Пойдем, наверно, в кино.") в) Если с одной стороны от "ВВОДН"(В1) стоит еще одна "ВВОДН"(В2), а с другой другая клауза Х, то В1 и В2 вкладываются в клаузы в соответстсвии с иерархией. Мы отказались от правила первичного объединения двух "ВВОДН" ввиду множества контр примеров типа "Она пришла, конечно, наверно, министр ее примет" или "Она пришла, конечно, и конечно же, министр ее примет", где они относятся к разным клаузам. Общий корпус примеров на вкладывание "ВВОДН"(подчеркнутый курсив - противоречит правилу):
"Стена джунглей, тянувшаяся покуда хватало глаз и, наверно, еще на добрых две тысячи миль."
"Такого царственного существа, наверно, больше нигде не найдешь."
"Убийца потерял что-то - наверно, пальто."
"Я все любил: и зиму, конечно, и весну."
2) Причастный оборот (применяется к фрагментам с типом причастие)
а) Проверка, не стоит ли причастие, вершина фрагмента, перед определяемым словом: поиск существительного, совпадающего с причастием по роду, числу и падежу. Если такое существительное есть, происходит повторное определение типа фрагмента (тип причастие исключается) и выход из правила. Иначе переход к пункту б).
б) Поиск в соседнем левом фрагменте существительного или местоимения, совпадающего с причастием в роде числе и падеже. Если такое слово найдено, то данный фрагмент (причастный оборот) вкладывается в соседний левый и выход из правила. Если слово не найдено, выход из правила.
3) Фрагмент со словами который, какой, чей Если в соседнем левом фрагменте есть существительное или местоимение, совпадающее с который(какой,чей) в роде и числе, данный фрагмент вкладывается в соседний левый.
4) Фрагмент с союзом что или чтобы
Фрагмент с подчинительным союзом что или чтобы с вершиной не "пустыха", не "вводное слово", не "инфинитив" (если союз - что) вкладывается в соседний левый фрагмент с вершиной не "пустыха", не "вводное слово", не "инфинитив" (если в нем нет союза чтобы). 5) Деепричастный оборот (применяется к фрагментам с типом деепричастие) Фрагмент с вершиной - "деепричастие" вкладывается в соседний левый, если у того вершина - глагол в личной форме, иначе - в соседний правый, если у него вершина - глагол в личной форме, нет подчинительных союзов. 2.3.3.2.2.2. Правила, объединяющие фрагменты
1) Правило присоединения фрагментов типа "пустыха" к фрагменту с предикатной вершиной
Если есть цепочка "пустых", разделенная либо запятыми, либо сочинительным союзом без запятой, и слева от первой "пустыхи" стоит фрагмент не "пустыха" и не "вводное слово", тогда с этим фрагментом объединяй всю цепочку. Если с этой цепочки начинается предложение или перед ней стоит точка с запятой или двоеточие, а справа от этой цепочки стоит фрагмент не "пустыха" и не "вводное слово" и при этом без подчинительных союзов, тогда с этим фрагментом объединяем всю цепочку. Пример: Я знаю Петю,Васю.
На первом этапе "Вася" был отдельной Пустыхой, после же отработки этого правила "Вася" подсоединиолся к "Я знал Петю" . 2) Правила для объединения разорванных фрагментов и поиска слова, управляющего вложениями в них присубстантивных фрагментов.
Работают после анализа сочинения.
Ситуации правил ищутся в предложении справа налево.
Группа правил (4 Правила) соединения 1.1 "пустых" без подлежащего в начале предложения или фрагментов с подчинительным союзом без подлежащего и без сказуемого с фрагментом со сказуемым.
1.2 фрагментов с подлежащим и без ПРЕД в начале предложения или фрагментов с подчинительным союзом и подлежащим с фрагментом-"пустыхой" или фрагментом с ПРЕД.
1.1.1
Что:{Фрагмент-k (первый в предложении* или с подчинит. союзом и в нем нет сущ в именит. п., нет ПРЕД и в него включено обособленное согласованное определение)+(фрагмент-k+i с ПРЕД} или {Фрагмент-k (первый в предложении* или с подчинительным союзом и в нем нет существительного в им. п и нет ПРЕД)+ (фрагмент-k+i с ПРЕД и со включенным в него деепричастным оборотом)}
Строим: соединяем фрагменты k и k+i в один
Примеры: ...когда на столе, покрытом скатертью, они расставили тарелки...
...если, решая задачу, он ошибся,...Вчера, решая задачу, он ошибся...
На столе, покрытом скатертью, стояли тарелки.
1.1.2
Что: фрагмент-k: первый в предложении* или с подчинит. союзом и в нем нет сущ. в им.п и нет ПРЕД)+ ( фрагмент k+i с подчинительным союзом) + фрагмент k+i+n: первый фрагмент справа - не придаточное\деепричастный оборот\ обособленное определение) Строим: фрагмент-k объединить с фрагментом k+i+n в один.
1.2.1
Что: { Фрагмент-k (первый в предложении или с подчинит. союзом, без предиката и с сущХ или с группой, вершина которой - сущХ: существительное , или местоимение, или колич. числ в им.п. или с сущХ: группой сочиненных сущ или групп - в им. падеже, в который вложено согласованное определение или фрагмент с который) + фрагмент k+i с ПРЕД} или { Фрагмент-k (первый в предложении или с подчинит. союзом, без ПРЕД и с сущХ) + (фрагмент-k+i с ПРЕД и вложенным фрагментом с деепричастием)}
Условия: сущХ согласуется с ПРЕД.
Строим: фрагмент-k объединить с фрагментом-k+i
Примеры: Большинство мальчиков, игравших во дворе весь день, уже ушли домой.
Когда он, пытаясь решить задачу, сделал чертеж, пошел дождь.
Он увидел, что на столе, над которым висела лампа, были горой навалены учебники.
1.2.2
Что:{ Фрагмент-k: первый в предложении или с подчинительным союзом, без ПРЕД и с сущХ ) + (фрагмент-k+i: ближайщий без подчинительного союза с ПРЕД)}
Условия: сущХ согласуется с ПРЕД Строим: фрагмент-k и фрагментК+1 сливаем в один фрагмент.
Примеры: Город, где он никогда не был, казался ему уродливым. Город, где он, когда учился, жил, был ему дорог. Город, где башня, когда она строилась, сгорела, был ему дорог.
Алгоритм определения хозяина присубстантивного фрагмента .
Правило ХС-1. Что: фрагмент-k + ( фрагмент-k+1 с где \ чей \ кто\ когда \куда \откуда Условия: во фрагменте-k есть СУЩ: существительное со слугою - местоим. прил. ( тот, такой, каждый, всякий, любой, некоторый,)
Строим: СУЩ - хозяин вложенного фрагмента.
Примеры: ...тот город, где он жил, расположен....тот город, где он жил, расположен.. (Если в то время \тот день\, когда он..., приедет его брат...в том городе, куда \ откуда он едет.., Правило ХС-2 Что: фрагмент-k + фрагмент-k+1 с кто или чей Условия: во фрагменте-k контактно к фрагменту-k+1 есть МЕСТ: местоименное сущ: тот, каждый, всякий, любой, все, никто, кто-нибудь, кто-то, кое-кто, любой, любая прочие
Строим: ближайшее МЕСТ - хозяин фрагмента-k+1
Примеры:...тот, кто этого не знает, не решит...с каждым, чьими вычислениями они пользовались, договориться было бы...
Правило ХС-3 Что: фрагмент-k + фрагмент-k+1 со что (в любой форме) Условия: во фрагменте-k контактно к фрагменту-k+1 есть МЕСТ: все, ничто, что-нибудь, что-то, кое-что, Строим: МЕСТ - хозяин вложенного фрагмента.
Примеры:..что-то, что было им важно, они не знали Правило ХС-4. Что: фрагмент-k + (фрагмент-k+1 со что, в котором нет сущ. в им. п.
Условия: непосредственно слева от фрагмента со что стоит сущ. (или группа с вершиной-сущ), согласующееся с ПРЕД вложенного фрагмента
Строим: это сущ - хозяин фрагмента-k+1
Примеры: ..стол, что стоял\стоит у окна, был покрыт...об истории, что была тогда рассказана, он ничего не знал...
2.3.3.2.2.3. Правила построения фрагмента необособленного согласованного определения
Правила формирования групп с прилагательным\причастием в препозиции к существительному- вершине со вставлениями (=НСО) и ПГ, где предлогу подчинен НСО.
Анализирует:
1. согласованные определения, выраженные прилагательными и причастиями в препозиции к существительному-хозяину и осложненные вложениями предложных оборотов и беспредложных существительных между согласованным определением и его хозяином (готовый ко всему мальчик) и
2. предложные группы со вставлениями между предлогом и его слугою вложений, задаваемые ситуациями п.1 (на покрытом скатертью столе).
Правило 7 для анализа именной группы со вложениями ПГ
Что: цепочка (прилагательное или причастие)л - ПГ - ( прил_сущ. или одиночное существительное)n .
Условие: (прил\прич)л согласуется по числу и падежу, а в ед.ч. - по роду с (прил_сущ. или одиночным сущ.)n.
Строится: 1. группа (прил\прич.)л + ПГ, где (прил\прич)л -вершина.
2. группа (прил\прич)л + (прил_сущ. или один. сущ.)n с вершиной - существительным.
Примеры: ... удобным по всем показателям новым методом ...,... готовый к новому большому и очень трудному походу молодой воин ...
Правило 8 для анализа группы прил-сущ со вложениями между вершиной и прилагательным\ причастием - слугою других групп прил-сущ
Что: цепочка (прилагательное\ причастие)л + (группа прил_сущ.. или одиночное существительное\местоимение)i +(прил_сущ. или одиночное сущ.)n
Условия: 1. (прил. или прич)к согласуется по падежу и числу с (прил_сущ или одиночным сущ.)n 2. (группа прил_сущ или одиночное существительное\местоимение)i не в неомонимичном им. падеже.
Строится:
1. группа (прилагательное\причастие)л + (прил_сущ. или одиночное существительное)i с вершиной - прилагательным\ причастием)к.
2. группа (прилагательное\причастие)i + ( прил_сущ или одиночное сущ.)n с существительным - вершиной.
Примеры: ... видящему всех псу, строящим высокие дома англичанам
Правило 10 для построения ПГ с именными группами, построенными по правилам 7-9. Что: цепочка предлог+НСО
Условие: предлог может управлять одним из падежей вершины НСО. Строится: группа предлог + НСО, где предлог - вершина. Примеры: на лежащем под ним ковре, к ожидающему неприятностей мальчику, для известного всем старшего дворника
2.3.4. Взаимодействие с синтаксическим анализом
Синтаксический анализ проводится на каждом фрагменте отдельно. На фрагментах, полученных объединением по правилу о простых случаях однородности, могут построиться синтаксические группы однородных членов. Основные механизмы взаимодействия между фрагментами и их синтаксическими вариантами:
1. При объединении фрагментов объединяются их синтаксические варианты (каждый с каждым, чтобы получить декартово произведение омонимов для нового фрагмента). 2. При вложении фрагмента в лево- или правостоящий фрагмент, происходит перемножение типов вкладываемого фрагмента на синтаксические варианты главного фрагмента. Каждый омоним типа вкладываемого фрагмента представляется как юнит (см. синтаксис) и добавляется в начало или конец синтаксического варианта. 3. При построении фрагмента необособленного согласованного определения внутри существующего предложения, фрагмент необособленного согласованного определения внутри синтаксических вариантов представляется как юнит. Существует механизм для объединения дистантных и рядом стоящих фрагментов, который объединяет лучшие синтаксические варианты и строит по всем существующим синтаксическим правилам группы для нового варианта, а затем ищет группы построенные на границе объединения или подлежащее и сказуемое по разные стороны границы объединения. Если поиск успешен, то объединение двух фрагментов возможно.
2.4. Морфологический анализ
Данный блок позволяет получить морфологическую информацию о словах в тексте.
2.4.1. Структура морфологического словаря
Морфологический словарь, или лексикон, содержит все словоформы одного языка, в нашем случае русского. 2.4.2. Русский морфологический словарь
Русский морфологический словарь базируется на грамматическом словаре А.А.Зализняка[50]. Включает на данный момент 161 тыс. лемм. При лемматизации для каждого слова входного текста выдается множество морфологических интерпретаций следующего вида:
* лемма (всегда пишется большими буквами); * морфологическая часть речи; * набор общих граммем (которые относятся ко всем словоформам парадигмы слова). * множество наборов граммем. Ниже мы приводим полный перечень русских частей речи:
Часть речи в системеПримерРасшифровка CмамасуществительноеПкрасныйприлагательное МСонместоимение-существительноеГидетглагол в личной формеПРИЧАСТИЕидущийпричастиеДЕЕПРИЧАСТИЕидядеепричастиеИНФИНИТИВидтиинфинитивМС-ПРЕДК нечегоместоимение-предикативМС-П всякийместоименное прилагательноеЧИСЛвосемьчислительное (количественное)ЧИСЛ-Пвосьмойпорядковое числительноеНкрутонаречиеПРЕДК интереснопредикативПРЕДЛподпредлогСОЮЗисоюзМЕЖДоймеждометие ЧАСТ же, бычастицаВВОДНконечновводное слово Граммема - это элементарный морфологический описатель, относящий словоформу к какому-то морфологическому классу, например, словоформе стол с леммой СТОЛ будут приписаны следующие наборы граммем: "мр, ед, им, но", "мр, ед, вн, но". Таким образом, морфологический анализ выдает два варианта анализа словоформы стол с леммой СТОЛ внутри одной морфологической интерпретации: с винительным (вн) и именительным падежами (им).
Ниже перечислены все используемые граммемы:
мр, жр, ср - мужской, женский, средний род;
од, но - одушевленность, неодушевленность;
ед, мн - единственное, множественное число;
им, рд, дт, вн, тв, пр - падежи: именительный, родительный, дательный, винительный, творительный, предложный;
св, нс - совершенный, несовершенный вид;
пе, нп - переходный, непереходный глагол;
дст, стр - действительный, страдательный залог;
нст, прш, буд - настоящее, прошедшее, будущее время;
пвл - повелительная форма глагола;
1л, 2л, 3л - первое, второе, третье лицо;
0 - неизменяемое.
кр - краткость (для прилагательных и причастий).
сравн - сравнительная форма (для прилагательных).
имя, фам - имя, фамилия.
лок, орг - локативность, организация.
кач - качественное прилагательное.
вопр,относ - вопросительность и относительность (для наречий).
дфст - слово обычно не имеет множественного числа.
опч - частая опечатка или ошибка.
жарг - жаргонизм.
Как уже было сказано, одной словоформе может соответствовать много морфологических интерпретаций. Например, у словоформы стали две интерпретации:
* {СТАЛЬ, C, "но", ("жр,ед,рд","жр,ед,дт", "жр,мн,им", "жр,мн,вн") }; * {СТАТЬ, Г, "нп,св",("мн,дст,прш")}. 2.5 Синтаксический анализ
Определим некоторые основные термины.
2.5.1 Клауза
Клауза (фрагмент) - это простое предложение в составе сложного. Полное определение клаузы можно найти в пункте 3.3. Клауза может вкладываться в другую клаузу. Тогда она является подклаузой. С клаузой всегда связан некоторый набор вариантов вершины клаузы, где вершина клаузы - это некоторый омоним возможного слова данной клаузы. Для нас важно, что в нашей системе синтаксического анализа подклаузы могут входить в синтаксические группы наравне с простыми словами.
2.5.2 Морфологический вариант
Морфологический вариант - это набор юнитов, идущих друг за другом в данной клаузе. Юнит - это либо морфологический омоним одного слова, либо вариант подклаузы данной клаузы. Например, для фразы Дом, который построил Джек, развалился
В главной клаузе, совпадающей со всем предложением, есть подклауза "который построил Джек". Морфологический вариант главной клаузы всегда будет состоять из четырех юнитов:
1. "Дом"; 2. ", который построил Джек"; 3. ","; 4. "развалился". Количество морфологических вариантов данной клаузы равно P1*P2*...*Pn, где n - число юнитов, а Pi - число разных вариантов юнита с номером i.
В дальнейшем описании мы будем часто использовать термин "слово", подразумевая "юнит". Только там, где может идти речь о подклаузе, вошедшей в синтаксическую группу, будет использован термин "юнит".
2.5.3 Синтаксическая группа Синтаксическая группа определяется следующими параметрами:
1. номер первого и последнего юнита; 2. тип группы (строка); 3. главная подгруппа 4. граммемы группы; В частном случае группа - один юнит, тогда номер первого и последнего юнита совпадают. Такую группу называют атомарной. Неатомарные группы подчиняются принципу проективности:
Из того, что две группы пересекаются, следует, что одна лежит в другой (т.е. является ее подотрезком).
Тип групп - это строковая константа (ПРИЛ_СУЩ, ПГ и т.д.). Обычно одно синтаксическое правило строит один тип групп, но бывают исключения. Тип групп определяет во многом внутреннее устройство группы. Например, в группе "ПГ" главная подгруппа - предлог и т.д. Главная подгруппа - это группа, которая является главной в данной группе. Например, для ПРИЛ-СУЩ главная группа - существительное. Рекурсивно определяется понятие главного слова группы:
1. Главное слово атомарной группы - само это единственное слово; 2. Главное слово группы - это главное слово главной подгруппы. С помощью понятия "главной группы", например, определяется "именная группа": именная группа - это группа, у которой главное слово существительное.
Граммемы группы, или т.н. "внешние" граммемы группы, - это морфологические характеристики, которые должны определять поведение и сочетаемость группы во "внешнем" для нее мире, т.е. в группах, куда она сама входит. Внешние граммемы противопоставляются "внутренним" граммемам группы. "Внутренние" граммемы - это граммемы главного слова группы. Например, во внешних граммемах группы "Петя и Вася" есть множественное число, а во внутренних его нет (главная группа однородного ряда - первая подгруппа, т.е. "Петя"). Например, в группе "два мальчика" внешние граммемы содержат именительный падеж, а главным словом является словоформа "мальчика" (без им. падежа).
2.5.4 Синтаксическое правило
Синтаксическое правило получает на входе номер слова. От этого слова правило пытается построить новую группу определенного типа, соблюдая принцип проективности. На данный момент все правила пытаются объединить входную группу только с группами, находящимися от нее справа; в нашей записи правил (см. ниже) входная группа - это первая группа цепочки. Все правила упорядочены (см. список ниже), поэтому в данной версии синтаксическая омонимия игнорируется, т.е. строится всегда только один вариант. Классический пример древние стены города наш анализатор разберет следующим образом: генит_иг (прил_сущ (древние, стены), города). Это происходит из-за того, что правило соединения прилагательного, согласованного с существительным, идет до правила, которое собирает генитивные цепочки. Синтаксическое правило оперирует ограниченным числом объектов. Можно сказать, что они написаны на определенном подъязыке С++. Основными объектами являются:
1. Уже построенный набор групп, к которому нужно добавить новую группу. 2. Характеристики отдельных слов - омонимов входного отрезка текста. Таким образом, синтаксические правила находятся выше омонимии, точнее омонимия находится вне этих правил. Рабочее название синтаксического правила - форматка.
2.5.5 Алгоритм работы
1. На входе получаем текст, разделенный на фрагменты и граммемы юнитов. 2. Сохраняем граммемы каждого юнита фрагмента в массив построчно.
3. Попарно сверяем граммемы юнитов с записями в базе данных.
4. Если произошло совпадение с записью в базе данных, то объединяем эти два юнита в указанную группу (каждая группа получает свои граммемы), иначе пропускаем предыдущий юнит. 5. Если второй юнит окажется запятой или союзом, то проверяем третий юнит, и так же объединяем эти три юнита в группу, если есть совпадение в базе данных.
6. Далее продолжаем анализировать следующие юниты по пунктам 3-5.
7. После прохождения фрагмента сохраняем результаты в новом массиве, старый удаляется.
8. Далее повторяем пункты 3-7 для этого же фрагмента.
9. Переходим к следующему фрагменту после завершения изменений в предыдущем фрагменте.
2.5.6 Синтаксические правила
Структура записи правил.
Запись правила состоит из следующих полей:
Что в этом поле указывается цепочка групп (в частном случае слов), которая объединяется в новую синтаксическую группу. Условие в этом поле указываются условия, которые накладываются на компоненты новой группы. Главная группа главная группа, тип и граммемы Тип новой синтаксической группы
Граммемы В скобках идет сокращенное название этого правила, которое совпадает с названием группы, если в результате работы правила построилась группа.
2.5.7 Объединение результатов фрагментации и синтаксического анализа
Построенные фрагменты и синтаксические группы преобразуются в одно дерево зависимостей, в узлах которого стоят отдельные слова или "жесткие" группы (КОЛИЧ, ФИО, ЭЛ_АДРЕС). "Жесткие" группы считаются принципиально неделимыми, поскольку они строятся почти без ошибок. Для установления зависимости используется иерархия на фрагментах, например, если Фi - деепричастный оборот, подчиненный фрагменту Фk, то вершина Фk подчиняет вершину Фi. Так же для установления синтаксических отношений используется главные подгруппы синтаксических групп следующим образом. В каждой группе G можно вычислить главное слово, если взять главную подгруппу G, а потом ее главную подгруппу и т.д. Синтаксические отношения проводятся от главного слова главной подгруппы к главным словам других непосредственно составляющих. Названия отношений совпадают с названиями групп или типов фрагментов. Например, отношения внутри группы ПРИЛ-СУЩ называются ПРИЛ-СУЩ.
Всем узлам дерева зависимостей приписан уникальный номер клаузы, которой он принадлежит. Кроме этого, приписаны два набора морфологической информации (внутренний и внешний). Внутренняя морфологическая информация - это те параметры, которые были приписаны непосредственно слову, а внешняя информация - это то, что было приписано группе, в которой это слово было главным. Например, главным словом в группе "два мальчика" будет слово "мальчика". Внутренняя информация словоформы "мальчика" будет (МАЛЬЧИК, С, ("мр, ед, рд", "мр, ед, вн")), а внешняя - (МАЛЬЧИК, С, ("мр, мн, им")).
3. РАЗРАБОТКА БАЗЫ ДАННЫХ СИНТАКСИЧЕСКИХ ПРАВИЛ
База синтаксических правил состоит из двух сущностей:
* Правила
* Элементы
Структура таблицы "Правила" представлена на рисунке 3.1.
Рис 3.1
Структура таблицы "Элементы" представлена на рисунке 3.2.
Рис. 3.2
3.1 Построение логической модели базы данных в рамках методологии IDEF1Х
Логический уровень - это абстрактный взгляд на данные, на нем данные представляются так, как выглядят в реальном мире, и могут называться так, как они называются в реальном мире. Объекты модели, представляемые на логическом уровне, называются сущностями и атрибутами. Логическая модель данных является универсальной и никак не связана с конкретной реализацией СУБД. IDEF1X (IDEF1 Extended) - методология описания данных, использующаяся для моделирования реляционных баз данных, имеющих отношение к рассматриваемой системе. Методология IDEF1X определяет стандарты терминологии, используемой при информационном моделировании, и графического изображения типовых элементов на диаграммах. Логическая модель базы данных синтаксических правил представлена на рисунке 3.1.1
Рис 3.1.1
4. РАЗРАБОТКА ЭКРАННОЙ ФОРМЫ ДЛЯ ПРОСМОТРА И РЕДАКТИРОВАНИЯ БАЗЫ ДАННЫХ СИНТАКСИЧЕСКИХ ПРАВИЛ.
Главная форма программы представлена на рисунке 4.1. На данной форме предусмотрено редактирование существующих в базе данных синтаксических правил, а так же ввод и сохранение новых правил в базе .
Рис.4.1
Во вкладке "Элементы" можно просмотреть базу данных (рис. 4.2).
Рис.4.2
ЗАКЛЮЧЕНИЕ
В ходе практической работы была разработан алгоритм синтаксического анализа русскоязычных текстов база данных синтаксических правил русского языка, а так же база данных синтаксических правил. В данной программе предусмотрена печатная форма отчетности. В дальнейшем этот алгоритм и база данных могут пригодиться для разработки синтаксического анализатора текста.
СПИСОК ЛИТЕРАТУРЫ
1. [Я. Тестелец, 2001]
2. Синтаксис современного русского языка. - http://www.hi-edu.ru/e-books/xbook089/01/part-002.htm
3. Автоматическая обработка текста. - http://aot.ru/docs/synan.html
4. Гладкий А.В. Синтаксические структуры естественного языка в автоматизированных системах общения. М.,1985 г. 5. Панкратов Д.В., Гершензон Л.М. Описание синтаксического анализа в системе Диалинг. - ,1999.
ПРИЛОЖЕНИЕ
Исходный код программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
using System.Drawing.Printing;
namespace BD
{
public partial class Form1 : Form
{
OleDbConnection myOleDbConnection;
OleDbCommand myOleDbCommand;
string Fname = "syntax.mdb";
string stringToPrint;
bool newrule = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
string connectionString =
"provider=Microsoft.Jet.OLEDB.4.0;" +
"data source="+Fname;
myOleDbConnection = new OleDbConnection(connectionString);
myOleDbCommand = myOleDbConnection.CreateCommand();
myOleDbCommand.CommandText ="SELECT * FROM [Синтаксические правила]"; myOleDbConnection.Open();
OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
while (myOleDbDataReader.Read())
{
listBox1.Items.Add(myOleDbDataReader["Название правила"].ToString());
}
myOleDbDataReader.Close();
myOleDbConnection.Close();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox2.Visible = false;
newrule = false;
myOleDbCommand = myOleDbConnection.CreateCommand();
myOleDbCommand.CommandText =
"SELECT * FROM [Синтаксические правила] where [Название правила]='" + listBox1.SelectedItem.ToString() + "'"; myOleDbConnection.Open();
OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
myOleDbDataReader.Read();
textBox1.Text = myOleDbDataReader["Сокращенное название правила"].ToString(); richTextBox1.Text = myOleDbDataReader["Что"].ToString();
richTextBox2.Text = myOleDbDataReader["Условие"].ToString();
richTextBox3.Text = myOleDbDataReader["Дополнительное условие"].ToString();
richTextBox4.Text = myOleDbDataReader["Главная группа"].ToString();
richTextBox5.Text = myOleDbDataReader["Тип"].ToString();
richTextBox6.Text = myOleDbDataReader["Граммемы"].ToString();
richTextBox7.Text = myOleDbDataReader["Примеры"].ToString();
myOleDbDataReader.Close();
myOleDbConnection.Close();
} private void button2_Click(object sender, EventArgs e)
{
myOleDbCommand = myOleDbConnection.CreateCommand();
if (!newrule)
{ myOleDbCommand.CommandText =
"UPDATE [Синтаксические правила] SET" +
"[Сокращенное название правила]=" + textBox1.Text +
", [Что]='" + richTextBox1.Text + "'" +
", [Условие]=" + richTextBox2.Text + "'" +
", [Дополнительное условие]=" + richTextBox3.Text + "'" +
", [Главная группа]=" + richTextBox4.Text + "'" +
", [Тип]=" + richTextBox5.Text + "'" +
", [Граммемы]=" + richTextBox6.Text + "'" +
", [Примеры]=" + richTextBox7.Text + "'" +
" WHERE [Название правила]='" + listBox1.SelectedItem.ToString() + "'"; }
else
{
myOleDbCommand.CommandText =
"INSERT INTO [Синтаксические правила] " +
"([Название правила],[Сокращенное название правила],[Что],[Условие],[Дополнительное условие],[Главная группа],[Тип],[Граммемы],[Примеры])"+
" VALUES ('" + textBox2.Text + "','" + textBox1.Text + "','" + richTextBox1.Text + "','" + richTextBox2.Text + "','" + richTextBox3.Text + "','" + richTextBox4.Text + "','" +
richTextBox5.Text + "','" + richTextBox6.Text + "','" + richTextBox7.Text + "')";
}
myOleDbConnection.Open();
myOleDbCommand.ExecuteNonQuery();
myOleDbConnection.Close();
listBox1.Items.Add(textBox2.Text);
}
private void button3_Click(object sender, EventArgs e)
{
textBox2.Visible = true;
newrule = true;
textBox1.Text = "";
richTextBox1.Text = "";
richTextBox2.Text = "";
richTextBox3.Text = "";
richTextBox4.Text = "";
richTextBox5.Text = "";
richTextBox6.Text = "";
richTextBox7.Text = "";
}
private void button4_Click(object sender, EventArgs e)
{ myOleDbCommand = myOleDbConnection.CreateCommand();
myOleDbCommand.CommandText =
"DELETE FROM [Синтаксические правила] WHERE [Название правила]='" + listBox1.SelectedItem.ToString()+"'";
myOleDbConnection.Open();
myOleDbCommand.ExecuteNonQuery();
myOleDbConnection.Close();
button1_Click(this,e);
}
private void button5_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter("Отчет.txt");
myOleDbCommand = myOleDbConnection.CreateCommand();
myOleDbCommand.CommandText =
"SELECT * FROM [Синтаксические правила]"; myOleDbConnection.Open();
OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
while (myOleDbDataReader.Read())
{
sw.WriteLine("Название правила: " + myOleDbDataReader["Название правила"].ToString());
sw.WriteLine("Сокращенное название правила: " + myOleDbDataReader["Сокращенное название правила"].ToString());
sw.WriteLine("Что: " + myOleDbDataReader["Что"].ToString());
sw.WriteLine("Условие: " + myOleDbDataReader["Условие"].ToString());
sw.WriteLine("Дополнительное условие: " + myOleDbDataReader["Дополнительное условие"].ToString());
sw.WriteLine("Главная группа: " + myOleDbDataReader["Главная группа"].ToString());
sw.WriteLine("Тип: " + myOleDbDataReader["Тип"].ToString());
sw.WriteLine("Граммемы: " + myOleDbDataReader["Граммемы"].ToString());
sw.WriteLine("Примеры: " + myOleDbDataReader["Примеры"].ToString());
sw.WriteLine();
}
myOleDbDataReader.Close();
myOleDbConnection.Close();
sw.Close();
System.Diagnostics.Process proc = new System.Diagnostics.Process();
// Приложение, которое будем запускать
proc.StartInfo.FileName = "Notepad.exe";
proc.StartInfo.Arguments = Environment.CurrentDirectory+"\\Отчет.txt";
proc.EnableRaisingEvents = true;
proc.Start();
if (checkBox1.Checked)
{
StreamReader sr = new StreamReader("Отчет.txt");
PrintDocument doc = new PrintDocument();
doc.DocumentName = "Отчет.txt";
stringToPrint = sr.ReadToEnd();
doc.PrintPage +=
new PrintPageEventHandler(printDocument1_PrintPage);
doc.Print();
}
}
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;
// Sets the value of charactersOnPage to the number of characters // of stringToPrint that will fit within the bounds of the page.
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);
// Draws the string within the bounds of the page
e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
e.MarginBounds, StringFormat.GenericTypographic);
// Remove the portion of the string that has been printed.
stringToPrint = stringToPrint.Substring(charactersOnPage);
// Check to see if more pages are to be printed.
e.HasMorePages = (stringToPrint.Length > 0);
}
}
}
Документ
Категория
Рефераты
Просмотров
97
Размер файла
275 Кб
Теги
отчеткурсач
1/--страниц
Пожаловаться на содержимое документа