3 класс. Русский язык. Разбор простого и сложного предложения — Разбор простого и сложного предложения
Комментарии преподавателя§1. Синтаксический разбор простого предложенияВ этом уроке познакомимся с порядком синтаксического разбора предложения и рассмотрим отличие разбора простого и сложного предложения.
Синтаксис – раздел науки о языке, изучающий словосочетание и предложение. Предложение является основной единицей синтаксиса. Предложение имеет грамматическую основу, состоящую из главных членов (подлежащего и сказуемого). Оно образуется из слов и словосочетаний. Поэтому при разборе предложения мы выделяем в нём словосочетания из главного слова и зависимого, связанных друг с другом по смыслу.
Мы различаем предложения по нескольким признакам. Вспомним их.
Предложения бывают:
по цели высказывания – повествовательные, вопросительные, побудительные;
по интонации – восклицательные и невосклицательные;
по количеству грамматических основ – простые и сложные;
по наличию второстепенных членов – распространённые и нераспространённые.
Рассмотрим порядок синтаксического разбора на примере предложения:
Утреннее солнце ярко осветило маленькую деревню.
1. Сначала выделяем грамматическую основу и указываем, словами каких частей речи выражены главные члены.
Грамматическая основа данного предложения – «солнце осветило».
Подлежащее «солнце», подчёркиваем одной чертой. Подлежащее выражено именем существительным, подпишем кратко название части речи над словом «солнце». Сказуемое «осветило», подчёркиваем двумя чертами. Сказуемое выражено глаголом, также подпишем название части речи над словом «осветило».
2. Теперь найдём все словосочетания в предложении и укажем связь между главным словом и зависимым. Над второстепенными членами так же, как и над главными, не забудьте написать названия частей речи. Сначала вопросы задаём от подлежащего.
Солнце (какое?) утреннее. Это второстепенный член предложения, выраженный именем прилагательным.
Теперь задаём вопросы от сказуемого.
Осветило (как?) ярко. Это второстепенный член предложения, выраженный наречием.
Осветило (что?) деревню. Это второстепенный член предложения, выраженный именем существительным.
Деревню (какую?) маленькую. Это второстепенный член предложения, выраженный прилагательным.
Мы нашли все словосочетания в предложении. Вспомним, что грамматическая основа предложения не является словосочетанием, так как в ней нет главного и зависимого слова, она уже по сути своей нераспространённое предложение.
3. Теперь приступим к характеристике предложения.
1) Назовём вид предложения по цели высказывания. Это предложение повествовательное.
2) Определим вид предложения по эмоциональной окраске (по интонации): невосклицательное.
3) Укажем наличие грамматических основ. Это предложение простое, в нём одна грамматическая основа.
4) Так как предложение простое, определяем распространённое оно или нераспространённое. В данном предложении есть второстепенные члены, значит, оно распространённое.
Характеристика предложения записывается в скобках. Слова в скобках сокращаются:
(Повеств., невоскл., прост., распр.)
4. Последний шаг – составим схему предложения:
При разборе простого предложения, осложненного однородными членами, укажем это в характеристике и на схеме.
Например:
Но как раз стрела запела, в шею коршуна задела. (А. Пушкин)
Данное предложение по цели высказывания – повествовательное, по интонации –невосклицательное, простое, распространённое, с однородными сказуемыми.
(Повеств., невоскл., прост., распр., с однор. сказ.)
§2. Синтаксический разбор сложного предложения
Разбор сложного предложения отличается тем, что в характеристике предложения мы не указываем, распространённое это предложение или нераспространённое, так как одна его часть может иметь второстепенные члены, а другая нет. Кроме того, мы указываем, из скольких частей состоит предложение; если в предложении есть союзы, то при помощи каких союзов соединяются части.
Старик ловил неводом рыбу, старуха пряла свою пряжу. (А. Пушкин)
1. В этом предложении две грамматические основы. Первая – «старик ловил». Подлежащее «старик» выражено именем существительным. Сказуемое «ловил» выражено глаголом. Вторая грамматическая основа – «старуха пряла». Подлежащее «старуха» выражено именем существительным. Сказуемое «пряла» выражено глаголом.
2. Найдём словосочетания в каждой части:
Ловил (чем?) неводом. Это второстепенный член предложения, выраженный именем существительным.
Ловил (что?) рыбу. Это второстепенный член предложения, выраженный именем существительным.
Пряла (что?) пряжу. Это второстепенный член предложения, выраженный именем существительным.
Пряжу (чью?) свою. Это второстепенный член предложения, выраженный местоимением.
3. Составим характеристику предложения: предложение по цели высказывания – повествовательное, по интонации – невосклицательное, сложное, состоит из двух частей.
(Повест. , невоскл., слож., сост. из 2 ч.)
Составим схему предложения:
§3. Краткие итоги урокаПодведём итоги урока:
Порядок разбора предложения:
1. Выделить грамматическую основу, найти второстепенные члены с указанием частей речи, составить характеристику предложения, начертить схему.
2. В характеристике предложения определяется вид предложения по цели высказывания и интонации, по количеству грамматических основ (простое или сложное), по наличию второстепенных членов (распространенное или нераспространённое), а также указывается наличие однородных членов предложения.
ИСТОЧНИКИ
http://znaika.ru/catalog/3-klass/russian/Razbor-prostogo-i-slozhnogo-predlozheniya
Глава 28. Синтаксис. Осложнённые простые предложения. Общие понятия. Виды осложнений
В данной статье:
- Однородные члены предложения
- Обособление
- Вводные слова и предложения. Вставные конструкции-
- Обращение
- Итоговый тест
Простые предложения многообразны. Они могут быть осложнены. Механизмы осложнения различны, осложняющие компоненты имеют разную природу. Предложение может быть осложнено:
1) однородными членами,
2) обособлениями,
3) вводными словами и предложениями,
4) вставными конструкциями,обращениями.
Здесь рассматривается осложнение простого предложения однородными членами.
§1. Однородные члены предложения
Однородные члены – это члены предложения, связанные с одним и тем же словом и отвечающие на один и тот же вопрос. Примеры:
Я люблю мороженое.
простое двусоставное распространённое предложение
Я люблю мороженое, шоколад, печенье, торты.
простое двусоставное распространённое предложение, осложнённое однородными членами
Смеющиеся девочки вбежали в комнату.
простое двусоставное распространённое предложение
Весёлые, смеющиеся, визжащие, кричащие девочки вбежали в комнату.
простое двусоставное распространённое предложение, осложнённое однородными членами
Любой член предложения может быть выражен рядом однородных членов. Однородными могут быть подлежащие, сказуемые, дополнения, определения и обстоятельства. Осложнение однородными членами может быть по-разному введено в предложение и быть по-разному оформлено пунктуационно. Подробнее см.: Глава 10. Однородные члены предложения.
§2. Обособление
Обособление – способ смыслового выделения или уточнения. Обособляются только второстепенные члены предложения. Обычно обособления позволяют представить информацию более детально и привлечь к ней внимание.
Обособления различны. Различаются:
- обособленные определения,
- обособленные обстоятельства,
- обособленные дополнения.
Обособленные определения делятся на:
- согласованные,
- несогласованные.
Примеры:
Ребёнок, заснувший у меня на руках, внезапно проснулся.
согласованное обособленное определение, выраженное причастным оборотом
Лёшка, в старой куртке, ничем не отличался от деревенских ребятишек.
несогласованное обособленное определение
Я ничего не слышал, кроме тиканья будильника.
обособленное дополнение
Подробнее см.: Глава 11. Обособление.
§3. Вводные слова и предложения. Вставные конструкции
Вводные слова и предложения, и тем более вставные конструкции, – это осложняющие компоненты, грамматически не связанные с членами предложения и членами предложения не являющиеся. Они необходимы, потому что с их помощью говорящий может выразить широкий спектр значений: уверенность-неуверенность, различные чувства, эмоции, оценки, степень достоверности, возможности, уверенности, указать на источник информации, выстроить речь последовательно, активизировать внимание собеседника и т.д. Вводные слова и предложения, а также вставные конструкции разнообразны. Важно узнавать их и не путать с омонимичными им членами предложения.
Примеры:
К счастью, мама не спросила, во сколько я вернулся, и неприятного разговора не было.
к счастью – вводное слово, выделяется запятой
Посуда бьётся к счастью.
к счастью – дополнение, синтаксическая связь – управление: бьётся (к чему?) к счастью
Подробнее см.: Глава 12. Вводные слова и предложения. Вставные конструкции.
§4. Обращение
Обращение – это слово или сочетание слов, называющее лицо или группу лиц, к которым адресована речь. Обращение не является членом предложения.
Сынок, слушай, я расскажу тебе сказку.
сынок – обращение
Уважаемая Анна Сергеевна, здравствуйте!
уважаемая Анна Сергеевна – обращение
Подробнее см.: Глава 13. Обращение.
Проба сил
Узнайте, как вы поняли содержание этой главы.
Итоговый тест-
Осложнённым или нет является предложение:
Я не люблю лимоны. ?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
Я не люблю лимоны, апельсины и грейпфруты.?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
Я не люблю цитрусовые: лимоны, апельсины и грейпфруты.?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
Приятно смотреть на розы, цветущие у крыльца.?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
Приятно смотреть на цветущие у крыльца розы.?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
К счастью, трамвай подошёл быстро.?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
Без всякого сомнения, он должен быть капитаном команды. ?- осложнённое
- неосложнённое
-
Осложнённым или нет является предложение:
Анна Петровна, Вы будете завтра в школе?- осложнённое
- неосложнённое
-
Осложнённые-неосложнённые и распространённые-нераспространённые — это одно и то же?
- да
- нет
-
Осложнённые-неосложнённые и полные-неполные — это одно и то же?
- да
- нет
Правильные ответы:
- неосложнённое
- осложнённое
- осложнённое
- осложнённое
- неосложнённое
- осложнённое
- осложнённое
- осложнённое
- нет
Смотрите также
- Глава 29. Синтаксис. Однородные члены предложения
- Глава 30. Синтаксис. Обособленные члены предложения
- Глава 31. Синтаксис. Вводные слова и предложения. Вставные конструкции
- Глава 32. Обращение
- Глава 33. Синтаксис. Прямая речь
- Глава 7. Пунктуация простого предложения с осложнённой структурой. Знаки препинания при однородных членах
- Глава 8. Пунктуация простого предложения, осложнённого обособленным определением
- Глава 9. Пунктуация простого предложения, осложнённого обособленным обстоятельством
- Глава 10. Пунктуация простого предложения, осложнённого уточняющими или поясняющими членами предложения.
- Глава 11. Пунктуация простого предложения, осложнённого вводными словами, вводными предложениями и вставными конструкциями
- Глава 12. Пунктуация при обращении
— Понравилась статья?:)
Разбор предложений и построение статики текста в Visual Basic
Введение:
В этой статье описываются три подхода к разбору предложений из массива текст; показаны три подхода как средство описания плюсов и минусов выполнение этой задачи с использованием каждого отдельного подхода. Демонстрация Приложение также описывает подход к подсчету предложений, слов, и статистика количества символов в тексте.
Рис. 1. Работающее тестовое приложение
Три подхода к разбору предложений из основного текста включают:
- Разумный разбор: подход
на основе разделения текста с использованием типичных окончаний предложений, где
окончание предложения сохраняется,
- Parse Best: подход, основанный на
использование разделения текста на основе использования регулярного выражения и
где прекращение наказания сохраняется, и
- Анализ без окончаний: an подход к разделению текста с использованием типичных окончаний предложений, где окончания не сохраняются как часть предложения.
Демонстрационное приложение содержит некоторые значения по умолчанию. текст в элементе управления текстовым полем; три кнопки, используемые для разбора текста с помощью одного из три упомянутых подхода и три элемента управления метками, используемые для отображения сводная статистика, сгенерированная по основному тексту. После запуска приложения щелчок по любой из трех кнопок приведет к отображению каждого из проанализированные предложения в элементе управления списком в нижней части формы и будут приводит к отображению сводной статистики с использованием трех меток в Верхняя правая часть формы.
Чтобы начать работу, разархивируйте включенный проект и откройте решение в Среда Visual Studio 2008. В обозревателе решений вы должны отметить эти файлы (рис. 2):
Рис. 2. Обозреватель решений
Как видно из рис. есть один проект Win Forms содержащие одну форму. Весь код, необходимый для этого приложения, включен в код этой формы.
Основная форма (Form1.vb).
Основная форма приложения Form1 содержит весь необходимый код.
форма содержит текст по умолчанию в элементе управления текстовым полем; используются три кнопки
для выполнения каждой из трех функций, используемых для анализа основного текста в
коллекция строк; по одному на предложение. Вы можете заменить, удалить или добавить
текст, содержащийся в элементе управления текстовым полем, чтобы запускать методы для вашего собственного текста.
Три элемента управления метками используются для отображения сводной статистики (предложение, слово и
количество символов) в тексте, содержащемся в элементе управления текстовым полем. Эти резюме
статистика обновляется каждый раз, когда текст разбивается на предложения.
Если вы хотите открыть представление кода в IDE, вы увидите, что код
файл начинается со следующего импорта библиотеки:
Система импорта
Импорт
System.Collections
Импорт
System.ComponentModel
Импорт
System.Data
Импорт
System.Drawing
Импорт
System.Text
Импорт
Импорт System.Windows.Forms
System.Text.RegularExpressions
Обратите внимание, что значения по умолчанию были изменены и теперь включите ссылку на библиотеку регулярных выражений.
После импорта определяются класс и конструктор:
Общественный
Класс Form1
Public Sub Новый()
‘ Этот вызов требуется конструктору форм Windows.
ИнициализироватьКомпонент()
‘ Добавляем любую инициализацию после Вызов InitializeComponent().
End Sub
Далее следует область под названием «Лучший синтаксический анализатор предложений»; этот регион содержит
функция под названием «SplitSentences», которая принимает строку в качестве аргумента. Этот
метод, как правило, дает наилучшие результаты с точки зрения разбора предложений, но может
выдавать неточные значения, если текст содержит ошибки. В регионе также есть
обработчик события нажатия кнопки, используемый для вызова функции SplitSentences.
Код аннотирован и прочитан примечаниями объяснит, что происходит внутри функции.
#Область
«Лучший синтаксический анализатор предложений»
»’ <резюме>
»’ Это вообще самый точный подход к
»’ разбор текста на предложения для включения
»’ окончание предложения (например, точка,
«вопросительный знак» и др. ). Этот подход будет обрабатывать
»’ повторяющиеся предложения с разными окончаниями.
»’
»’ <параметр имя="sSourceText">
»’ <возвраты>возвраты>
»’ <примечания>примечания>
Частная функция SplitSentences (ByVal sSourceText Как строка) Как ArrayList
‘ создать локальную строковую переменную
‘ содержит переданную строку
Dim sTemp As Строка = sSourceText
‘ создать список массивов, который будет
‘ использоваться для хранения предложений
Дим аль Ас Новый список массивов()
‘ разделить предложения с помощью регулярного выражения
Dim RegexSentenceParse Как строка () = _Regex.Split(sTemp, «(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])")
‘ повторять предложения
Дим и Ас Целое число = 0
Для i = 0 К RegexSentenceParse.Length — 1
‘ очистите предложение еще раз, обрежьте его,
‘ и добавляем его в список массивов
Dim sSingleSentence Как строка = _
RegexSentenceParse(i). Replace(Environment.NewLine, Строка.Пустой)
al.Add(sSingleSentence.Trim())
Далее
‘ обновить статистику отображаемую на тексте
‘ символов
лблЧарКоунт.Текст = «Количество символов: » & _GenerateCharacterCount(sTemp).ToString()
‘ предложения
lblSentenceCount.Text = «Количество предложений: » & _GenerateSentenceCount(RegexSentenceParse).ToString()
‘ слова
lblWordCount.Text = «Количество слов: » & _GenerateWordCount(al).ToString()
‘возврат массива с
‘все предложения добавлены
Вернуть аль
Завершить функцию
»’ <резюме>
»’ Вызывает метод SplitSentences (наилучший подход)
»’ для разделения текста на предложения и отображения
»’ результаты в списке
»’
»’ <параметр имя="отправитель">параметр>
»’ <параметр имя="е">параметр>
»’ <примечания>примечания>
Частный саб btnParseNoEnding_Click (отправитель ByVal Как System. Object, ByVal e As System.EventArgs) Обрабатывает btnParseNoEnding.Click
lstSentences.Items.Clear()
Дим аль Ас Новый список массивов()
аль = SplitSentences(txtParagraphs.Text)
Дим и Ас Целое число
Для i = 0 К ал.кол — 1
‘заполнить список
lstSentences.Items.Add(al(i).ToString())
Далее
Конец Sub
#Конец Регион
Далее идет регион под названием, «Парсер разумных предложений»; этот регион содержит функцию под названием, «ReasonableParser», который принимает строку в качестве аргумента. Этот метод имеет тенденцию дают удовлетворительные результаты с точки зрения разбора предложений, но не применяют надлежащие завершение предложения, если входная строка содержит повторяющееся предложение с разные окончания. Эта проблема может быть решена с помощью рекурсивного функция для продолжения перемещения по каждому экземпляру повторяющегося предложения однако использование метода, указанного в предыдущей области кода, требует меньше усилий. Область также содержит обработчик события нажатия кнопки, используемый для вызова Функция разумного парсера.
Код аннотирован, и чтение примечаний объяснит, что происходит внутри функции.
#Область «Синтаксический анализатор разумных предложений»
»’ <резюме>
»’ Это неплохо справляется с разбором предложений
»’ если нет повторяющихся предложений
»’ вам придется прибегнуть к рекурсии в порядке
»’ чтобы решить проблему с несколькими дубликатами предложения.
»’
»’ <параметр имя="sTextToParse">
»’ <возвраты>возвраты>
»’ <примечания>примечания>
Частная функция ReasonableParser(ByVal sTextToParse Как строка) Как ArrayList
Дим аль Ас Новый список массивов()
‘ получить строку из содержимого текстового поля
Dim sTemp As Строка = sTextToParse
стемп = sTemp. Replace(Environment.NewLine, «»)
‘ разделить строку, используя окончания предложения
Тусклый arrSplitChars как Char() «=» «!»} ‘ вещи это конец
предложение
сделай раскол
Dim splitПредложения как Строка() = sTemp.Split(arrSplitChars,StringSplitOptions.RemoveEmptyEntries)
‘ зациклить массив splitSentences
Дим и Ас Целое число
Для i = 0 К splitSentences.Length — 1
‘ найти позицию каждого предложения в
‘ исходный абзац и получаем его окончание (‘.’, ‘?’, ‘!’)
Дим поз как Целое = sTemp.IndexOf(splitSentences(i).ToString())
Dim arrChars As Char() = sTemp.Trim().ToCharArray()
Dim c As Char = arrChars(pos + splitSentences(i).Length)
‘, так как этот подход ищет только первый экземпляр
‘ строки, он не обрабатывает дубликаты предложения
‘ с разными окончаниями. Вы можете расширить это
‘ подход к поиску более поздних экземпляров того же
‘, чтобы получить правильное завершение, но предыдущий
‘ метод использования регулярного выражения для разделения
‘ является надежным и менее утомительным.
‘ добавить окончание предложения в конец предложение
al.Add(splitSentences(i).ToString().Trim() & c.ToString())
Далее
‘ Обновить показ статистики
лблЧарКоунт.Текст = «Количество символов: » & _GenerateCharacterCount(sTemp).ToString()
lblSentenceCount.Text = «Количество предложений: » & _GenerateSentenceCount(splitSentences).ToString()
lblWordCount.Text = «Количество слов: » & _GenerateWordCount(al).ToString()
Вернуть аль
Завершить функцию
»’ <резюме>
»’ Вызывает метод ReasonableParser и
»’ отображает результаты
»’
»’
»’ <параметр имя="е">параметр>
»’ <примечания>примечания>
Частный саб btnParseReasonable_Click (отправитель ByVal Как System.Object, ByVal e As System.EventArgs) Обрабатывает btnParseReasonable. Click
lstSentences.Items.Clear()
Dim al = ReasonableParser(txtParagraphs.Text)
Дим и Ас Целое число
Для i = 0 К ал.кол — 1
lstSentences.Items.Add(al(i).ToString())
Далее
Конец подписки
#Конец Регион
Далее следует регион под названием «Разбор Без прекращения предложения»; эта область содержит функцию под названием « «IDontCareHowItEndsParser», который принимает строку в качестве аргумента. Этот метод имеет тенденцию давать хорошие результаты с точки зрения разбора предложений, но не добавляет окончание к разобранным предложениям; это хороший подход для использования, если вы не важно, какое окончание используется в конце предложения. Регион также содержит обработчик события нажатия кнопки, используемый для вызова IDontCareHowItEndsParser функция.
Код аннотирован, и чтение примечаний объяснит, что происходит
внутри функции.
#Область
«Синтаксический анализ без окончания предложения»
‘/ <резюме>
‘/ Если вас не волнует сохранение приговора
‘/terminations, этот подход отлично работает. Это
‘/ вернет список массивов, содержащий все
‘/ предложений, содержащихся во входной строке, но
‘/ каждое предложение будет лишено своего окончания.
‘/
‘/
‘/ <возвраты>возвраты>
Частная функция IDontCareHowItEndsParser(ByVal sTextToParse Как строка) Как ArrayList
Dim sTemp As Строка = sTextToParse
стемп = sTemp.Replace(Environment.NewLine, «»)
‘ разделить строку, используя окончания предложения
Dim arrSplitChars As Символ () = {«.», «?», «!»} ‘ вещи, которые заканчиваются на
предложение
сделай раскол
Dim splitПредложения как Строка() = sTemp.Split(arrSplitChars,StringSplitOptions.RemoveEmptyEntries)
Дим аль Ас Новый список массивов()
Тусклый я как целое число
Для i = 0 К splitSentences.Length — 1
splitSentences(i) = splitSentences(i). ToString().Trim()
al.Add (splitSentences (i).ToString())
Далее
‘ показать статистику
лблЧарКоунт.Текст = «Количество персонажей:» +GenerateCharacterCount(sTemp).ToString()
lblSentenceCount.Text = «Количество предложений: » +GenerateSentenceCount(splitSentences).ToString()
lblWordCount.Text = «Количество слов: » + ГенерироватьWordCount(al).ToString()
Вернуть аль
Завершить функцию
»’ <резюме>
»’ Вызывает IDontCareHowItEndsParser и отображает
»’
»’ <параметр имя="отправитель">параметр>
»’ <параметр имя="е">параметр>
»’ <примечания>примечания>
Частный саб btnParseBest_Click (отправитель ByVal Как System.Object, ByVal e As System.EventArgs) Обрабатывает btnParseBest.Click
lstSentences.Items.Clear()
Тусклый = IDontCareHowItEndsParser(txtParagraphs. Text)
Дим и Ас Целое число
Для i = 0 To al.Count — 1
lstSentences.Items.Add(al(i).ToString())
Далее
Конец подписки
#Конец Регион
Последний регион называется, «Создать статистику». Эта область содержит три функции, которые возвращают количество символов, количество слов и предложений для основной части текста. Опять же, это раздел аннотирован; прочитайте аннотацию, чтобы получить описание того, как каждая функция работает.
#Область
«Создать статистику»
»’ <резюме>
»’ Генерация общего количества символов для
»’весь текст, преобразованный в
»’ одна строка
»’
»’ <параметр имя="всетекст">параметр>
»’ <возвраты>возвраты>
»’ <примечания>примечания>
Общественная функция GenerateCharacterCount (ByVal allText Как строка) Как целое число
Dim rtn As Целое число = 0
‘ очистить строку на
‘ удаление новой строки и обрезка
‘ оба конца
Dim sTemp As Строка = весь текст
стемп = sTemp. Replace(Environment.NewLine, String.Empty)
стемп = sTemp.Trim()
‘ разбить строку на предложения
‘ используя регулярное выражение
Dim splitПредложения как String() = _Regex.Split(sTemp, _»(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])")
‘ прокручивать предложения, чтобы получить количество символов
Dim cnt As Целое число
Для cnt = 0 To splitSentences.Length — 1
‘ получить текущее предложение
Dim sПредложение As Строка = splitSentences(cnt).ToString()
‘ обрезать
sПредложение = sSentence.Trim()
‘ преобразовать его в массив символов
Тусклое предложение Как Char() = sSentence.ToCharArray()
‘ проверить каждый символ и
‘ добавить его к возвращаемому значению
‘ если он проходит
Тусклый я как целое число
Для i = 0 К предложение.Длина — 1
‘ убедитесь, что это буква, цифра,
‘ пунктуация или пробел перед
‘добавляем его к сумме
Если Char. IsLetterOrDigit(предложение(i)) Или _Char.IsPunctuation (предложение (i)) Или _Char.IsWhiteSpace(предложение(i)) Затем
ртн += 1
Конец, если
Далее
Далее
‘ вернуть окончательный счет
Возврат rtn
Завершить функцию
»’ <резюме>
»’ Сгенерировать количество всех слов, содержащихся в текст
»’, переданный этой функции, ищет
»’ список массивов в качестве аргумента список массивов содержит
»’ одна запись для каждого предложения, содержащегося в
» интересующий текст.
»’
»’
»’ <возвраты>возвраты>
»’ <примечания>примечания>
Общественная функция GenerateWordCount(ByVal allSentences Как ArrayList) Как Целое число
‘ объявить возвращаемое значение
Dim rtn As Целое число = 0
‘ перебрать весь список
‘ предложений
Dim sПредложение As Строка
Для каждого sSentence Во всех предложениях
‘ определить пустое пространство как разделение
‘ персонаж
Dim arrSplitChars As Символ () = Новый Символ () {» «}
‘ создать массив строк и заполнить
‘ это с разбиением на текущее предложение
‘ использовать опцию разделения строки, чтобы удалить
‘ пустые записи, чтобы пустые предложения не
‘ превратить его в количество слов.
Dim arrСлова как String() = sSentence.Split(arrSplitChars,
StringSplitOptions.RemoveEmptyEntries)
ртн += arrWords.Длина
Далее
‘ вернуть окончательное количество слов
Возврат rtn
Завершить функцию
»’ <резюме>
»’ Возвращает количество всех содержащихся предложений в
»’ текст, проверенный этим методом, ищет строку
»’ массив, содержащий все предложения, всего
»’ возвращает счетчик для массива строк.
»’
»’
»’ <возвраты>возвраты>
»’ <примечания>примечания>
Общественная функция GenerateSentenceCount(ByVal allSentences Как строка()) Как целое число
‘ создать возвращаемое значение
Dim rtn As Целое число = 0
‘ установить возвращаемое значение
‘ длина массива предложений
ртн = allSentences. Length
‘ вернуть счет
Возврат rtn
Завершить функцию
#Конец Регион
Резюме.
Эта статья предназначена для описания нескольких подходов к анализу
предложения из основного текста. Далее в статье описаны три функции
который можно использовать для создания сводной статистики по тексту. Есть из
конечно, другие способы, которые могут быть использованы для выполнения каждой из этих вещей. В целом,
Наилучший подход к разбору предложений, по-видимому, заключается в использовании
регулярное выражение. Модификации регулярного выражения могут привести к различным
результаты, которые могут лучше работать с тем типом текста, с которым вы работаете;
однако я обнаружил, что этот подход хорошо работает даже со сложными телами.
текста до тех пор, пока текст правильно отформатирован в правильные предложения.
Анализ предложений и построение статики текста в Visual Basic
- Исходный код для загрузки — 41,04 КБ
Введение
В этой статье описываются три подхода к анализу предложений из текста; три подхода показаны как средства описания плюсов и минусов выполнения этой задачи с использованием каждого из подходов. Демонстрационное приложение также описывает подход к генерированию статистики количества предложений, слов и символов в тексте.
Рис. 1. Тестовое приложение запущено.
Три подхода к разбору предложений из основного текста включают:
- Разумный разбор: подход, основанный на разделении текста с использованием типичных окончаний предложения, где окончание предложения сохраняется.
- Лучший синтаксический анализ: подход, основанный на использовании разбиения текста на основе использования регулярного выражения и при котором сохраняется окончание предложения, и
- Разбор без окончаний: подход к разбиению текста с использованием типичных окончаний предложения, при котором окончания не сохраняются в составе приговора.
Демонстрационное приложение содержит некоторый текст по умолчанию в текстовом поле
элемента управления; три кнопки, используемые для анализа текста с использованием одного из трех упомянутых подходов, и три элемента управления метками, используемые для отображения сводной статистики, сгенерированной для основной части текста. После запуска приложения нажатие любой из трех кнопок приведет к отображению каждого из проанализированных предложений в элементе управления listbox
в нижней части формы и приведет к отображению сводной статистики с использованием трех метки в правом верхнем углу формы.
Приступая к работе
Чтобы начать работу, разархивируйте включенный проект и откройте решение в среде Visual Studio 2008. В обозревателе решений обратите внимание на следующие файлы (рис. 2):
Рис. 2. Обозреватель решений.
Как видно из рисунка 2, существует единственный проект WinForms, содержащий одну форму. Весь код, необходимый для этого приложения, включен в код этой формы.
Основная форма (Form1.vb)
Основная форма заявки, Form1
содержит весь необходимый код. Форма содержит текст по умолчанию в элементе управления текстового поля
; три кнопки используются для выполнения каждой из трех функций, используемых для анализа основного текста в набор строк; по одному на предложение. Вы можете заменить, удалить или добавить текст, содержащийся в элементе управления текстового поля
, чтобы запустить методы для собственного текста. Три элемента управления метками используются для отображения сводной статистики (количество предложений, слов и символов) по тексту, содержащемуся в текстовое поле
управление. Эти сводные статистические данные обновляются каждый раз, когда текст разбивается на предложения.
Если вы хотите открыть представление кода в среде IDE, вы увидите, что файл кода начинается со следующей библиотеки imports
:
VB.NET
Imports System Импортирует System.Collections Импортирует System.ComponentModel Импортирует System.Data Импортирует System.Drawing Импортирует System.Text Импортирует System.Windows.Forms Импортирует System.Text.RegularExpressions
Обратите внимание, что значения по умолчанию были изменены и теперь включают ссылку на библиотеку регулярных выражений.
После импорта
определяются класс и конструктор:
VB.NET
Public Class Form1 Публичная подписка Новая() ' Этот вызов требуется конструктору форм Windows. ИнициализироватьКомпонент() ' Добавьте любую инициализацию после вызова InitializeComponent(). End Sub
Далее идет область под названием «Лучший синтаксический анализатор предложений»; этот регион содержит функцию под названием SplitSentences
, который принимает строку
в качестве аргумента. Этот метод, как правило, дает наилучшие результаты с точки зрения синтаксического анализа предложений, но может выдавать неточные значения, если текст содержит ошибки. Область также содержит обработчик события нажатия кнопки, используемый для вызова функции SplitSentences
.
Код аннотирован, и чтение примечаний объяснит, что происходит внутри функции.
VB.NET
#Регион "Лучший анализатор предложений" ''' <резюме> '''Это, как правило, самый точный подход к ''' разбор текста на предложения для включения окончание приговора (например, период, "вопросительный знак" и др.). Этот подход будет обрабатывать ''' повторяющиеся предложения с разными окончаниями. ''' резюме> ''' ''' <возвращает>возвращает> ''' <примечания>примечания> Частная функция SplitSentences (ByVal sSourceText As String) As ArrayList ' создаем локальную строковую переменную ' содержит переданную строку Dim sTemp As String = sSourceText ' создаем список массивов, который будет 'использовать для удержания предложений Dim al As New ArrayList() ' разделить предложения регулярным выражением Dim RegexSentenceParse As String() = _ Regex. Split(sTemp, "(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])") ' зациклить предложения Dim i как целое число = 0 Для i = 0 для RegexSentenceParse.Length - 1 ' очистите предложение еще раз, обрежьте его, 'и добавляем его в список массивов Dim sSingleSentence As String = _ RegexSentenceParse(i).Replace(Environment.NewLine, String.Empty) al.Add(sSingleSentence.Trim()) Следующий ' обновить статистику, отображаемую в тексте ' персонажи lblCharCount.Text = "Количество символов: " & _ ГенерироватьCharacterCount(sTemp).ToString() ' предложения lblSentenceCount.Text = "Количество предложений: " & _ GenerateSentenceCount(RegexSentenceParse).ToString() ' слова lblWordCount.Text = "Количество слов: " & _ ГенерироватьWordCount(al).ToString() ' вернуть массив с 'все фразы добавлены Вернуть аль Конечная функция ''' <резюме> ''' Вызывает метод SplitSentences (наилучший подход) ''' для разделения текста на предложения и отображения ''' результаты в списке ''' резюме> ''' ''' ''' <примечания>примечания> Private Sub btnParseNoEnding_Click (отправитель ByVal As System. Object, ByVal e Как System.EventArgs) Обрабатывает btnParseNoEnding.Click lstSentences.Items.Clear() Dim al As New ArrayList() al = Разделить предложения (txtParagraphs.Text) Dim i как целое число Для i = 0 To al.Count - 1 'заполнить список lstSentences.Items.Add(al(i).ToString()) Следующий Конец сабвуфера #Конечный регион
Далее идет область под названием «Синтаксический анализатор разумных предложений»; этот регион содержит функцию под названием ReasonableParser
, которая принимает строку
в качестве аргумента. Этот метод, как правило, дает удовлетворительные результаты с точки зрения синтаксического анализа предложений, но не применяет надлежащие окончания предложений, если входная строка
содержит повторяющиеся предложения с разными окончаниями. Эту проблему можно решить, используя рекурсивную функцию для продолжения перемещения по каждому экземпляру повторяющегося предложения, однако использование метода, указанного в предыдущей области кода, требует меньше усилий. Область также содержит обработчик события нажатия кнопки, используемый для вызова Функция ReasonableParser
.
Код аннотирован, и чтение примечаний объяснит, что происходит внутри функции.
VB.NET
#Регион "Синтаксический анализатор разумных предложений" ''' <резюме> ''' Это делает хорошую работу по разбору предложений ''' если нет повторяющихся предложений ''' вам придется прибегнуть к рекурсии, чтобы ''', чтобы решить проблему с повторяющимися предложениями. ''' резюме> ''' ''' <возвращает>возвращает> ''' <примечания>примечания> Частная функция ReasonableParser (ByVal sTextToParse As String) As ArrayList Dim al As New ArrayList() ' получить строку из содержимого текстового поля Dim sTemp As String = sTextToParse sTemp = sTemp.Replace(Environment.NewLine, " ") ' разбить строку, используя окончания предложений Dim arrSplitChars As Char() = {". ", "?", "!"} ' то, что заканчивается предложение сделать раскол Dim splitSentences As String() = sTemp.Split(arrSplitChars, StringSplitOptions.RemoveEmptyEntries) ' зациклить массив splitSentences Dim i как целое число Для i = 0 Чтобы разделитьSentences.Length - 1 ' найти место каждого предложения в ' исходный абзац и получить его завершение ('.', '?', '!') Dim pos As Integer = sTemp.IndexOf(splitSentences(i).ToString()) Dim arrChars As Char() = sTemp.Trim().ToCharArray() Dim c As Char = arrChars(pos + splitSentences(i).Length) ' так как этот подход ищет только первый экземпляр ' строки, он не обрабатывает повторяющиеся предложения ' с разными окончаниями. Вы можете расширить это ' подход к поиску более поздних экземпляров того же ' строка, чтобы получить правильное завершение, но предыдущая ' метод использования регулярного выражения для разделения ' является надежным и менее утомительным. ' добавить окончание предложения в конец предложения al.Add(splitSentences(i).ToString().Trim() & c.ToString()) Следующий ' Обновить отображение статистики lblCharCount.Text = "Количество символов: " & _ ГенерироватьCharacterCount(sTemp).ToString() lblSentenceCount.Text = "Количество предложений: " & _ GenerateSentenceCount(splitSentences).ToString() lblWordCount.Text = "Количество слов: " & _ ГенерироватьWordCount(al).ToString() Вернуть аль Конечная функция ''' <резюме> ''' Вызывает метод ReasonableParser и ''' отображает результаты ''' резюме> ''' ''' ''' <примечания>примечания> Private Sub btnParseReasonable_Click (отправитель ByVal как System.Object, ByVal e As System.EventArgs) Обрабатывает btnParseReasonable.Click lstSentences.Items.Clear() Dim al = ReasonableParser(txtParagraphs. Text) Dim i как целое число Для i = 0 To al.Count - 1 lstSentences.Items.Add(al(i).ToString()) Следующий Конец сабвуфера #Конечный регион
Далее идет область под названием «Разбор без окончания предложения»; этот регион содержит функцию под названием IDontCareHowItEndsParser
, которая принимает строку
в качестве аргумента. Этот метод имеет тенденцию давать хорошие результаты с точки зрения синтаксического анализа предложений, но не добавляет завершение к проанализированным предложениям; это хороший подход, если вам все равно, какое окончание используется в конце предложения. Область также содержит обработчик события нажатия кнопки, используемый для вызова Функция IDontCareHowItEndsParser
.
Код аннотирован, и чтение примечаний объяснит, что происходит внутри функции.
VB.NET
#Область «Анализ без окончания предложения» '/ <резюме> '/ Если вы не заботитесь о сохранении предложения '/terminations, этот подход отлично работает. Этот '/ вернет список массивов, содержащий все '/ предложения, содержащиеся во входной строке, но '/ каждое предложение будет лишено своего окончания. '/ резюме> '/ '/ <возвращает>возвращает> Частная функция IDontCareHowItEndsParser (ByVal sTextToParse As String) Как список массивов Dim sTemp As String = sTextToParse sTemp = sTemp.Replace(Environment.NewLine, " ") ' разбить строку, используя окончания предложений Dim arrSplitChars As Char() = {".", "?", "!"} ' то, что заканчивается предложение сделать раскол Dim splitSentences As String() = sTemp.Split(arrSplitChars, StringSplitOptions.RemoveEmptyEntries) Dim al As New ArrayList() Dim i как целое число Для i = 0 Чтобы разделитьSentences.Length - 1 splitSentences(i) = splitSentences(i).ToString().Trim() al.Add(splitSentences(i).ToString()) Следующий ' показать статистику lblCharCount. Text = "Количество символов: " + ГенерироватьCharacterCount(sTemp).ToString() lblSentenceCount.Text = "Количество предложений: " + GenerateSentenceCount(splitSentences).ToString() lblWordCount.Text = "Количество слов: " + GenerateWordCount(al).ToString() Вернуть аль Конечная функция ''' <резюме> ''' Вызывает IDontCareHowItEndsParser и отображает ''' резюме> ''' ''' ''' <примечания>примечания> Private Sub btnParseBest_Click (отправитель ByVal As System.Object, ByVal e As System.EventArgs) Обрабатывает btnParseBest.Click lstSentences.Items.Clear() Dim al = IDontCareHowItEndsParser(txtParagraphs.Text) Dim i как целое число Для i = 0 To al.Count - 1 lstSentences.Items.Add(al(i).ToString()) Следующий Конец сабвуфера #Конечный регион
Последний регион называется «Создать статистику». Эта область содержит три функции, которые возвращают количество символов, слов и предложений для основной части текста. Опять же, этот раздел аннотирован; прочитайте аннотацию, чтобы получить описание того, как работает каждая функция.
VB.NET
#Регион "Создать статистику" ''' <резюме> ''' Генерация общего количества символов для '''весь текст, преобразованный в ''' одна строка ''' резюме> ''' ''' <возвращает>возвращает> ''' <примечания>примечания> Открытая функция GenerateCharacterCount (ByVal allText As String) As Целое число Dim rtn как целое число = 0 ' очистить строку с помощью ' удаление новой строки и обрезка ' оба конца Dim sTemp As String = allText sTemp = sTemp.Replace(Environment.NewLine, String.Empty) sTemp = sTemp.Trim() 'разбить строку на предложения ' используя регулярное выражение Dim splitSentences As String() = _ Regex. Split(sTemp, _ "(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])") ' прокручивать предложения, чтобы получить количество символов Dim cnt как целое число Для cnt = 0 Для splitSentences.Length - 1 ' получить текущее предложение Dim sSentence As String = splitSentences(cnt).ToString() ' обрезать это sSentence = sSentence.Trim() ' преобразовать его в массив символов Тусклое предложение As Char() = sSentence.ToCharArray() ' проверить каждый символ и ' добавить его к возвращаемому значению 'если пройдет Dim i как целое число Для i = 0 В предложение.Длина - 1 ' убедитесь, что это буква, цифра, ' знак препинания или пробел перед ' добавить его в счет Если Char.IsLetterOrDigit(предложение(i)) или _ Char.IsPunctuation(предложение(i)) или _ Char. IsWhiteSpace(предложение(i)) Тогда ртн += 1 Конец, если Следующий Следующий ' вернуть окончательный счет Возврат ртн Конечная функция ''' <резюме> ''' Сгенерировать количество всех слов, содержащихся в тексте ''', переданный этой функции, ищет ''' список массивов в качестве аргумента, который содержит список массивов ''' одна запись для каждого предложения, содержащегося в '' интересующий текст. ''' резюме> ''' ''' <возвращает>возвращает> ''' <примечания>примечания> Открытая функция GenerateWordCount(ByVal allSentences As ArrayList) As Целое число ' объявить возвращаемое значение Dim rtn как целое число = 0 ' пройтись по всему списку ' предложений Dim sSentence As String Для каждого предложения Во всех предложениях ' определяем пустое пространство как разделение ' характер Dim arrSplitChars As Char() = New Char() {" "} ' создаем массив строк и заполняем ' это с разделением на текущее предложение ' использовать опцию разделения строки, чтобы удалить ' пустые записи, чтобы пустые предложения не ' превратить его в количество слов. Dim arrWords As String() = sSentence.Split(arrSplitChars, StringSplitOptions.RemoveEmptyEntries) rtn += arrWords.Length Следующий ' вернуть окончательное количество слов Возврат ртн Конечная функция ''' <резюме> ''' Возвращает количество всех предложений, содержащихся в ''' текст, проверенный этим методом, ищет строку ''' массив, содержащий все предложения, которые он только что ''' возвращает счетчик для массива строк. ''' резюме> ''' ''' <возвращает>возвращает> ''' <примечания>примечания> Открытая функция GenerateSentenceCount(ByVal allSentences As String()) As Целое число ' создать возвращаемое значение Dim rtn как целое число = 0 ' устанавливаем возвращаемое значение ' длина массива предложений rtn = allSentences.Length ' вернуть счет Возврат ртн Конечная функция #Конечный регион
Резюме
Эта статья предназначена для описания нескольких подходов к разбору предложений из основного текста.