Негосударственное общеобразовательное учреждение Средняя общеобразовательная школа

Разобрать слово по составу видеть: Страница не найдена


Страница не найдена — РОСТОВСКИЙ ЦЕНТР ПОМОЩИ ДЕТЯМ № 7

What does npm exec do? What is the difference between «npm exec» and «npx»?

What are the building blocks of OWL ontologies?

Learn more about «RDF star», «SPARQL star», «Turtle star», «JSON-LD star», «Linked Data star», and «Semantic Web star».

The Hadamard gate is one of the simplest quantum gates which acts on a single qubit.

Learn more about the bra–ket notation.

Progressive Cactus is an evolution of the Cactus multiple genome alignment protocol that uses the progressive alignment strategy.

The Human Genome Project is an ambitious project which is still underway.

What are SVMs (support vector machines)?

Find out more in Eckher’s article about TensorFlow.js and linear regression.

On the importance of centralised metadata registries at companies like Uber.

Facebook’s Nemo is a new custom-built platform for internal data discovery. Learn more about Facebook’s Nemo.

What is Data Commons (datacommons.org)? Read Eckher’s introduction to Data Commons (datacommons.org) to learn more about the open knowledge graph built from thousands of public datasets.

Learn more about how Bayer uses semantic web technologies for corporate asset management and why it enables the FAIR data in the corporate environment.

An introduction to WikiPathways by Eckher is an overview of the collaboratively edited structured biological pathway database that discusses the history of the project, applications of the open dataset, and ways to access the data programmatically.

Eckher’s article about question answering explains how question answering helps extract information from unstructured data and why it will become a go-to NLP technology for the enterprise.

Read more about how document understanding AI works, what its industry use cases are, and which cloud providers offer this technology as a service.

Lexemes are Wikidata’s new type of entity used for storing lexicographical information. The article explains the structure of Wikidata lexemes and ways to access the data, and discusses the applications of the linked lexicographical dataset.

The guide to exploring linked COVID-19 datasets describes the existing RDF data sources and ways to query them using SPARQL. Such linked data sources are easy to interrogate and augment with external data, enabling more comprehensive analysis of the pandemic both in New Zealand and internationally.

The introduction to the Gene Ontology graph published by Eckher outlines the structure of the GO RDF model and shows how the GO graph can be queried using SPARQL.

The overview of the Nobel Prize dataset published by Eckher demonstrates the power of Linked Data and demonstrates how linked datasets can be queried using SPARQL. Use SPARQL federation to combine the Nobel Prize dataset with DBPedia.

Learn why federated queries are an incredibly useful feature of SPARQL.

What are the best online Arabic dictionaries?

How to pronounce numbers in Arabic?

List of months in Maori.

Days of the week in Maori.

The list of country names in Tongan.

The list of IPA symbols.

What are the named entities?

What is computational linguistics?

Learn how to use the built-in React hooks.

Learn how to use language codes in HTML.

Learn about SSML.

Browse the list of useful UX resources from Google.

Where to find the emoji SVG sources?.

What is Wikidata?

What’s the correct markup for multilingual websites?

How to use custom JSX/HTML attributes in TypeScript?

Learn more about event-driven architecture.

Where to find the list of all emojis?

How to embed YouTube into Markdown?

What is the Google Knowledge Graph?


Explore the list of coronavirus (COVID-19) resources for bioinformaticians and data science researchers.

Sequence logos visualize protein and nucleic acid motifs and patterns identified through multiple sequence alignment. They are commonly used widely to represent transcription factor binding sites and other conserved DNA and RNA sequences. Protein sequence logos are also useful for illustrating various biological properties of proteins. Create a sequence logo with Sequence Logo. Paste your multiple sequence alignment and the sequence logo is generated automatically. Use the sequence logo maker to easily create vector sequence logo graphs. Please refer to the Sequence Logo manual for the sequence logo parameters and configuration. Sequence Logo supports multiple color schemes and download formats.

Sequence Logo is a web-based sequence logo generator. Sequence Logo generates sequence logo diagrams for proteins and nucleic acids. Sequence logos represent patterns found within multiple sequence alignments. They consist of stacks of letters, each representing a position in the sequence alignment. Sequence Logo analyzes the sequence data inside the user’s web browser and does not store or transmit the alignment data via servers.

Te Reo Maps is an online interactive Maori mapping service. All labels in Te Reo Maps are in Maori, making it the first interactive Maori map. Te Reo Maps is the world map, with all countries and territories translated into Maori. Please refer to the list of countries in Maori for the Maori translations of country names. The list includes all UN members and sovereign territories.

Phonetically is a web-based text-to-IPA transformer. Phonetically uses machine learning to predict the pronunciation of English words and transcribes them using IPA.

Punycode.org is a tool for converting Unicode-based internationalized domain names to ASCII-based Punycode encodings. Use punycode.org to quickly convert Unicode to Punycode and vice versa. Internationalized domains names are a new web standard that allows using non-ASCII characters in web domain names.

My Sequences is an online platform for storing and analyzing personal sequence data. My Sequences allows you to upload your genome sequences and discover insights and patterns in your own DNA.

Словообразовательный словарь «Морфема» дает представление о морфемной структуре слов русского языка и слов современной лексики. Для словообразовательного анализа представлены наиболее употребительные слова современного русского языка, их производные и словоформы. Словарь предназначен школьникам, студентам и преподавателям. Статья разбора слова «сладкоежка» по составу показывает, что это слово имеет два корня, соединительную гласную, суффикс и окончание. На странице также приведены слова, содержащие те же морфемы. Словарь «Морфема» включает в себя не только те слова, состав которых анализируется в процессе изучения предмета, но и множество других слов современного русского языка. Словарь адресован всем, кто хочет лучше понять структуру русского языка.

Разбор слова «кормушка» по составу.

Разбор слова «светить» по составу.

Разбор слова «сбоку» по составу.

Разбор слова «шиповник» по составу.

Разбор слова «народ» по составу.

Разбор слова «впервые» по составу.

Разбор слова «свежесть» по составу.

Разбор слова «издалека» по составу.

Разбор слова «лесной» по составу.


Определение, фонетический (звуко-буквенный) разбор и разбор слова по составу

На данной странице представлено лексическое значение слова «видеть», а также сделан звуко-буквенный разбор и разбор слова по составу с транскрипцией и ударениями.


  1. Значение слова
  2. Звуко-буквенный разбор
  3. Разбор по составу

Значение слова

ВИДЕТЬ, вижу, видишь; виденный; несов.

1. Обладать способностью зрения. Хорошо в. Совы видят ночью.

2. кого-что. Воспринимать зрением. В. вдали горы.

3. кого (что). Иметь встречу с кем-н. Вчера видел его у друзей. Рад вас в.

4. что. Наблюдать, испытывать. Многое видел на своём веку.

5. что. Сознавать, усматривать.

В. свою ошибку. В. в чёмн. своё призвание. Вот видишь, я был прав (т. е. согласись, признайся).

6. Со словами «сон», «во сне»: представлять в сновидении.

7. кого-что. Воспринимать интеллектуально и зрительно (пьесу, фильм, игру актёра), смотреть (в 3 знач.). В. спектакль в новой постановке. В. цирковое представление. В. Смоктуновского в «Гамлете».

8. видишь (видите), вводн. сл. употр. при желании обратить внимание на что-н., подчеркнуть что-н. (часто с оттенком осуждения, недоверия, иронии). Он, видишь, немного нездоров.

Видишь ли, видите ли, вводн. сл. то же, что видеть (в 8 знач.). Ему видите ли, некогда позвонить.

Видит Бог (разг.) уверение в своей правоте, божба.

| сов. увидеть, увижу, увидишь; енный (ко 2, 3, 4, 5 и 7 знач.).

Вот увидишь (увидите) (разг.) предупреждение собеседнику: будущее покажет, что я прав, что так и будет.

Там увидим (разг.) то же, что там видно будет.

| многокр. видывать, ал (ко 2, 3, 4 и 7 знач.).

| сущ. видение, я, ср. (ко 2 знач.; спец.). Приборы ночного видения.

Фонетический (звуко-буквенный) разбор


видеть — слово из 2 слогов: ви-деть. Ударение падает на 2-й слог.

Транскрипция слова: [в’ид’эт’]

в — [в’] — согласный, звонкий парный, мягкий (парный)
и — [и] — гласный, безударный
д — [д’] — согласный, звонкий парный, мягкий (парный)
е — [э] — гласный, ударный
т — [т’] — согласный, глухой парный, мягкий (парный)

ь — не обозначает звука

В слове 6 букв и 5 звуков.

Цветовая схема: видеть

Разбор слова «видеть» по составу

видеть (программа института)
видеть (школьная программа)

Части слова «видеть»: вид/е/ть
Часть речи: глагол
Состав слова:
вид — корень,
е, ть — суффиксы,
нет окончания,
виде — основа слова.

Примечание: ть является формообразующим суффиксом и не входит в основу слова, но во многих школьных программах ть отмечается как окончание.

Урок русского языка в 4-м классе по теме «Разбор глагола по составу. Алгоритм разбора» , по программе «Школа 2100» | Презентация к уроку по русскому языку (4 класс) по теме:

Урок русского языка в 4-м классе по теме

» Порядок разбора глагола по составу.

Знакомство с алгоритмом » с использованием ИКТ.

Учитель Харламова Елена Васильевна.


  1. научить обучающихся разбирать глагол по составу.


  1. развивать умения видеть в слове его части;
  2. учить объяснять условия выбора орфограмм;
  3. воспитывать интерес к родному языку.

Оборудование:   мультимедийная установка.

Проблема:  почему некоторые глагольные суффиксы не входят в основу?

 I.  Языковая разминка.

  1. Запись под диктовку:

                                                         пр.                         пр.

   Умер дождь, умер ветер, умер шумливый,  беспокойный сад. ( К. Паустовский)

—  Какое значение в предложении имеет слово —  умер?

                      (Умер: перестал, закончился; затих)

— Автор  использовал  литературный   прием   олицетворения.

  1. выполнить синтаксический разбор предложения, разбор по членам предл.
  2. соста вить схему.
  3. дать характеристику предложения, ( повест., невоскл., сложное, сост из 3 частей, осложнено однор. чл.)
  1. Разбор по составу прилагательных.

            Шумливый,   беспокойный.

           — Как разбираем по составу прилагательные?  (оконч., корень,  приставка  и суффикс)


  1. Определите форму глаголов:     (1 слайд)







наст.вр., 2л., ед.ч., возвр.ф

н.ф., возвр.ф.


пр.вр., ж.р., ед.ч.

наст.вр., 3-е л., мн.ч., возвр.ф

буд.вр., 2-е л. ед.ч.,

II. Формулирование темы и цели урока.


— Определите по схемам, к каким частям речи относятся слова:

— Подберите слова к схемам.






                             н       ый

— Посмотрите по схемам над каким материалом мы работали ,   я что предстоит узнать?

—  обратите внимание на схемы глаголов, что вызвало удивление?

  — Назовите тему урока и поставьте цели урока.  

                 (слайд 3)

 Тема: Разбор глагола по составу,  Цель: Будем учится разбирать глаголы.

III. Наблюдение по учебнику.
1. Упр. 292. ( Слайд4)

Ученики выписывают глагол роняет.

Образец рассуждения:

Глагол стоит в форме настоящего времени, 3-го лица, единственного числа. На это указывает окончание -eт. Основа слова роня-. Поставлю глагол в неопределенную форму ронять. Глагольный суффикс –я. Выделю его в глаголе. Подберу однокоренные слова: урон, уронить.  Корень -рон-.

Запись: роняет  — гл., наст. вр., 3 л., ед.ч., ронять, роняла.

— Как вы думаете, какая будет основа???

IV.        Работа с памяткой и алгоритмом.

1.        Прочитайте памятку на с. 97. Какие суффик сы входят в основу слова, а какие не входят.

 а (о, и, е, у) — ти (ть),            — ся (сь)|;                 -л —

— Обычно суффиксы  образуют новые слова, но суффиксы  неопредел ф.

–ть,  -ти, -чь, и прошедшего времени  -л  образуют не новые слова, а форму  одного слова.

( вернуться к словам и разобрать!!!!!)

— Давайте смоделируем наше правило с помощью схемы. ( Схема на парте и на доске)

Упр.  доделать по вариантам: 1 в — проглянет, 2в. – скроется.

Составим алгоритм работы.  (Слайд 5)

 С чего мы начали разбор глагола по составу?

 ( Указали форму слова, окончание и суффиксы , которые не входят, основа и т. д.)


2.  Не входят в основу.

3.  Основа.

4.  Корень.

5.  Приставка, суффикс.

2.        Прочитайте порядок разбора глагола по составу (с. 98).

Так ли мы действовали, разбирая  глагол  роняет?

— Чем порядок разбора глагола по составу отличается от разбора
имени существительного?

V.         Самостоятельная работа по учебнику.

1. Упр. 293.        ,        

2. упр. 294

VI.   Рефлексия:

Какое открытие сделали сегодня на уроке ?

VII.  Домашнее задание Д.м. упр. 165  (слайд 6)

Разобрать по составу слово видеть

Части слова: вид/е/ть
Часть речи: глагол
Состав слова:
вид — корень,
е, ть — суффиксы,
нет окончания ,
виде — основа слова.

Примечание: ть является формообразующим суффиксом и не входит в основу слова, но во многих школьных программах ть отмечается как окончание.

вид корень
е суффикс
ть глагольное
Сходные по морфемному строению слова
Делаем Карту слов лучше вместе

Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!

Спасибо! Я обязательно научусь отличать широко распространённые слова от узкоспециальных.

Насколько понятно значение слова попыхивать (глагол), попыхивая:

Ассоциации к слову «видеть»
Синонимы к слову «видеть»
Предложения со словом «видеть»
  • Её не хотят видеть.
  • Накануне я видела сон.
  • Вам, думаю, лучше не видеть друг друга.
  • (все предложения)
Цитаты из русской классики со словом «видеть»
  • Каким образом Петровна видела звезды на Серже, который еще и не имел их, да если б и имел, то, вероятно, не носил бы при поездках на службе Жюли, это вещь изумительная; но что действительно она видела их, что не ошиблась и не хвастала, это не она свидетельствует, это я за нее также ручаюсь: она
    видела их. Это мы знаем, что на нем их не было; но у него был такой вид, что с точки зрения Петровны нельзя было не увидать на нем двух звезд, – она и увидела их; не шутя я вам говорю: увидела.
Сочетаемость слова «видеть»
Значение слова «видеть»

ВИ́ДЕТЬ , ви́жу, ви́дишь; прич. страд. наст. ви́димый, —дим, -а, -о; несов. 1. Иметь зрение, обладать способностью зрения. (Малый академический словарь, МАС)

Отправить комментарий
Значение слова «видеть»

ВИ́ДЕТЬ , ви́жу, ви́дишь; прич. страд. наст. ви́димый, —дим, -а, -о; несов. 1. Иметь зрение, обладать способностью зрения.

Предложения со словом «видеть»:

Её не хотят видеть.

Накануне я видела сон.

Вам, думаю, лучше не видеть друг друга.

Синонимы к слову «видеть»
Ассоциации к слову «видеть»
Сочетаемость слова «видеть»
Карта слов и выражений русского языка

Онлайн-тезаурус с возможностью поиска ассоциаций, синонимов, контекстных связей и примеров предложений к словам и выражениям русского языка.

Справочная информация по склонению имён существительных и прилагательных, спряжению глаголов, а также морфемному строению слов.

Сайт оснащён мощной системой поиска с поддержкой русской морфологии.

Как выполнить разбор слова видеть по составу? Выделения корня слова, основы и его строения. Морфемный разбор, его схема и части слова (морфемы) — корень, суффикс .

Схема разбора по составу: вид е ть
Строение слова по морфемам: вид/е/ть
Структура слова по морфемам: приставка/корень/суффикс/окончание
Конструкция слова по составу: корень [вид] + суффикс [е] + суффикс [ть]
Основа слова: виде

  1. вид — корень
  2. е — суффикс
  3. ть — суффикс

Словообразование: производное, так как образовано 1 (одним) способом, способы словообразования: суффиксальный.

Характеристики основы слова: непрерывная, простая (1 корень), производная, членимая (есть словообразовательные афиксы) .

Русский язык: разбор слова по составу.

Сквозная тема:

Моя школа.

Школа: начальная школа сад №31


ФИО учителя: Байдуллаева Ж

Класс: 2 « _» класс.

Количество присутствующих: 32

отсутствующих: —

Лексическая тема:

История школьных вещей.

Тема урока:

Разбор слова по составу. (Повторение).

Цели обучения, которые достигаются на данном уроке (ссылка на учебную программу):

2. 1.1.1 определять с помощью учителя опорные слова, фиксировать их; отвечать на закрытые вопросы. формулировать вопросы с опорой на ключевые слова, отвечать на вопросы по содержанию прочитанного определять значимые части слова, выделять корень в слове и подбирать однокоренные слова.



1.1 Понимание содержания информации/ сообщения

2.3 Формулирование вопросов и ответов

3.8 Соблюдение грамматических норм.

Критерии успеха (Предполагаемый результат):

Все учащиеся смогут:

Повторить значимые части слова.

Большинство учащихся смогут:

Определять опорные слова и отвечать на закрытые вопросы самостоятельно.

Находить информацию по двум источникам.

Выделять значимые части слова.

Подбирать однокоренные слова.

Подбирать слова к схемам.

Некоторые учащиеся смогут:.

Составить и разыграть ситуации общения.

Записать рекомендации учащимся.



Основные термины и словосочетания:

Состав слова, части слова, приставка, корень, суффикс, окончание, одноко-

ренные слова, родственные слова, вопрос, текст, стихо-

творение, предложение, упражнение, ответ.

Используемый язык для диалога/письма на уроке:

Вопросы для обсуждения:

Какое значение может иметь слово “состав”?

-А как вы думаете,что же такое Словообразование?

Что вы знаете о происхождении линейки?



Ценности, основанные на национальной идее «Мәңгілік ел»: казахстанский патриотизм и гражданская ответственность; уважение; сотрудничество; труд и творчество; открытость; образование в течение всей жизни.



– литература

– самопознание

– трудовое обучение


использования ИКТ

На данном уроке учащиеся не используют ИКТ



Звуки и буквы, гласные и согласные звуки, печатные и рукописные буквы,

алфавитные названия букв, слог, язык – средство человеческого общения,

высказывание, текст, языковые и неязыковые средства общения, устная и

письменная речь, предложение, прописная буква в начале предложения и в

именах собственных, сила голоса и темп речи, алфавитный порядок слов,

перенос слов, ударные и безударные гласные, мягкий знак на конце и в се-

редине слов, твердые и мягкие согласные, правописание жи-ши, ча-ща, чу-

щу, чк, чн, нщ, рщ, шн, звонкие и глухие согласные, звук [й], разделитель-

ный Ь, состав слова, окончание, корень, приставка, суффикс, родственные

и однокоренные слова.

Ход урока

Этапы урока, t

Запланированная деятельность на уроке


Начало урока


Создание положительного эмоционального настроя

Громко прозвенел звонок,

Начинается урок.

Наши ушки на макушке,

Глазки широко открыты,

Слушаем, запоминаем,

Ни минутки не теряем!

— Я рада видеть всех вас на уроке. Давайте, друзья, улыбнемся друг другу! Улыбки подарим гостям! К уроку готовы? Я рада! Желаю успехов всем нам!

5-10 мин

Актуализация знаний. Целеполагание.

Цель: ввод ситуации для открытия и постановки целей


(П, И)

На доске: Р, С, М, Л, О, С, Ц, Т, А, Н, Х, В, Щ

Учитель просит учащихся убрать не парные согласные и прочитать главное слово нашего урока.

Какое значение может иметь слово “состав”?

1. Железнодорожный состав.

2. Состав – структура, строение.

Но мы на уроке русского языка. Состав чего мы можем изучать?

Тема нашего урока – состав слова. (Учитель открывает тему урока на доске)

Какие задачи поставим перед собой и будем решать на уроке?

Ученик: Повторим все, что знаем о частях слова.

Постановка задач:

-Скажите, это урок новых знаний или урок повторения?

  • Что вы должены знать ?

  • Алгоритм разбора слов по составу.

  • Как находить корень, суффикс, приставку слова.

  • Что вы должены уметь?

  • Разбирать слова по составу.

Критерии успеха

Учащиеся с помощью учителя формулируют тему урока.

Середина урока

11-20 мин

21-22 мин

Работа по теме урока.

Цель: выполнение практических заданий.

(К, И) Минутка чистописания

Ученики пишут запись слова «состав» с соблюдением высоты,ширины и наклона прописных и строчных букв,их соединений.


— Сегодня у нас необыкновенный урок. Это будет урок — приключение, полное неожиданностей. Мы отправимся в путешествие к планетам знаний в галактику Словообразования.

-А как вы думаете,что же такое Словообразование?

-Что он изучает?

— Из чего же состоят слова?(из корней,приставок,суффиксов,окончаний)

-Слова сделаны из своего « строительного материала»,»строительные блоки» для слов называются МОРФЕМАМИ.

Дети берутся за руки .

В космосе так здорово!
Звёзды и планеты
В чёрной невесомости
Медленно плывут!

В космосе так здорово!
Острые ракеты
На огромной скорости
Мчатся там и тут!

1 планета –планета Корней

В гости к — Корней Корнеевичу.

Как вы думаете, с какая морфема живет на этой планете? ( появляется Корень с заданиями)

Корней Корнеевич предлагает конверт с заданиями и вопросами

1)- Что такое корень? Как правильно выделить в слове корень?

2)– Посмотрите на эти необычные деревья. Какие слова могли бы «вырасти» на них? (На доске изображены деревья, в корнях которых даны слова лес, сад,ход,рыба,дом.) Ребята работают в группах..

Напишите эти слова. (Две группы работают на задней стороне доски) Сколько веток «выросло» на вашем дереве? Давайте проверим ребят у доски

. (Д, К) Пальчиковая физминутка.

На моей руке пять пальцев,

Пять хватальцев, пять держальцев.

Чтоб строгать и чтоб пилить,

Чтобы брать и чтоб дарить.

Их не трудно сосчитать:

Раз, два, три, четыре, пять.

(Сплести пальцы рук, соединить ладони и стиснуть их как можно сильнее.

Потом опустить руки и слегка потрясти ими.)

Работа по учебнику.

(К, И) Упр. 15.

Ученики находят лишнее слово (линь) и объясняют

свой выбор; выписывают однокоренные слова; выделяют корень.

— Молодцы, ребята! Вы так хорошо справились с заданием. А нам пора двигаться дальше.


Запись буквы Сс

Запись слова «состав»

Изображение деревьев


23-26 мин

Дети берутся за руки ,читают стих о космосе

Планета Приставок.

В гости к приставке . (появляется Приставка с заданиями в конверте )

— Расскажите, что вы знаете о приставке как части слова?

Выполнение заданий в парах С взаимопроверкой

Работа по теме урока

Цель: выполнение практических заданий.

Работа с учебником

(Г) упр 17. учащиеся подбирают слова к схемам.

— Молодцы, ребята! Вы так хорошо справились с заданием. А нам пора двигаться дальше.

Конверт с заданиями

Задания для

парных работ



26-35 мин

Планета Суффиксов.(появляется Суффикс с конвертом заданий)

— Расскажите, что вы знаете о суффиксах. Какую «стро­ительную» работу они выполняют? (Образуют новые слова: придают словам различные смысловые оттенки.)

(П.И.) (Д,

К) Физминутка для глаз. Буратино

Предложить детям закрыть глаза и посмотреть на кончик своего носа. Учитель медленно считает до 8. Дети должны представить, что их носик начинает расти, они продолжают с закрытыми глазами следить за кончиком носа. Затем, не открывая глаз, с обратным счетом от 8 до 1, ребята следят за уменьшением.

(Дети закрывают глаза ладонями, держат их так до тех

пор, пока не почувствуют глазами тепло от рук.)

Раз, два, три, четыре, пять – можно глазки открывать!

— Отлично! Вы так хорошо справились с заданием. А нам пора двигаться дальше на планету Окончаний.

Планета Окончаний. Встреча с Окончанием

-Расскажите что вы знаете об окончаниях?


-Догадайся , какие окончания пропущены.Выдели окончания.


Мои санк едут сам ,

Без мотор , без кон ,

То и дел мои санк

Убегают от мен .

(П) Учащиеся выбирают правильный порядок разбора

слов по составу. Упр. 21.

Объясняют, почему нужно выполнять разбор слова по порядку.,

(И) Подобрать к соответствующей схеме слово и записать в тетради.

Прощаются с Окончанием, благодарят за интересные задания, возвращаются в класс.

Самостоятельная работа на карточках




Критерии успеха

Учащиеся составляют новые слова из частей данных слов;

записывают их и разбирают по составу .

(К, И) Учащиеся рассказывают по схеме о частях слова.

Конец урока

36-37 мин

-Я поздравляю вас с окончанием путешествия.Вы проявили себя знающими и любознательными путешественниками,хорошо работали на уроке.

— Чтобы разобрать слово по составу, нужно выделить,?


Цель: оценка уровня усвоения навыка по теме.

Итог урока. Рефлексия.

Итог урока

На доску вывешиваются маршрут полёта по галактике.


Критерии успеха



Здоровье и соблюдение техники безопасности

Способные учащиеся строят свои высказывания, а менее способным учитель оказывает поддержку,задавая наводящие вопросы

Формативное оценивание.

  • Взаимооценивание при работе в паре, группе, классом.

  • Результаты наблюдения учителем качества ответов учащихся на уроке.

Определение уровня усвоения навыка по теме .

Физминутка для глаз. Буратино

Предложить детям закрыть глаза и посмотреть на кончик своего носа. Учитель медленно считает до 8. Дети должны представить, что их носик начинает расти, они продолжают с закрытыми глазами следить за кончиком носа. Затем, не открывая глаз, с обратным счетом от 8 до 1, ребята следят за уменьшением.

(Дети закрывают глаза ладонями, держат их так до тех

пор, пока не почувствуют глазами тепло от рук.)

Раз, два, три, четыре, пять – можно глазки открывать!

«ОбидИшься» или «обидЕшься», как правильно?

Слово «оби­дишь­ся» пра­виль­но пишет­ся с бук­вой «и» в без­удар­ном окон­ча­нии как фор­ма гла­го­ла II спря­же­ния «оби­деть­ся».

Чтобы выбрать, как пишет­ся сло­во «обидишься» или «обидешься», обра­тим­ся к началь­ной фор­ме гла­го­ла (инфи­ни­ти­ву) и уста­но­вим его тип спряжения.

Чтобы выяс­нить, как пра­виль­но пишет­ся сло­во «оби­дишь­ся», с бук­вой «и» или «е», опре­де­лим сна­ча­ла часть речи, к кото­рой оно при­над­ле­жит, и его мор­фем­ный состав.

Часть речи слова «обидишься»

Кто мог пред­по­ла­гать, что ты оби́дишься на это незна­чи­тель­ное замечание?

В этом выска­зы­ва­нии сло­во «оби­дишь­ся» обо­зна­ча­ет состо­я­ние лица и отве­ча­ет на вопрос

что сделаешь?

По этим грам­ма­ти­че­ским при­зна­кам опре­де­лим, что инте­ре­су­ю­щее нас сло­во явля­ет­ся само­сто­я­тель­ной частью речи —  гла­го­лом.

Если поста­вить в нем уда­ре­ние, то выяс­ним, что эта гла­голь­ная фор­ма име­ет без­удар­ное лич­ное окончание:

оби́дишься — корень/окончание/постфикс.

Правописание слова «обидишься»

Чтобы пра­виль­но напи­сать без­удар­ное лич­ное окон­ча­ние гла­го­ла с бук­вой «и» или «е», вспом­ним началь­ную фор­му — инфи­ни­тив «оби­деть­ся», кото­рый отне­сем ко вто­ро­му спря­же­нию как род­ствен­ный глаголу-исключению «оби­деть»:

оби­деть — оби­деться

Наличие  воз­врат­но­го пост­фик­са -ся в мор­фем­ном соста­ве про­из­вод­но­го гла­го­ла «оби­деть­ся» не меня­ет его спряжения.

Как извест­но, четы­ре глагола-исключения, закан­чи­ва­ю­щих­ся на -ать, и семь слов этой части речи  с конеч­ным бук­во­со­че­та­ни­ем -еть изме­ня­ют­ся по вто­ро­му типу спряжения:

гнать, дер­жать, дышать, слышать;

видеть, нена­ви­деть, смот­реть, вер­теть, тер­петь, зави­сеть и обидеть.

Вспомнив это, напи­шем пра­виль­но лич­ные без­удар­ные окон­ча­ния воз­врат­но­го гла­го­ла «оби­деть­ся» в фор­мах буду­ще­го времени:

  • 1 лицо  я оби́ж-у-сь — мы оби́д-им-ся,
  • 2 лицо  ты оби́д-ишь-ся — вы оби́д-ите-сь,
  • 3 лицо  он оби́д-ит-ся — они оби́д-ят-ся.

Выберем вари­ант напи­са­ния сло­ва «оби́дишься» как един­ствен­но вер­ный в орфо­гра­фии рус­ско­го языка.

Слово «оби­дишь­ся» пишет­ся с бук­вой «и» в без­удар­ном окон­ча­нии как фор­ма гла­го­ла вто­ро­го спря­же­ния «оби­деть­ся».

Поупражняемся в пра­виль­ном напи­са­нии иссле­ду­е­мо­го сло­ва, если про­чтём при­ме­ры предложений.


Скажи, ты, может, оби́дишься на мое предложение?

Если ты оби́дишься на нас, то всё-таки не дер­жи кам­ня за пазухой.

Я думаю, что ты не оби́дишься, так как мы жела­ем тебе толь­ко добра.

Скачать ста­тью: PDF

Словосочетания: признаки, виды связи, синтаксический разбор

Словосочетание — это сочетание двух или нескольких самостоятельных слов, связанных между собой по смыслу и грамматически. Словосочетание более точно, чем слово, называет предмет, признак, явление или действие:

слово словосочетание
стол обеденный стол
письменный стол
лист лавровый лист
лист малины
гулять гулять в парке
гулять с друзьями

Словосочетание состоит из главного слова и зависимого. Зависимое слово уточняет смысл главного. От главного слова к зависимому всегда можно поставить вопрос:

стол (какой?) обеденный,

гулять (с кем?) с друзьями.

Словосочетания прилагательное+существительное и существительное+существительное могут быть синонимичными, например:

золотая монета – монета из золота,

меховой воротник – воротник из меха,

бритвенный станок – станок для бритья.

Не являются словосочетаниями:

  1. Подлежащее и сказуемое:

    ветер дует.

  2. Любые слова, стоящие рядом в предложении, но не связанные между собой по смыслу:

    сильный дует.

  3. Слово с предлогом:

    у окна, возле дома.

  4. Члены предложения, отвечающие на одинаковые вопросы (однородные члены предложения):

    (какой?) уставший и (какой?) сонный.

  5. Устойчивые выражения (фразеологизмы):

    спустя рукава.

  6. Сложные грамматические формы:

    будет играть, менее дорогой.

  7. Обособленные члены в сочетании с определяемым словом:

    … ветка, сломанная ветром,…

Смысловая и грамматическая связь

Смысловая связь слов в словосочетаниях устанавливается по вопросам, которые задаются от главного слова к зависимому:

Смысловая связь Примеры
предмет и его признак засохший цветок

(какой?) засохший
действие и предмет лететь к солнцу

(к чему?) к солнцу
действие и его признак заинтересованно разглядывать

(как?) заинтересованно
признак и его степень по-весеннему свежий

(как?) по-весеннему

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

домашние тапочки, тапочки (какие?) домашние;

ходить по лезвию, ходить (по чему?) по лезвию.

Признаки словосочетания

Как и любая единица языка, словосочетания имеют свои признаки:

  1. Состав словосочетания — два и более самостоятельных слова.
  2. Смысловое единство этих слов.
  3. Подчинительная грамматическая связь между компонентами в словосочетании.

Простые и сложные

Все словосочетания состоят из главной и зависимой частей. Например, в словосочетании 

чистая вода  главная часть —  вода, зависимая —  чистая.

По своему составу словосочетания могут быть простыми и сложными. Простое словосочетание — это словосочетание, состоящее из двух знаменательных слов:

мокрые пятна,  всегда весёлый,  гулять в саду.

Сложное словосочетание — это словосочетание, состоящее из трёх и более знаменательных слов:

гулять в зимнем саду,  стол из красного дерева.

Сложное словосочетание образуется путём распространения компонентов простого словосочетания и, следовательно, может быть разделено на простые:

папин стол из красного дерева – папин стол, стол из дерева, из красного дерева.

Глагольные, именные и наречные

По характеру главного слова словосочетания делятся на глагольные, именные и наречные:

глагольные главным словом является глагол бегать по траве,
листать книгу,
решать задачу
именные главным словом является имя существительное, имя прилагательное, имя числительное или местоимение свежая краска,
очень скучный,
пять уроков,
кто-то знакомый
наречные главным словом является наречие навстречу мечте,
рядом с домом

Типы подчинительной связи в словосочетаниях

Слова в словосочетаниях связаны подчинительной связью. В русском языке существует три основных типа (вида) подчинительной связи слов в словосочетаниях: согласование, управление и примыкание.

Согласование — это тип подчинительной связи, при котором зависимое слово стоит в том же роде, числе и падеже, что и главное. Например:  спелое яблоко  — зависимое слово  спелое  стоит в тех же формах (в единственном числе, среднем роде и именительном падеже), что и главное слово  яблоко.

При согласовании с изменением формы главного слова соответственно изменяются и формы зависимого слова. Например:

большая яма (Им. п.),  большой ямы (Р. п.),  о большой яме (П. п.).

Грамматическая связь при согласовании осуществляется с помощью окончаний. В роли зависимых слов в таких словосочетаниях могут выступать:

  • имена прилагательные:  надувной шарик;
  • местоимения-прилагательные:  наши друзья;
  • причастия:  просмотренный фильм;
  • порядковые числительные:  второй год.

Управление — это тип подчинительной связи, при котором главное слово управляет падежной формой зависимого слова. Например:

прочитать книгу (В. п.),  журнал (В. п.),  страницу (В. п.).

Главное слово  прочитать  требует поставить зависимые от него слова —  книга, журнал, страница, в винительный падеж.

При управлении с изменением формы главного слова форма зависимого слова не изменяется (зависимое слово остаётся в том же падеже). Например:

прочитать книгу (В. п.),  прочитал книгу (В. п.),  прочитаю книгу (В. п.).

Грамматическая связь при управлении выражается с помощью окончаний или окончаний и предлогов. Например, в словосочетании

гулять по парку

грамматическая связь передаётся с помощью окончания    и предлога  по.

Примыкание — это тип подчинительной связи, при котором в роли зависимого слова выступают неизменяемые слова (глаголы неопределённой формы, деепричастия, наречия):

учиться читать,  бежать прихрамывая,  писать грамотно.

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

Неделимые словосочетания

Неделимые словосочетания — это словосочетания, которые в предложениях выполняют роль одного члена предложения:

сломанный ветром,  пара часов,  два цветка,  брат с сестрой.

Синтаксический разбор словосочетания

Порядок разбора словосочетания:

  1. Назвать главное и зависимое слово. Поставить вопрос от главного слова к зависимому.
  2. Определить, какой частью речи является главное слово.
  3. Определить, какой частью речи выражено зависимое слово.
  4. Назвать средства грамматической связи (выделить окончание у зависимого слова или окончание и предлог).
  5. Определить вид словосочетания по главному слову.
  6. Указать тип подчинительной связи (согласование, управление, примыкание).

При письменном разборе словосочетания, над главным словом ставится символ – ×.

Пример. Образец разбора словосочетания: засохший лист.

Устный разбор.

В словосочетании  засохший лист  главное слово —  лист. Лист   (какой?)  засохший. Засохший  — зависимое слово. Главное слово выражено именем существительным. Зависимое слово выражено именем прилагательным. Зависимое слово связано с главным с помощью окончания  -ий. Вид словосочетания по главному слову — именное. Тип подчинительной связи — согласование (зависимое слово согласуется с главным в мужском роде, единственном числе, именительном падеже; при изменении главного слова изменяется и зависимое).

Письменный разбор.

Определение разборки Merriam-Webster

dis · as · sem · ble
| \ ˌDis-ə-ˈsem-bəl

разобрали; разборка; разбирает

Разобрать синонимы, разобрать антонимы | Тезаурус Мерриам-Вебстера


  • пришлось разобрать телевизор для замены проводки

уйти в разные стороны и перестать существовать как тело или единое целое

  • класс медленно разобрать , многие ждут, чтобы задать инструктору несколько вопросов

См. Определение словаря

— WordReference.com Словарь английского языка

Преобразование в ‘ disantle ‘ (v): (⇒ сопряженное)
v 3-е лицо единственного числа
v pres p глагол, причастие настоящего времени : — Глагол ing используется описательно или для образования прогрессивного глагола — например, « поет, птица», «Это поет, ».
v прошедшее глагол, прошедшее простое : прошедшее время — например, «Он видел человека.«Она засмеялась ».
v прошедшее p глагол, причастие прошедшего времени : форма глагола, используемая описательно или для образования глаголов — например, «дверь заперта », дверь была заперта . «

WordReference Словарь американского английского языка для учащихся Random House © 2021
dis • man • tle / dɪsˈmæntəl / США произношение v. [~ + объект], -tled, -tling.

  1. разобрать;
    удалить части или части;
    уменьшить мощность: Разобрали машину, чтобы выяснить, что с ней не так.

WordReference Random House Полный словарь американского английского языка © 2021
dis • man • tle (dis man tl), США произношение v.t., -tled, -tling.

  1. лишить или лишить аппаратов, мебели, оборудования, защитных сооружений и т. Д .: демонтировать судно; разобрать крепость.
  2. разобрать или снести;
    разобрать: Машину разобрали и отправили по частям.
  3. снять одежду, покрывало и т. Д.: Ветер лишил деревья листьев их.

раз • человек tle •ment, n.
dis • man tler, n.

  • Среднефранцузский desmanteler. См. Дис- 1 , мантия
  • 1570–80

Краткий английский словарь Коллинза © HarperCollins Publishers ::

демонтировать / dɪsˈmænt ə l / vb (переходный)

  1. разобрать
  2. снести или снести
  3. полосу покрытия

Этимология: 17 век: от старофранцузского desmanteler , чтобы снять плащ; см. мантию

демонтаж n

демонтировать ‘ также встречается в этих записях (примечание: многие из них не являются синонимами или переводами):


в кембриджском словаре английского языка

Разбор глагола по составу (морфемный разбор) Цель: Развитие дальнейшего умения видеть в слове его части; объяснять условия выбора орфограмм. Проблема:

§ 1 Разбор слова по составу. Порядок разбора.

На уроке мы познакомимся с порядком выполнения разбора глагола по составу.

Что значит «разобрать глагол по составу»?

Для этого необходимо обозначить в глаголе части слова (корень, суффикс, приставку, окончание, основу), т.е. выделить морфемы.

Разбор слова по составу называют ещё морфемным разбором и обозначают цифрой 2.

Например, увидела2.

Морфемный разбор выполняется в определенном порядке. Давайте познакомимся с алгоритмом разбора глагола по составу.

1.Во-первых, необходимо определить форму глагола.

Глагол имеет две формы: начальную или неопределенную форму глагола и личную. Глаголы начальной формы отвечают на вопросы: что делать? что сделать? В начальной форме глаголы имеют суффиксы -ть,-ти, -чь.

Например: (что делать?) беречь, стеречь, везти; (что сделать?) подарить.

Глаголы в личной форме согласуются с личными местоимениями и указывают на тот объект, который совершает действия.

2.Затем необходимо выделить части слова, которые не входят в основу.

У глаголов такими морфемами являются:

§Суффиксы начальной или неопределенной формы глагола -ть, -ти, -чь.

Данные суффиксы не образуют новых слов, не изменяют лексического значения слова, а лишь изменяют форму глагола, то есть образуют начальную форму. Поэтому суффиксы -ть, -ти, -чь в основу не включаются. Если глагол стоит в неопределенной форме, то эти суффиксы необходимо выделить в первую очередь.

§Суффикс глаголов прошедшего времени -л, так как он не образует нового слова, а образует форму глагола прошедшего времени.


§Личные окончания глаголов. Для того чтобы найти и выделить личное окончание глагола, необходимо проспрягать глагол, то есть изменить его по лицам и числам. Изменяемая часть слова и будет являться окончанием.

Например, найдем окончание у глагола работает.

Проспрягаем данный глагол:

Следовательно, -ет будет являться личным окончанием глагола. Личное окончание глагола заключается в прямоугольник.

Эти морфемы не входят в основу у глаголов, поскольку не участвуют в образовании новых слов.

Основа слова — это часть слова без окончания. Именно в основе заключается лексическое значение слова.

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

4.Следующий пункт разбора — определение корня слова.

Любое слово имеет корень, без этой морфемы не существует ни одного слова, именно в корне заключен общий смысл всех однокоренных слов. Для того чтобы определить корень, необходимо подобрать несколько родственных слов.

Общая часть этих слов, в которой заключено основное лексическое значение, и будет являться корнем.

Например, найдем корень у глагола проверить. Родственными словами к этому глаголу будут: проверка, заверить, поверить, доверять, вера, поверенный. Одинаковая часть этих слов, в которой заключено их основное лексическое значение

Вер. Это и будет корень слова проверить.

При определении корня не следует подбирать разные формы одного слова. Например, для того, чтобы определить корень слова проверить, не следует подбирать слова: проверил, проверила, проверять.

На письме корень слова выделяется дугой (над словом).

5.Вслед за корнем выделяют приставку (если она есть в слове) — морфему, которая участвует в словообразовании однокоренных слов и стоит перед корнем.

Наиболее употребляемые приставки:

На письме приставка выделяется перевёрнутой буквой г (над словом).

6.Вслед за приставкой необходимо выделить суффикс.

Обычно он стоит после корня и служит для образования новых слов. На письме его обозначают специальным значком в виде угла с направленной вверх вершиной (над словом).

У возвратных глаголов необходимо выделить суффиксы -сь и -ся-.

Например, в слове возвращаться -ся — это суффикс, и он входит в основу слова.

У глаголов также могут быть суффиксы:

§ 2 Примеры разбора глаголов по составу

Давайте в качестве примера разберем по составу глагол выходить.

1.Определим форму глагола. Для этого поставим к нему вопрос (что делать?) выходить. Это глагол неопределенной формы.

Выделяем морфемы, не входящие в основу слова. У глагола выходить — это суффикс

Ть-, который образует начальную (неопределенную) форму слова.

3.Выделим основу слова — выходи.

Для того чтобы определить корень, подберем родственные слова: заходить, переходить, поход, ходить и т.д.

Одинаковой частью этих слов является корень -ход.

Вслед за корнем выделим приставку, которая стоит перед ним. Это приставка -вы.

6.Часть слова, стоящая после корня перед формообразующим суффиксом -ть-, будет являться суффиксом глагола. Иэто будет суффикс -и-.

Запись разбора глагола в тетради будет такой:

Давайте выполним разбор еще одного глагола — переглядываются.

1.Определим форму глагола. Поставим вопрос (что делают?) переглядываются.

Глагол указывает на действие нескольких лиц и согласуется с личным местоимением они. Следовательно, данный глагол стоит в личной форме — 3 лица, множественного числа, настоящего времени.

2.Выделим части слова, которые не входят в основу.

В нашем случае это будет личное окончание глагола. Для того чтобы его определить, проспрягаем глагол: переглядывается, переглядываемся, переглядываешься.

Личное окончание — ют.

3.Выделим основу слова — переглядыва___ся. Основа прерывистая.

4.Найдем корень слова.

Подбираем родственные слова: поглядывают, заглядываются, взгляд, глядеть. Корень слова — гляд.

5.Часть слова перед корнем — пере — будет являться приставкой.

У глагола переглядываются два суффикса. Суффикс глагола -ыва- стоит после корня перед личным окончанием глагола.

Входит в основу и суффикс глагола возвратной формы -ся.

Запись в тетради будет иметь такой вид:

§ 3 Краткие итоги уроков

Итак, подведём итог урока.

При разборе глагола по составу необходимо найти и выделить все формообразующие и словообразующие морфемы. Производить разбор глагола по составу следует по следующему алгоритму:

1.Определяем форму глагола.

2.Выделяем морфемы, которые не входят в основу слова: личное окончание глагола, суффиксы -ть, -ти, -чь, -л.

3.Выделяем основу слова.

4.Подбираем родственные слова и выделяем корень слова.

5.Перед корнем находим и выделяем приставку (если она имеется в слове).

6.Следующим шагом находим и выделяем суффикс или суффиксы глагола (если они существуют).

Список использованной литературы:

  1. Справочное пособие по русскому языку. О.В.Узорова, Е.А.Нефедова, ЗАО «Премьера»,1999.
  2. Поурочные разработки по русскому языку. О.Н.Крылова, Л.Ю.Самсонова,Экзамен, М.:2008.
  3. Русский язык в рисунках. В.Н.Бурмако, Просвещение.М., 1991.
  4. Учим русский с увлечением. О.Е.Жирейко, Л.И.Гайдина, А.В.Кочергина, «5 за знания», М.:2005.
  5. Русский язык 4 класс. С.В.Иванов, М., Вентана-Граф, 2005.


Тема: «Порядок разбора глагола по составу.

Знакомство с алгоритмом»

Цель урока:

Создание условий для самостоятельной постановки учащимися учебной задачи через учебный диалог.

Развитие умений «вычитывать» учащимися информацию из источников, представленных в разных формах (схем, текст), соотносить её, обнаруживать несоответствие между компонентами.

Развитие умения правильно выделять основы глаголов, «читать» графические схемы глагольных форм, устанавливать порядок разбора глагола по составу и мотивировать его логикой глагольных признаков.

Воспитание способности преодолевать возникающие трудности.

Ход урока

1.Организационный момент.

2.Актуализация знаний.

«Языковая разминка»

1.Работа с осложнённым текстом

Текст дан учащимся на карточках с пропусками орфограмм и знаков препинания.

Мы люб_м в_сенние д_ньки. П_года ст_ит прекрас_ная. Весело с_неет неб_. Мя_кий в_т_рок гон_т т_ропит облака. Ты смотр__ в небо вид___ как л_тят с д_лёкого юга жур_вли леб_ди гуси. У них по_явятся пт_нцы. Уже отта_л мур _вейник под стар_ с_сной. Вот по пашн_ ход_т усталый после дальн_ д_роги грач_. Скор_ взойдёт рож_.

Объяснить орфограмму, вставить нужную букву. Расставить знаки препинания.

1). Лексическая работа.

Что прочитали? Докажите, что это текст.

Какие весенние признаки описаны?

Дайте заглавие.

2). Орфографическая работа.

на доске: любим, по пашне, весенние (деньки)

Почему данные слова я объединила в одну группу? (безударная позиция гласного звука в окончании слов)

Могу ли я сказать, что это одна и та же орфограмма?

Научите способу проверки данных орфограмм?

(учащиеся называют способ действия проверки)

Догадайтесь, буква, которая не обозначает звука, но показывает на письме мягкость согласного звука, является… (буква Ь)

Найдите в тексте слова, в которых эта буква выполняет эту роль. (деньки, дальней)

Но есть ещё слова с Ь знаком. Назовите и прокомментируйте правописание Ь в данных словах.

(смотришь – 2л, ед.ч.; рожь – сущ. ж.р.)

В каком ещё случае мы пишем Ь знак на конце слова у глаголов?

(в неопред.ф. в корне ЧЬ)

Есть ли ещё орфограммы относительно глагола связанная с Ь знаком?

(Возвратная форма, -тся, ться)

3). Пунктуация.

Ребята, как мы называем науку о языке? (Лингвистика)

Какие разделы мы уже затронули?

(Орфография, пунктуация)

Составьте схемы 1, 4. 5 предложения. Устно, дайте характеристику предложениям. (1- простое, 4 – простое с однородными сказуемыми, сложное, состоит из 2 – х частей: первое с однородными сказуемыми, второе – с однородными подлежащими)

4). Расскажите, что вы знаете о словообразовании.

Выполните разбор по составу: с далёкого (юга), муравейник, прекрасная (погода).

3.Постановка учебной задачи.

Индивидуальная работа.

Разобрать слова по составу: синеет, появятся, оттаял.

Сверьте свои работы в парах.

У кого совпали разборы?

У кого не совпали?

Мы только повторили алгоритм разбора слов по составу. Почему у вас возникло затруднение?

(нет способа действия разбора по составу глагола)

4.Формулирование темы и цели урока.

Тема: «Разбор глагола по составу»

Цель: познакомиться с алгоритмом разбора.

5. «Открытие» нового знания.

Какие знания нам нужны сегодня?

(Порядок разбора слов по составу, особенности глагола).

Что причислим к особенностям глагола?

(суффикс пр.вр –л-; неопред.ф. –ть, -ти, -чь, возвр.ф. -тся, -ться).

Так вот, ребята, у глагола необычен и разбор по составу.

Попробуйте предположить, что вызовет особую трудность.

(составление алгоритма)

1).Знакомство с алгоритмом.

Работа по учебнику. «Русский язык», Бунеев, с.111.

Прочитайте памятку.

Составьте модель, какие суффиксы входят в основу слова, а какие не входят.(не входят: пр. вр –л; неопр ф –ти; -ть. Входят глагольные а, о, и, е, у, вовр ф. ся)

2).Прочитайте порядок разбора глагола.

Запишем ключевые слова каждого этапа разбора:


2.Окончание и суффикс не в основе слова



5.приставка, суффикс

Так ли вы действовали?

Вернёмся к данным глаголам и разберём их, используя алгоритм.

6.Первичное закрепление.

Фронтальная работа на печатной основе.

Разобрать глагола с комментированием.

Выбежать, разделил, догадываться, задрожать, выгоняешь, заморозит, салютовать, посинела, стукнул, лепетать, загустеет, толкать, веселиться.

7.Самостоятельная работа.

1в –
надвигались, оглядываем, роняет.

оглянуться, смотрим, зеленеет.

Самопроверка (на доске)

Самооценка «линеечка»

Проговариваем ошибки, причины ошибок, определяем задачи для их устранения.

8.Итог работы.

Чем разбор глагола отличается от разбора имени существительного?

Кому было трудно?

Где испытывали затруднения?

Какую задачу поставим перед собой для следующих уроков?

Оценивание рабы учащихся на уроке. Выставление отметок.

Овчинникова Татьяна Николаевна
учитель начальных классов
Учебное заведение:
МАОУ «Лицей№3» г. Перми
Населённый пункт:
Наименование материала:
технологическая карта урока русского языка в 4 классе
Разбор глагола по составу
Дата публикации:
начальное образование

Технологическая карта урока русского языка по теме

«Разбор глаголов по составу»


Классный руководитель

: Овчинникова Татьяна Николаевна

Предметная область:

русский язык.

Тема занятия:

«Разбор глаголов по составу».

Тип урока:

Открытие новых знаний.


«Чтение» графических схем глагольных форм.
Развивать умение правильно выделять основу глаголов;
Выработать алгоритм разбора глагола по составу и мотивировать его
логикой глагольных признаков;
Развивать чувство языка на основе законов строения слов и понимать
их внутреннее (структурное) содержание.

Планируемые результаты:

предметные и метапредметные (УУД), на
формирование которых направлена работа на данном уроке.



формировать умение разбирать глаголы по составу,

овладение нормами русского литературного языка, развитие умения
осознанно разбирать по составу глаголы в настоящем, прошедшем и
будущем временах,

способность контролировать свои действия, проверять сказанное и

Метапредметные (УУД) :

Познавательные: общеучебные (умение сравнивать), устанавливать
аналогии, обобщать, учить выделять существенные признаки глагола в
составе слова.

Регулятивные: способность принимать и сохранять учебную цель и задачу,
планирование, контролировать и оценивать свои действия, оценка (адекватно
воспринимать оценку как учителя, так и учеников в роли контролеров).



учитывать разные мнения, умение сотрудничать;

уметь формулировать собственную позицию и собственное мнение;

Строить монологическое высказывание, владеть диалогической формой


развитие самостоятельности;

развивать внимание, восприятие, умение наблюдать и делать выводы;

развитие навыков сотрудничества со сверстниками в ходе работы на


Почему перед тем, как разбирать глагол по составу, нужно
определить, в какой он форме?


УМК: «Русский язык», учебник для учащихся 4 класса. Бунеевы;
презентация «Разбор глагола по составу»; раздаточный материал.

Ход занятия







Формируемые УУД

Орг. момент
— Сегодня у нас гости,
а это всегда радость и
хорошее настроение.
Давайте пожелаем
друг другу, чтобы вас
не покидало
радостное и
творческое состояние
в течение всего урока.
— Интересным,
— Активными,

Личностные УУД

— нравственно-этическая
ориентация, в том числе и
оценивание усваиваемого
содержания исходя из
социальных и личностных

Начнем урок русского
языка. Каким вы
хотите, чтоб был наш
— А какими должны
быть вы во время

Коммуникативные УУД:

формирование ценностного
отношения к общению,
умению видеть свои
достоинства и недостатки
1. Картинный диктант
(капуста, морковь,
— Запишите слова в
столбик (1 человек у
доски или под
-Поставьте ударение,
подчеркните букву,
которую нужно
2. Классификация
— Что общего у этих
-Разберите их по
составу. Что можно
сказать о составе?
— Какая схема
соответствует составу
этих слов?
— Какие постоянные
признаки можем
определить у
Укажите их (1
— Какое слово может
быть лишним?
— Чем различаются эти
Запись на доске
— Ударение падает
на второй слог,
относятся к
группе ОВОЩИ,
часть речи –
— Одинаковый
состав слов.
Один человек
чертит схему на
— Род и склонение.
Капуста – ж.р., 1
Морковь – ж.р., 3
Картофель – м.р.,
2 скл.
— Картофель –м.р.;
морковь –
начинается с
буквы М,
запоминаем букву
О; капуста – нет в
написании Ь.

Коммуникативные УУД:

— у

мение с достаточной
полнотой и точностью
выражать свои мысли в
соответствии с задачами и
условиями коммуникации;
владение монологической и
диалогической формами речи
в соответствии с
грамматическими и
синтаксическими нормами
родного языка, современных
собственную позицию,
договариваться и приходить к
общему решению, в том чис
ле в ситуации столкновения

Познавательные УУД:

— обобщать и
информацию по признакам,
находить ответы на вопросы.

3. Словообразование
— От данных слов
прилагательные и
запишите их рядом с
существительными. (у
доски работу
продолжает другой
— Разберите их по
составу. С помощью
какой части слова
— Что называется
— Кто может назвать,
как называется
данный способ
образования слов?
— Покажите стрелкой,
какое слово дало
жизнь другому слову.
— Склонением.
Запись на доске
Капуста –
Морковь –
Картофель –
— С помощью
— Суффикс – это
часть слова,
которая стоит
после корня и
служит для
новых слов.
— Суффиксальный.
На доске:
Капуста ->
Морковь ->
Картофель ->



На доске схема слов.
-Как вы думаете, а эти
слова к какой части
речи относятся?
— Что называется
— Но в схемах помимо
окончаний мы видим
еще выделенные
части слов. Какие? На
На доске:
— К глаголам.
— Глагол – это
часть речи,
предмета и
отвечает на
вопросы что
делать? и что

Регулятивные УУД:

— с

аморегуляция как
способность к мобилизации
сил и энергии, к волевому
усилию (к выбору в ситуации
мотивационного конфликта) и
препятствий, умения видеть
свои достоинства и

что они указывают?
-Какая возникает у
нас проблема?
— Это суффиксы.
Но мы не знаем,
на что они
Возможно, на
временные формы
— Какие суффиксы
относятся к какой
временной форме

Познавательные УУД:

— выделять важную
информацию, извлекать
информацию из жизненного



задачи и


темы урока.

— С какой частью речи
мы будем работать на
-Глядя на схемы,
определите, чему
будем учиться на
-Итак, тема нашего
Презентация. Слайд 1
— Поставьте цель и
задачу себе на урок.
Презентация. Слайд 2.
— С глаголом.
— Разбирать
глаголы по
— Разбор глаголов
по составу.
— Познакомиться с
глагола и
разбирать глаголы
по составу.

Познавательные УУД:

— построение логической
цепочки рассуждений; анализ
истинности утверждений;
доказательство, выдвижение
гипотез и их обоснование;
проблемы, обосновывать
собственную позицию.

Регулятивные УУД:

— уметь слушать с целевой
установкой, принимать и
сохранять учебную цель и
задачу, прогнозировать
предстоящую работу.

Коммуникативные УУД:

— строить понятные для
собеседника высказывания,
слушать собеседника.

Работа над



Работа в учебнике.
Стр. 97-98
1. Стр. 97 упр. 292.
— Откройте учебники
на стр. 97, упр. 292.
Прочитайте задание
Дети читают
определить, какие

Регулятивные УУД:

-развитие умения
высказывать свои
предположения и свое мнение
на основе работы с
материалом учебника,
осуществлять поставленные

про себя. Что вам
нужно сделать?
— Итак, откройте
тетради, запишите
число, классная
работа, упражнение
292. Спишите это
Пушкина, выделите
окончания, которые
вы вставили.
2. Проверка на слайде
— Кто вставил иные
окончания? Почему?
(если будут другие
— У нас есть задание
разобрать глагол
РОНЯЕТ по составу.
Можем ли мы это
сделать сразу? Все ли
мы для этого знаем?
-Обратимся к
На доске заготовка
для алгоритма разбора
глагола по составу.
Давайте попробуем
заполнить ее. А потом
на основе алгоритма
вернемся и разберем
по составу глагол
— Итак, в первой
строке у нас стоит
слово «ВЫДЕЛИТЬ».
Что мы выделим с
самого начала?
-Верно. Разбор
глаголов мы начинаем
с вами всегда с
суффиксов –ся или –
употреблены в
число, классная
списывают и все
— Нет. Мы не
знаем суффиксы,
указывают на
разные формы
Работают с
— Окончание.
-Суффикс -ся или
-сь, если они есть.
-Чтоб правильно в
основу глагола и
сделать его
разбор. Так как
суффиксы –ся и –
сь в основу не
Читают правило
— Нужно
определить время
и форму глагола,
чтоб правильно
выделить основу.
— Начальная
задачи в соответствии с
учебными действиями.

Познавательные УУД:

— установка причинно-
следственных связей,
создание способов решения
проблем творческого и
поискового характера на
основе материала.

Коммуникативные УУД:

Развитие умения
аргументировать свое мнение
в процессе общения.

сь. Мы обращали на
это внимание, когда
изучали такой
признак глагола как
возвратная форма. А
для чего нам это?
— Хорошо. Дальше что
делаем? Подсказку вы
найдете в правиле на
странице 97.
Прочитайте его. Какие
еще есть особенности
при разборе глагола?
3. Работа со слайдом
5,6 на основе правила
из учебника стр. 97.
-Какая бывает форма
— Какие суффиксы
относятся к начальной
форме глагола?
— В чем их
-Что выделяем после
— Теперь давайте
вернемся к нашим
схемам в начале
урока. Вы по
определили, что это
глаголы. А что за
суффиксы вы видите в
схеме? Прочитайте
правило и попробуйте
определить, как
называются эти
суффиксы и каково их
место при разборе
— Что еще входит в
— -ть, -чь, -ти.
— Не входят в
— Личные
окончания в
настоящем или
будущем времени
и в прошедшем
родовые или
окончания формы
— Это глагольные
суффиксы. Они
входят в основу.
— Суффикс –ся (-
-Приставку, если
есть ее наличие.
последние 3
Разбирают глагол

— Отлично. После
выделения суффиксов
что выделяем?
4. Проблемная
ситуация (возврат)
— А теперь посмотрите
внимательно на
схемы. Все ли тут
-Исправьте ошибки.
-Давайте подведем
итог. (слайд 11)
Раздаю всем
алгоритмы разбора
-А теперь давайте
правильно разберем
глагол РОНЯЕТ.
5. Работа с упр. 296,
стр. 99
— Используя свои
алгоритмы, давайте
упражнение 296.




Слайд 12 (или
— Из данного текста
выпишите глаголы и
разберите их по
составу, используя
Один человек
работает под
у доски с
анализом работы.

Регулятивные УУД:

— планировать свое действие в
соответствии с поставленной
задачей и условиями ее
реализации, выявлять и
корректировать ошибки.

Познавательные УУД:

-Самостоятельное создание
способов решения проблем

творческого и поискового

Коммуникативные УУД:

— Развивать умение слушать и
понимать других, строить
речевые высказывания в
соответствии с
поставленными задачами,
оформлять свои мысли в
устной форме.

Итог урока

-Какую цель и задачу
мы ставили себе на
-Каким способом мы
реализовали данную
— Почему же, перед
тем, как разбирать
глагол по составу,
нужно определить, в
какой он форме?
-Почему удобнее
начать разбор глагола
«с конца»?
— Разбор глаголов
по составу;
— познакомиться с
глаголов, которые
входят и не входят
в основу и
разбирать глагол
по составу.
— Чтобы не
ошибиться в
разборе глагола
из-за суффиксов.
— Можно
допустить ошибки
в выделении

Регулятивные УУД:

-Контроль в форме сличения
способа действия и его
результата с заданным
эталоном с целью
обнаружения отклонений от
эталона и отличий от эталона.

Познавательные УУД:

-установление причинно –
следственных связей,
логической цепи

Личностные УУД

— Оценивание усваиваемого
содержания, исходя из
социальных и личностных

Коммуникативные УУД:

-умение вести диалог,
слушать, участвовать в
коллективном обсуждении.



— Упр. 5 стр. 107
Записывают д/з

Регулятивные УУД:

-выделение и осознание
учащимися уровня и качества

Познавательные УУД:

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


-Расскажите о своих
впечатлениях от
урока, но
использовать можно
только глаголы.
Ответы детей.
оттолкнуться от
местоимения Я)

Регулятивные УУД:

-выделение и осознание
учащимися того, что уже
усвоено и что еще нужно
усвоить, осознания качества и
уровня усвоения.

Тема. Разбор по составу глаголов

Предмет: русский язык

Класс: 4


: формирование умения разбирать глаголы по составу

Обучающие цели:

    ознакомить учеников с алгоритмом разбора глагола по составу;

    повторить знания о глаголе

    учить самостоятельно «открывать» новые знания через проблемный метод обучения.

Развивающие цели:

    развивать мыслительные операции: анализ, синтез, классификацию, обобщение, сравнение, внимание, память;

    развивать умение работать в парах;

    развивать адекватную самооценку своей деятельности.

Воспитательные цели:

    воспитывать ин
    терес к занятиям русским языком.

Тип урока:

урок изучения нового материала


    Учебники: М.Л.Каленчук, Н.А.Чуракова, Т.А.Байкова Русский язык 4 класс, 3 часть; презентация, таблица (карточка)


Познавательные УУД:

Анализировать, сравнивать, делать выводы, обобщать, извлекать и преобразовывать информацию из одной формы в другую;

Поиск информации;

Адекватно понимать содержание прочитанного текста, выделять главную информацию, основную мысль


воспринимать речь учителя, выражать положительное отношение к процессу познания.


высказывать и аргументировать свою точку зрения.

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


высказывать предположения на основе наблюдений, аргументировать свою точку зрения,

формулировать вопрос (проблему) урока и его цель,

искать пути решения проблемы,

осуществлять познавательную и личностную рефлексию

Организационный момент.

(цель: создать мотивацию к включению в учебную деятельность).

Включение детей в деятельность.

Настрой на работу в стихотворной форме.

Прозвенел и смолк звонок

Начинается урок.

Мы за парты дружно сели

И на доску поглядели.

Откройте тетради. Запишите число, классная работа.

Приветствуют учителя, проверяют готовность к уроку

Мы пришли сюда учиться

Не лениться, а трудиться.

Работаем старательно

Слушаем внимательно.

Мы хороший дружный класс

Все получится у нас.

Личностные УУД

Воспринимать речь учителя, выражать положительное отношение к процессу познания

Коммуникативные УУД

Планирование учебного сотрудничества с учителем и сверстниками

II . Актуализация знаний и фиксация затруднений в деятельности.

(цель: актуализировать представления о понятиях)

Перед вами на доске написаны буквы. Составьте из данных букв слово.
а л г о л г

Какое слово получилось?

Напишите красиво и правильно это слово 4 раза.

А что мы знаем про глагол?

Игра «Лови вопрос»

Вам нужно составить вопрос и задать однокласснику.

Делаем итог нашей беседы, вам нужно продолжить фразы

Слайд 1)

Глагол обозначает ……….

Глаголы в неопределенной форме отвечают на вопросы …….

В предложении глагол является …..

Глаголы изменяются по……, а в прошедшем времени …….

Спряжение – это …..

Не с глаголами …..


дети составляют вопросы и задают друг к другу (по цепочке)

действие предмета

что делать? что сделать?


временам, лицам, числам

по родам

изменение глагола по лицам и числам.

пишется раздельно

Познавательные УУД

Коммуникативные УУД

слушать и слышать других, быть готовым корректировать свою точку зрения.

III. Постановка проблемы.

(цель: выявить и зафиксировать в речи затруднение в учебной деятельности; согласовать тему и цель урока).

– Как вы думаете, к какой части речи относятся эти слова?

На доске
: (слайд 2)

– Как вы догадались?

– С какой частью речи мы будем работать на уроке?

– Глядя на схемы, определите, чему будем учиться на уроке?

Какова же тема нашего урока?
(слайд 3)

Какова цель нашего урока?
(слайд 4)

Можно ли сказать, что это тема новая для нас?

Мы знаем о глаголе уже немало, однако, не все. Глагол – это сложная часть речи русского языка и сегодня мы приведем в систему наши знания и закрепим наши умения разбирать глаголы по составу

А что поможет нам выполнить разбор глагола по составу?

Поэтому следующая наша задача ……


по суффиксам и окончаниям

разбирать глаголы по составу

Разбор глагола по составу

Научиться разбирать глагол по составу



Составить алгоритм « Разбор глагола по составу»

Познавательные УУД

Анализировать, сравнивать, обобщать, делать выводы.

извлекать и преобразовывать информацию из одной формы в другую.

Коммуникативные УУД

Высказывать и аргументировать свою точку зрения.

слушать и слышать других, быть готовым корректировать свою точку зрения.

Регулятивные УУД

— в

ысказывать предположения на основе наблюдений.

— о

Высказывать предположения на основе наблюдений.


V. Проектирование и фиксация нового знания

(цель: выполнять разбор гл. по составу)

(Слайд 5)

Работа с правилами и заполнение таблицы (работа с учебником стр.60-61)

Читаем первый пункт правила и заполняем таблицу.

С чего начинаем разбор глаголов?

Итак, если глагол стоит в начальной форме, то….

Если глагол стоит в форме настоящего или будущего времени, то….

Если же глагол стоит в форме прошедшего времени, то…..

Читаем второй пункт правила

Читаем третий пункт правила

(Открывают учебник, находят данную страницу)

С определения формы глагола

Выделяем суффиксы начальной формы

Выделяем окончание, а потом глагольный суффикс

Выделяем окончание и суффикс прошедшего времени

Выделить основу

Выделить корень

Выделить приставку

Познавательные УУД

Анализировать, сравнивать, обобщать, делать выводы.

— и

звлекать и преобразовывать информацию из одной формы в другую.

Коммуникативные УУД

Высказывать и аргументировать свою точку зрения.

слушать и слышать других, быть готовым корректировать свою точку зрения.

Регулятивные УУД

искать пути решения проблемы.

высказывать предположения на основе наблюдений.

— о

существлять познавательную и личностную рефлексию.

Высказывать предположения на основе наблюдений.

Слайд 6)


Код к замку мы подбирали

И немножечко устали

Потихоньку дружно встали

И движения показали

Как живешь?

Как идешь?

Как бежишь?

Как летишь?

Как плывешь?

Как сидишь?

Вот так! (учащиеся поднимают большой палец)

Вот так! (шаг на месте)

Вот так! (бег на месте)

Вот так! (махи руками)

Вот так!

Вот так!


Первичное закрепление.

(цель: развивать умение выполнять морфемный разбор глаголов).

(Слайд 7)

.1. Упражнение 54

Упр.54 на стр.61 учебника (Работа выполняется по цепочке с комментированием у доски)

А теперь каждый ученик сможет проверить свои знания,
выполнив предложенный тест. Выберите правильный ответ и запишите букву этого ответа.

Физкульминутка для глаз (
слайд 8)

Прилетела бабочка,

Села на указку.

Попытайтесь вслед за ней

Пробежаться глазками.

5.3. Работа в парах (задание на карточке) (
Слайд 9)

Посмотрите на слайд, что нужно сделать?

дум – наст.вр., 3л., мн.ч.

бег – прош.вр., 3 л., мн.ч.

спор – н.ф.

нес – н.ф.

крик – наст.вр., 3 л., мн.ч.

5.3. Самостоятельная работа

(слайд 10)

А теперь проверим, как вы усвоили тему. Вам нужно разобрать эти слова по составу.

Покраснеть, перепишет, убежал, собрался, везти

Кто уверен, что задания выполнил, правильно покажите солнышко.

Взаимопроверка. Правильные ответы на экране.
(Слайд 11


Критерии оценивания:

«5» — если нет ошибок в разборе слов

«4» — 1 ошибка

«3» — 2 ошибки

Посолить, остричь, подвезти, прочитал, прибежали, выпила, нюхают, перелистает, заработаешь

Образовать глаголы, выполнить разбор слов по составу






выполняют задание самостоятельно

Познавательные УУД

Адекватно понимать содержание прочитанного текста

Выделять главную информацию, основную мысль.

Коммуникативные УУД

Планирование учебного сотрудничества в парах;

Оказывать в сотрудничестве необходимую взаимопомощь.

Регулятивные УУД

Осуществлять познавательную и личностную рефлексию.

Контроль, оценка, коррекция

VI Рефлексия учебной деятельности на уроке. Итог урока.

(цель: оценить собственную деятельность; зафиксировать неразрешенные затруднения, если они есть, как направление будущей работы).

Какую цель

вы ставили перед собой в начале урока?

Какие трудности встретились при разборе слов по составу?

«Солнышко» — мне всё удалось и понял(а) тему.

«Солнышко и тучка» — мне не все удалось

«Тучка» — у меня ничего не получилось

– Я научился разбирать глагол по составу …

Спасибо за работу.

Научиться разбирать глаголы по составу

Отлично (солнышко)

Хорошо (солнышко+тучка)

Удовлетворительно (тучка)



Оценивание собственной роли в учебном процессе;


Осознание учащихся того, что уже усвоено, и что подлежит усвоению, оценивание качества и уровня усвоения;


рефлексия способов и условий действия, контроль и оценка процесса и результатов деятельности;



Оценка действий партнера

VII. Домашнее задание.

(Слайд 13)

Учебник, упр. 55, стр.63

Проводит разбор домашнего задания, проводит пояснения к упражнению

Записывают д/з в дневник



Умение слушать

Определи по окончаниям и суффиксам, в какой форме стоят глаголы. ______ -а -ют ______ -и-ть ______ -а-л -и ______ -ат _____ -о-ть-ся ______ -а- ет -ся Мечтают – наст.вр., 3л., мн.ч. Думали – прош.вр., мн.ч. Бороться – н.ф., возвр. Ходить–н.ф Молчат – наст.вр.,3л,мн.ч. Улыбается – наст.вр., 3л, ед.ч., возвр.

Кто самый внимательный? Прыгали- глаг., прош.вр., мн.ч. уколоться- глаг., н.ф., возвр.ф. проспорить- глаг., н.ф. Закричала- глаг.,прош.вр., ж.р., ед.ч. светится-глаг.,наст.вр.,3л.,ед.ч.,возвр.ф. принесешь- глаг., буд.вр., 2л.,ед.ч. Разучилась-глаг.,пр.вр.,ж.р.,ед.ч.,возвр постучишься- глаг.,буд.вр., 2л.,ед.ч., возвр.ф. задержать- глаг., н.ф.

Дополни: Глаголы обозначают действия предметов и отвечают на вопросы что делать? что сделать? Постоянный признак глагола – спряжение, непостоянные признаки – время, лицо, число, возвр. , вид. Суффиксы глаголов в н.ф.–ть, -ти, -чь. Суффиксы возвр. глаголов: -сь, -ся. Глаголы изменяются по лицам и числам, а в прошедшем времени – по родам.

Определи спряжение глагола. И или Е? Летаете (летать 1спр.) Считаешь (считать 1спр.) Валит (валить 2спр.) Мыслит (мыслить 2спр.) Держишь (держать искл. 2спр.) Стелет (стелить искл. 1спр.) Выносите (выносить 2спр.) Встречаете (встречать 1спр.) Слушаешь (слушать 1спр.)

Фразеологизмы Дать голову на отсечение; дать слово; дать задний ход; дать по шапке… Взять себя в руки; взять быка за рога; взять за горло; взять в оборот… Выйти сухим из воды; выйти в люди; выйти из себя; выйти из терпения…. Держать камень за пазухой; держать себя в руках; держать порох сухим; держать ухо востро…

Урок русского языка в 4-м классе по теме «Разбор глагола по составу. Алгоритм разбора» , по программе «Школа 2100» | Презентация к уроку по русскому языку (4 класс) по теме:

Урок русского языка в 4-м классе по теме

» Порядок разбора глагола по составу.

Знакомство с алгоритмом » с использованием ИКТ.

Учитель Харламова Елена Васильевна.


  1. научить обучающихся разбирать глагол по составу.


  1. развивать умения видеть в слове его части;
  2. учить объяснять условия выбора орфограмм;
  3. воспитывать интерес к родному языку.

Оборудование:   мультимедийная установка.

Проблема:  почему некоторые глагольные суффиксы не входят в основу?

 I.  Языковая разминка.

  1. Запись под диктовку:

                                                         пр.                         пр.

   Умер дождь, умер ветер, умер шумливый,  беспокойный сад. ( К. Паустовский)

—  Какое значение в предложении имеет слово —  умер?

                      (Умер: перестал, закончился; затих)

— Автор  использовал  литературный   прием   олицетворения.

  1. выполнить синтаксический разбор предложения, разбор по членам предл.
  2. соста вить схему.
  3. дать характеристику предложения, ( повест., невоскл., сложное, сост из 3 частей, осложнено однор. чл.)
  1. Разбор по составу прилагательных.

            Шумливый,   беспокойный.

           — Как разбираем по составу прилагательные?  (оконч., корень,  приставка  и суффикс)


  1. Определите форму глаголов:     (1 слайд)







наст.вр., 2л., ед.ч., возвр.ф

н.ф., возвр.ф.


пр.вр., ж.р., ед.ч.

наст.вр., 3-е л., мн.ч., возвр.ф

буд.вр., 2-е л. ед.ч.,

II. Формулирование темы и цели урока.


— Определите по схемам, к каким частям речи относятся слова:

— Подберите слова к схемам.






                             н       ый

— Посмотрите по схемам над каким материалом мы работали ,   я что предстоит узнать?

—  обратите внимание на схемы глаголов, что вызвало удивление?

  — Назовите тему урока и поставьте цели урока.  

                 (слайд 3)

 Тема: Разбор глагола по составу,  Цель: Будем учится разбирать глаголы.

III. Наблюдение по учебнику.
1. Упр. 292. ( Слайд4)

Ученики выписывают глагол роняет.

Образец рассуждения:

Глагол стоит в форме настоящего времени, 3-го лица, единственного числа. На это указывает окончание -eт. Основа слова роня-. Поставлю глагол в неопределенную форму ронять. Глагольный суффикс –я. Выделю его в глаголе. Подберу однокоренные слова: урон, уронить.  Корень -рон-.

Запись: роняет  — гл., наст. вр., 3 л., ед.ч., ронять, роняла.

— Как вы думаете, какая будет основа???

IV.        Работа с памяткой и алгоритмом.

1.        Прочитайте памятку на с. 97. Какие суффик сы входят в основу слова, а какие не входят.

 а (о, и, е, у) — ти (ть),            — ся (сь)|;                 -л —

— Обычно суффиксы  образуют новые слова, но суффиксы  неопредел ф.

–ть,  -ти, -чь, и прошедшего времени  -л  образуют не новые слова, а форму  одного слова.

( вернуться к словам и разобрать!!!!!)

— Давайте смоделируем наше правило с помощью схемы. ( Схема на парте и на доске)

Упр.  доделать по вариантам: 1 в — проглянет, 2в. – скроется.

Составим алгоритм работы.  (Слайд 5)

 С чего мы начали разбор глагола по составу?

 ( Указали форму слова, окончание и суффиксы , которые не входят, основа и т. д.)


2.  Не входят в основу.

3.  Основа.

4.  Корень.

5.  Приставка, суффикс.

2.        Прочитайте порядок разбора глагола по составу (с. 98).

Так ли мы действовали, разбирая  глагол  роняет?

— Чем порядок разбора глагола по составу отличается от разбора
имени существительного?

V.         Самостоятельная работа по учебнику.

1. Упр. 293.        ,        

2. упр. 294

VI.   Рефлексия:

Какое открытие сделали сегодня на уроке ?

VII.  Домашнее задание Д.м. упр. 165  (слайд 6)

Некоторые проблемы методики проведения морфемного анализа в средней школе

Данная статья посвящена некоторым проблемам морфемного анализа в аспекте развития у обучающихся лингвистического мышления. Умение видеть границы между морфемами позволяет быстрее и точнее принимать и обрабатывать языковую информацию. Важнее анализировать такие слова, разбор которых может иметь варианты, позволяет исследовать их семантику и роль морфем в ее формировании, заглянуть в историческую глубину слова.

Ключевые слова: лингвистическое мышление, морфемная структура, морфемный анализ, морфемы

This article is devoted to some problems of morpheme analysis in the aspect of developing linguistic thinking among students. An ability to see the limits between morphemes allows to get and to work up language information more exactly and quicker. It is important to analyze such words which have variants in their analysis, this let study their semantics and the morphemes’ role in its forming, look into historical heart of the word.

Библиографическая ссылка на статью:
Кожарова А.А. Некоторые проблемы методики проведения морфемного анализа в средней школе // Современные научные исследования и инновации. 2016. № 2 [Электронный ресурс]. URL: https://web.snauka.ru/issues/2016/02/64818 (дата обращения: 14.09.2022).

Морфемный анализ вызывает немалые сложности у школьников. Проблема заключается в том, что, действительно, во многих случаях при определении состава морфем конкретных слов трудно принимать однозначные решения. Более того даже словообразовательные словари могут по-разному описывать морфемную структуру одного и того же слова. Происходит это потому, что до сих пор ученые не могут прийти к согласию, какой из двух принципов выделения морфем является ведущим в случае их коллизии – принцип морфологической аналогии или принцип словообразовательной мотивации. Примером этому может служить  известная дискуссия о слове буженина: в [Тихонов, 64] выделяется суффикс ин на основании аналогии с строганина, свинина, баранина, а в [Потиха, 34]  ин интерпретируется как часть корня на том очевидном основании, что слово буженина в современном русском языке немотивированное и непроизводное и элемент бужен без ин ни в каком слове не встречается.

Эти споры – не каприз ученых, а отражение сложности, многоаспектности, эволюционного характера самих языковых фактов, которые естественным образом носителями языка по-разному осмысляются. В  нашем примере, одни русскоговорящие попадают под воздействие закона аналогии и видят в ин суффикс как и в, например, свинина, не задумываясь об отсутствии его словообразовательной поддержки, другие наоборот реагируют прежде всего на отсутствие мотивации и не задумываются об аналогии со многими другими словами с суффиксом ин.

Актуальность   темы статьи заключается в том, что одной из основных задач современной школы является развитие мышления обучающегося, умение находить связи и отношения между явлениями, видеть обусловленность одного факта другим. Морфемный анализ является тем видом упражнений, успешное выполнение которого целиком и полностью зависит от правильного установления словообразовательных отношений.   Нет никакой необходимости в бесконечном, рутинном разборе словообразовательно очевидных слов. Гораздо интереснее анализировать такие слова, разбор которых может иметь варианты, позволяет исследовать их семантику и роль морфем в ее формировании, заглянуть в историческую глубину слова.

Морфемный анализ очень важен и в пользовательском аспекте.  Морфем в языке на несколько порядков меньше, чем слов, поэтому в языках с морфологическим словообразованием, таких как русский, нет никакой необходимости удерживать в памяти большое количество производных слов: чтобы использовать  производное слово достаточно знать значения производящей основы и словообразовательных морфем. Так дед и дедушка, старуха и старушка носители языка легко различают потому, что знают значение морфем дед,  -стар-, – ушк-, – ух-.  Наше языковое сознание в этом смысле устроено, образно говоря, как игрушка конструктор с инструкцией по сборке. В конструкторе из определенного набора деталей по определенным моделям можно собрать большое количество различных конструкций. Язык также состоит из «деталей» (фонем, морфем) и правил их сборки (словообразовательных и синтаксических моделей). Зная морфемы и правила их сборки, можно понимать даже впервые услышанные слова. Так, при проведении эксперимента дети на уроке без труда объяснили значение слова примарситься, хотя признались, что никогда его не слышали.   Они все правильно сказали, что это значит “высадиться на Марс”. Происходит  это потому,  что в их сознании хранится информация о значении каждой из морфем в отдельности и модель словообразования, аналогичная уже известным словам приземлиться, прилуниться, приводниться. Регулярность модели сделала совсем простым понимание нового слова. Это на самом деле замечательный пример, который при обобщении дает ключ к пониманию того, как дети усваивают язык. В языке царствует аналогия и порядок, и все развитие языка – это процесс усиления этого порядка, вытеснения аномальных форм аналогичными (как, например, аномалия волк – волцы была вытеснена аналогией волк – волки). И это существенно облегчает и усвоение, и пользование языком. Конечно, и сейчас в русском языке хватает аномалий (языки не могут меняться быстро), с которыми приходиться мириться как с исключениями, но их несравнимо меньше, чем правильных аналогичных форм. Именно поэтому очень важно сделать осмысленным морфемный анализ, потому что это развивает столь необходимое морфологическое видение слов.

Сложности морфемного анализа также заключаются в вариативности установления мотивационных отношений между производным словом и производящей основой. В группе из 45 обучающихся был проведен эксперимент. Ученикам было предложено разобрать по составу слова дедушка и старушка. 98% испытуемых в обоих словах выделяли суффикс –ушк. Ошибка легко объясняется тем, что школьники не точно устанавливают словообразовательные отношения слова старушка с производящей основой. Они интуитивно мотивировали старушка основой слова старый, ошибочно перескакивая через словообразовательное звено старуха. Важно, чтобы ученики хорошо понимали, почему в слове дедушка суффикс –ушк, а старушка два суффикса –уш  и –к.

Словообразовательные отношения – это отношения мотивации производного слова производящей основой того слова, от которого оно образовано. Есть материальная общность между производной и производящей основой, поскольку производное слово «наследует» производящую основу. Процесс словообразования реализуется присоединением к производящей основе словообразовательного аффикса – материального показателя словообразовательных отношений. В значении производной и производящей основ есть общие семантические компоненты. Например, в дом-домик, лес-лесник имеется общий семантический компонент «дом». Как видно из примера, словообразовательный аффикс –ик – не только показатель словообразовательного звена, но и носитель дополнительной информации. В первом случае он привносит уменьшительно-ласкательное значение, а во втором – значение лица по профессии.

В школе существует два подхода к морфемному анализу слова: формальный и семантический. Формальный подход – это выделение морфем на основе их узнавания, то есть обучающиеся узнают морфему в том, случае, когда они ее встречали в той же позиции, но в других словах. В простых случаях, когда в слове есть один суффикс или приставка, формальный подход дает желаемый результат. Но в сложных случаях, когда в слове два и более суффикса или когда суффикс исторически стал частью корня и произошли изменения границ морфем, формальный подход может привести к ошибке. Например, в слове мешок формально можно выделить суффикс –ок, потому что этот суффикс встречается в других словах и легко узнается школьниками, но это приводит к ошибке, поскольку не учитывается, что произошла утрата мотивации (слово мешок в современном языке не мотивируется основой мех) и в результате корень поглотил суффикс.

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

Алгоритм морфемного анализа может быть следующим:

1) выделить в слове формообразующие аффиксы:

— если слово изменяемое, то выписать несколько форм этого слова, чтобы определить окончание, то есть изменяемую часть слова;

— определить, есть ли в слове формообразующие суффиксы и определить основу слова.

2) установить, является ли основа производной или непроизводной. Например, основа слов дом и лес немотивированная, потому что мы не можем указать производящую основу для этих слов. В этом случае, как правило, основа равна корню (примером исключения, в частности, является отмеченное выше слово буженина, членение которого на морфемы подчиняется действию закона аналогии). Производная основа – это такая основа, для которой мы можем указать производящую основу, которая мотивирует производную. Основа слова домик мотивирована производящей основой дом. Для того чтобы показать, что анализируемая основа является мотивированной, нужно попытаться объяснить значение производного слова через значение производящей основы: домик – это маленький дом.

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

Процесс утраты мотивации может быть связан не с внутриязыковыми причинами, а с внешними (экстралингвистическими). Например,  слово чернила в историческом прошлом было производным, потому что мотивировалось словом черный. Изначально технология изготовления чернил была такова, что они могли быть только черного цвета. Когда чернила стали изготавливать разных цветов, то произошла утрата мотивации.

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

Кроме прагматической задачи правильно разобрать слово, есть еще и гуманитарная цель морфемного анализа – развитие у детей диахронического взгляда на язык, понимания того, что язык живой, развивающийся организм. Это воспитывает бережное и внимательное отношение к истории, которая фиксируется при помощи языка.

Нужно прививать школьникам культуру пользования словарями, помогающими решать практические задачи и расширять лингвистический кругозор. Словообразовательный словарь – это результат глубокого, всестороннего научного исследования словообразовательной структуры слов. Применять такой словарь просто необходимо в случаях, вызывающих сомнения в установлении словообразовательных отношений. При этом учитель должен создавать ситуации, которые вынуждали бы обучающегося обратиться к словарю.

Поскольку морфемный анализ неотъемлемая часть курса русского языка в школе, проводится регулярно на протяжении многих лет, то нужно постоянно, от года к году усложнять материал для анализа. Важно подогревать интерес к морфемному анализу, предлагая для разбора слова, к которым хотелось бы «присмотреться». Как справедливо отмечает Я.Г. Балакай,  «важно не то, чтобы учащиеся бойко членили слова по составу… важно то, чтобы делалось это осмысленно, вдумчиво, аргументированно» [Балакай, 86].

Чем более амбиционными  будут цели учителя, тем больше оснований для интеллектуального развития обучающихся. Методика морфемного анализа и ее практическая реализация  — это перспективная область профессиональной деятельности.

Библиографический список

  1. Балакай А.Г. Некоторые спорные вопросы морфемного анализа в вузе и в школе. «Русский язык в школе». – 1990. № 4. С. 81-86.
  2. Потиха З. А. Школьный словарь строения слов русского языка. – М.: Просвещение, 1999.
  3. Тихонов А.Н. Школьный словообразовательный словарь русского языка. – М.: Культура и традиции, 1996.

Количество просмотров публикации: Please wait

Все статьи автора «Кожарова Анна Араиковна»

Как разобрать по составу слова: прочный|прочная|проч­ное?

Как выполнить морфемный разбор слов: прочный, прочная и прочное?



Ответы (7):



Даже по словам, заданным в вопросе, уже без труда можно определить, что это одно и то же слово, но принадлежащее к разным родам: прочн/ый фундамент (мужской род), прочн/ая ткань (женский род) и прочн/ое основание (средний род).

Эти прилагательные имеют одно лексическое значение (все перечисленные предметы крепкие, их трудно разрушить),

но разные окончания -ый, -ая, -ое (они отделены от основы слова косой чертой).

Теперь постараемся определить основную значимую часть слов, в которой и заключено значение всех трех слов. И не только приведенных, но и других однокоренных, например: прочность, упрочнить, упрочнять, упрочнение, непрочно.

Легко видеть, что корень этих слов прочн-. Так же легко видеть, что все три слова имеют в своем составе только две морфемы: корень прочн- и окончания -ый, -ая, -ое соответственно.

Основа слов — прочн-.



В этом вопросе нужно разобрать по составу слова: прочный, прочная, прочное.

Слово прочный. Основа данного слова ПРОЧН. Слово прочный является прилагательным. Оно состоит из корня ПРОЧН и окончания ЫЙ. Получаем следующую схему: корень-окончание, а именно ПРОЧН — ЫЙ.

Слово прочная. Основа данного слова ПРОЧН. Слово прочная является прилагательным. Оно состоит из корня ПРОЧН и окончания АЯ. Получаем следующую схему: корень-окончание, а именно ПРОЧН — АЯ.

Слово прочное. Основа данного слова ПРОЧН. Слово прочное является прилагательным. Оно состоит из корня ПРОЧН и окончания ОЕ. Получаем следующую схему: корень-окончание, а именно ПРОЧН — ОЕ.

Данные слова однокоренные.


Слово прочный — является прилагательным мужского рода, в единственном числе (во множественном числе будет — прочные), в именительном/винительном падеже.

Произведем разбор по составу слова Прочный:

Подберем для начала несколько однокоренных слов: прочность, прочно, упрочить и тд.

Корень слова -проч-.

Изменим это слово по родам (прочнАЯ, прочнОЕ) или же просклоняем слово по падежам (прочнОГО, к прочнОМУ и тд) и выделим окончание -ый-.

Слово образовано суффиксальным способом, при помощи суффикса -н-.

Основа слова -прочн-.

Прилагательное женского рода, единственного числа прочная разбирается по составу следующим образом:

Корень этого слова -проч- (прочно, упрочить).

Окончанием слова является -ая- (прочнОЙ, к прочнОЙ, прочнУЮ, прочнОЙ и о прочнОЙ).

Выделим еще одну морфему слова — это суффикс -н-.

Основой этого слова является -прочн-.

Слово прочное — является прилагательным среднего рода, единственного числа, в именительном и винительном падеже.

Сделаем разбор по составу слова Прочное:

Корнем слова является -проч-.

Окончанием слова является -ое-.

Суффикс слова -н-.

Основа этого слова -прочн-.



«Прочный, прочная, прочное» отвечают на вопросы — какой?, какая?, какое? значит это прилагательные, мужского, женского, среднего рода.

Сделаем разбор прилагательных по составу:


  • приставка: отсутствует;
  • корень слова: проч;
  • суффикс: н;
  • окончание: ый;
  • основа слова: прочн.


  • приставка: отсутствует;
  • корень слова: проч;
  • суффикс: н;
  • окончание: ая;
  • основа слова: прочн.


  • приставка: отсутствует;
  • корень слова: проч;
  • суффикс: н;
  • окончание: ое;
  • основа слова: прочн.


Прилагательное Прочная стоит в женском роде и окончание выделяется -АЯ, точно так же как в мужском роде окончанием будут -ЫЙ, а в среднем -ОЕ: Прочный фундамент-Прочная дружба-Прочное намерение. Однокоренными словами будут Прочность-Упрочить-Упрочнение-Прочнейший-Прочно. Корень слова ПРОЧ-. Также выделяем суффикс прилагательного -Н-.

Получаем: ПРОЧ-Н-АЯ (ЫЙ,ОЕ) (корень-суффикс-окончание). Основа слова ПРОЧН-.


Прочный, прочная, прочное — в данном случае эти однокоренные прилагательные, определим и другие однокоренные прочный, упрочить, прочность (отличать от существительного порочность), упрочненный.

Корень — проч-, суффикс -н-, Окончания отличаются -ый- прочный дом, -ая- прочная семья, -ое- прочное будущее.


В словах: прочный, прочная, прочное — «проч» — корень, н — суффикс, -ый, -ая, -ое — окончания.

Диктанты по теме «Состав слова» 3 класс

Категория «Русский язык»

Диктанты по русскому языку с грамматическими заданиями для 3 класса — тема «Состав слова»

Категория «Диктанты»

Диктант «Подъём в гору»

Альпинистов часто называют скалолазами. Это смелые, выносливые люди. Им приходится видеть водопады, наблюдать землетрясения, извержения вулканов. Эти спортсмены – умелые пешеходы. Они проходят большие расстояния до горных хребтов, а затем поднимаются вверх. Подъём становится всё круче. Приходится постоянно делать крутые повороты и идти в обход. Отдохнуть можно на бугорке.
Взгляду открылся интересный вид. На утёсе орёл съедал свою добычу. Бедный зайчишка попался ему в лапы. Альпинисты почувствовали жалость к зверьку. 

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 32 318

Категория «Диктанты»

Диктант «Весна»

Весна долго не открывалась. В апреле стояла ясная морозная погода. Днем под лучами солнца тихо таял снег. Вдруг резко потянуло теплым ветром. Окрестности окутались густым молочным туманом. Мутным потоком полились воды. С яростным треском ломались на реке гигантские льдины. Поздно вечером туман ушел. Небо прояснилось. Утром солнце съело тонкий лед. В теплом весеннем воздухе залились чудным хором жаворонки. Высоко в небе пролетели с радостным криком журавли и гуси. Пришла настоящая весна.

Слово в языке и речи / Состав слова


  • 40 902

Категория «Диктанты»

Диктант «Ноябрь»

В ноябре похолодало. Стоит сырая погода. Весь месяц льют дожди. Дует осенний ветер. Шумят в саду деревья.   С берёз и осин листва давно опала. Земля покрыта  ковром  из листьев. Только на дубах желтеют сухие листья.  Тишина в лесу.

Вдруг донеслась весёлая песня. Я оглянулся. На берегу речки сидела птичка. Это запела синичка.

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 44 646

Категория «Диктанты»

Диктант «Подъём в гору»

Альпинистов часто называют скалолазами. Это смелые, выносливые люди. Им приходится видеть водопады, наблюдать землетрясения, извержения вулканов. Эти спортсмены – умелые пешеходы. Они проходят большие расстояния до горных хребтов, а затем поднимаются вверх. Подъём становится всё круче. Приходится постоянно делать крутые повороты и идти в обход. Отдохнуть можно на бугорке. Взгляду открылся интересный вид. На утёсе орёл съедал свою добычу. Бедный зайчишка попался ему в лапы. Альпинисты почувствовали жалость к зверьку.

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 9 858

Категория «Диктанты»

Контрольный диктант «Снеговик»

Стоит чудесный зимний день. Падает легкий снег. Деревья одеты в белые шубки. Спит пруд под ледяной коркой. Яркое солнце на небе.
Выбежала группа ребят. Они стали лепить снеговика. Глазки сделали ему из светлых льдинок, рот и нос из морковок, а брови из угольков. Радостно и весело всем!

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 39 818

Категория «Диктанты»

Диктант «Сова»

Совы – хищные птицы. Они лучшие охотники. У совы мощные когти. Они похожи на зубья капкана. Совы съедают множество мышей. Большинство этих птиц лучше видят вечером или ночью. Дневной свет им мешает. У сов чуткие уши. Они спрятаны на голове под перьями. У ночной птицы мягкие перья на крыльях. Они делают полёт беззвучным. Это помогает при охоте.

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 12 523

Категория «Диктанты»

Диктант «Рассказ мальчика»

Мой дед – лесной сторож. Поздно вечером он шел домой. Вдруг дед услышал вой волков. Дед влез на ель и сел на сук. Волки увидали его и остановились. Наступила темная ночь. Налетел ветер. Закачались ветки дерева. У деда слетела шапка. Голодные волки шапку разорвали в клочья. Утром волки скрылись. Дед спустился с дерева и пошел в сторожку. 

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 9 240

Категория «Диктанты»

Диктант «Зимой»

Был зимний денек. Синичка Зинька прыгала по веткам. Глазок у синички острый. Под корой деревьев она добывала насекомых. Вот Зинька раздолбила дырочку, вытащила букашку и съела. Тут выпрыгнула из снега мышка. Мышка дрожит, вся взъерошились. Она объяснила Зиньке свой страх. Мышка провалилась в медвежью берлогу. Там крепко спали большая медведица и маленькие медвежата. 

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 18 526

Категория «Диктанты»

Диктант «Каток»

Мы живем в селе Морозки. В субботу все ребята вышли делать каток. Падал мягкий снежок. Чудесная стояла погодка. Ребята быстро расчистили площадку. Они залили ее водой. За ночь лед окреп. Утром дети уже катались на гладком льду. Легко бежали коньки по скользкой дорожке. Хорош каток!

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 13 390

Категория «Диктанты»

Диктант «Верные следы»

Шли ребята через лес прямой дорогой. Тропинки замело снегом. Побежали дети по звериным следам и заблудились. Испугались ребята в лесу. Стали кричать и звать на помощь. Молчит зимний лес. Вдруг Никита увидал знакомые следы. Тут пробегала собака. Следы собаки всегда приведут человека к жилью. Так учил мальчика дедушка. Ребятишки направились по следам и вышли на лесную сторожку.

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 20 063

Категория «Диктанты»

Диктант «Дрозд-рябинник»

Дрозд-рябинник – большой любитель рябины. Осенней порой, когда тяжелые гроздья покрывают деревья и гнут их ветки, дрозды большими стаями налетают на рябину. В такие годы рябинники не улетают на зиму с другими дроздами, а остаются на своей северной родине. Кроме рябины, дрозды  поедают можжевельник, чернику, а в весеннее и летнее время года – насекомых. Живут дрозды-рябинники в березовых рощах и в лесу.

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 9 904

Категория «Диктанты»

Диктант «Прогулка в рощу»

Осенью мы всем классом пошли в рощу. Деревья стояли нарядные. Листья, как ковер, лежали на земле и шуршали под ногами. На ветвях рябины висели красные гроздья ягод. Мальчики нашли старое птичье гнездо. Девочки собрали под елью шишки. Из шишек можно сделать забавные игрушки для малышей.

Диктанты 3 класс / Диктанты 3 класс 2 четверть / Состав слова


  • 11 866

Вычисление подобия исходного кода программы по композиции дерева синтаксического анализа и графа вызовов

На этой странице

АннотацияВведениеСвязанные работыЗаключениеБлагодарностиСсылкиАвторское правоСтатьи по теме

В этой статье предлагается новый метод вычисления степени сходства двух исходных кодов программ. Поскольку исходный код программы представлен в виде структурной формы, в предлагаемом методе в качестве меры подобия используются функции ядра свертки. На самом деле исходный код программы содержит два вида структурной информации. Одна — синтаксическая информация, а другая — зависимости вызовов функций, лежащие в программе. Поскольку синтаксическая информация программы выражается в виде ее дерева синтаксического анализа, синтаксическое сходство между двумя программами вычисляется ядром дерева синтаксического анализа. Вызовы функций внутри программы обеспечивают глобальную структуру программы и могут быть представлены в виде графа. Следовательно, сходство вызовов функций вычисляется с помощью ядра графа. Затем оба структурных сходства отражаются одновременно в сравнении исходных кодов программ путем составления дерева синтаксического анализа и ядер графов на основе цикломатической сложности. Согласно экспериментальным результатам на реальном наборе данных для обнаружения плагиата программ, предложенный метод доказал свою эффективность в выявлении сходства между программами. Эксперименты показывают, что плагиатные пары программ обнаруживаются корректно и тщательно предложенным методом.

1. Введение

Многие реальные ресурсы данных, такие как веб-таблицы и шаблоны PowerPoint, обычно представлены в структурной форме для предоставления более систематизированной и обобщенной информации. Поскольку этот тип данных содержит в целом различную и полезную информацию, они часто являются источником информации для приложений интеллектуального анализа данных [1]. Однако в настоящее время существует ряд дублирующих данных из-за характеристик цифровых данных. Это явление делает интеллектуальный анализ таких данных перегруженным. Исходный код программы — это тип данных, который часто дублируется, как веб-таблицы и шаблоны PowerPoint. Поэтому плагиат исходных кодов программ становится одной из самых острых проблем в обучении информатике. Студенты могут сдавать свои программные задания путем плагиата чужой работы без какого-либо понимания предмета или какой-либо ссылки на работу [2]. Однако крайне нецелесообразно выявлять все пары плагиата вручную, особенно когда размер исходных кодов значительно велик. Таким образом, требуется метод удаления таких дубликатов, и первым шагом для этого является автоматическое измерение сходства между двумя исходными кодами.

Исходный код программы является одним из репрезентативных структурированных данных. Хотя исходный код программы выглядит как непрерывная строка, его легко представить в виде структурной формы, то есть дерева синтаксического анализа. Исходный код представляется в виде древовидной структуры после его компиляции с грамматикой для определенного языка программирования. Следовательно, сходство исходных кодов программ должно учитывать их структуру. Во многих предыдущих исследованиях предлагались меры подобия для сравнения исходного кода программ, и большинство из них в той или иной степени отражают структурную информацию [3, 4]. Тем не менее, есть некоторые недостатки мер подобия. Во-первых, они не могут отражать всю структуру исходного кода, поскольку представляют структурную информацию исходного кода в виде структурных признаков, определенных на лексическом уровне. Чтобы преодолеть эту проблему, в некоторых исследованиях структурная информация рассматривается на структурном уровне, таком как дерево синтаксического анализа [5] и граф вызовов функций [6]. Во-вторых, нет исследований, в которых одновременно рассматривались бы дерево синтаксического анализа и граф вызовов, даже несмотря на то, что каждая структура обеспечивает различное структурное представление исходного кода программы. Дерево синтаксического анализа дает относительно локальное структурное представление, в то время как граф вызовов обеспечивает структурное представление высокого и глобального уровня. Поскольку оба представления полезны для обнаружения плагиатных пар исходных кодов программ, мера подобия для сравнения исходных кодов программ должна отражать оба вида структурной информации одновременно.

В этой статье предлагается новый метод вычисления сходства между двумя исходными кодами программ. Предлагаемый метод использует два вида структурной информации, основанной на функциях ядра. Функция ядра — один из известных методов сравнения структурированных данных [7]. Его можно использовать в качестве меры подобия, поскольку он вычисляет скалярное произведение двух элементов [8]. Предлагаемый метод отражает синтаксическую структуру исходного кода программы с использованием ядра дерева разбора [9]. Ядро дерева синтаксического анализа вычисляет сходство между парой деревьев синтаксического анализа. Таким образом, синтаксическая структурная информация исходного кода полностью отражается им в предлагаемом методе. Предлагаемый метод учитывает также динамическую структуру исходного кода с использованием графового ядра [10]. Ядро графа в предлагаемом методе вычисляет значение сходства между парой графов вызовов функций. Поскольку эти два ядра являются экземплярами ядер -свертки Хаусслера [7], они эффективно сравнивают деревья и графы без явного перечисления признаков соответственно.

Каждое ядро ​​создает собственное подобие, основанное на его собственном структурном представлении. Предлагаемый метод включает оба вида структурной информации в сравнение исходного кода программы путем составления ядра дерева синтаксического анализа и ядра графа в составное ядро. Поскольку предлагаемое составное ядро ​​основано на композиции взвешенных сумм, оптимизация весов базовых ядер является важнейшей задачей. В этой статье веса определяются автоматически с учетом сложности исходных кодов. Таким образом, если заданы любые два исходных кода программ, предлагаемый метод может вычислить их сходство.

Предлагаемый метод оценивается на обнаружение плагиата исходного кода с использованием реального набора данных, использованного в работе [5]. Наши эксперименты показывают три важных результата. Во-первых, мера подобия, основанная на ядре дерева синтаксического анализа, более надежна, чем мера, основанная на ядре графа, с точки зрения общей производительности. Во-вторых, чем сложнее исходный код, тем полезнее сходство, основанное на ядре графа, при обнаружении плагиатных пар. Наконец, предложенный метод, который объединяет ядро ​​дерева синтаксического анализа и ядро ​​графа, успешно обнаруживает плагиат исходных кодов реальных программ. Эти результаты доказывают, что структурная информация глобального уровня является важным фактором для сравнения программ и что предложенная мера подобия, которая объединяет синтаксическую и динамическую структурную информацию, дает хорошие результаты для обнаружения плагиата исходного кода программы.

Подводя итог, в этой статье мы делаем следующие выводы. (1) Мы разрабатываем и реализуем меру подобия исходного кода для обнаружения плагиата на основе двух видов структурной информации: синтаксической информации и зависимостей вызовов функций. Благодаря тому факту, что изменение структуры исходного кода сложнее, чем изменение пользовательского словаря, предлагаемый метод является надежным для обнаружения пар плагиата. (2) Чтобы одновременно использовать два вида структурной информации. , мы разрабатываем новый метод комбинирования, основанный на сложности исходного кода. Это делает предлагаемый метод более надежным, даже если мы сравниваем сложные исходные коды.

Остальная часть статьи организована следующим образом. Раздел 2 посвящен смежным исследованиям по сравнению исходного кода программы и обнаружению плагиата исходного кода программы. Раздел 3 знакомит с проблемами обнаружения плагиата исходного кода. Мера подобия, основанная на ядре дерева разбора и ядре графа функциональных вызовов, дана в разделах 4 и 5 соответственно. В разделе 6 предлагается составное ядро, которое объединяет ядро ​​дерева синтаксического анализа и ядро ​​графа. Раздел 7 объясняет экспериментальные настройки и результаты, полученные с помощью предлагаемого метода. Наконец, в разделе 8 делается вывод.

Измерение сходства между двумя объектами является фундаментальным и важным во многих областях науки. Например, в молекулярной биологии часто требуется измерить сходство последовательностей между парами белков. Таким образом, было предложено множество мер подобия, таких как измерения на основе расстояния, включая евклидово расстояние и расстояние Левенштейна, взаимная информация [11], информационный контент с использованием wordNet [12] и сходство на основе цитирования [13]. Кроме того, меры были применены к различным приложениям, таким как поиск информации [14, 15] и кластеризация [16], как их основная часть.

Мера подобия для исходных кодов интересовала в течение долгого времени. Большинство ранних исследований основано на сходстве подсчета атрибутов [17, 18]. Подобие представляет программу как вектор различных элементов, таких как количество операторов и операндов. Затем для обнаружения плагиатных пар обычно используется сходство векторов. Однако производительность этого подхода относительно низкая по сравнению с другими методами, учитывающими структуру исходных кодов, поскольку этот подход использует только информацию абстрактного уровня.

Чтобы преодолеть недостатки подхода, основанного на подсчете атрибутов и метрике, некоторые исследования включают структурную информацию исходного кода в свою меру подобия. В общем случае структура исходных кодов представляет собой дерево или граф. Из-за того, что исходный код компилируется в синтаксическую структуру, как описано грамматикой языка программирования, в некоторых исследованиях использовался алгоритм сопоставления деревьев для вычисления сходства между исходными кодами [4, 19]. Однако алгоритм представляет исходный код в виде строки, содержащей определенную структурную информацию, поэтому он не может отразить всю структуру исходного кода в мере подобия. С другой стороны, в некоторых других исследованиях использовались знания, полученные из топологии исходных кодов. Хорвиц впервые применил графовые структуры для сравнения двух программ [3] и определил, какие компоненты изменяются от одной к другой, на основе графа зависимостей программы [20]. Лю и др. также использовал граф зависимостей программы для представления исходного кода и принял упрощенную проверку изоморфизма подграфа для эффективного сравнения двух исходных кодов [21]. Каммер создал инструмент обнаружения плагиата для языка Haskell [6]. Сначала он извлек граф вызовов из исходного кода. Узлы на графике — это функции, а ребро указывает на то, что одна функция вызывает другую функцию. Затем он преобразовал граф в дерево для эффективного сравнения исходных кодов. Наконец, он применил расстояние редактирования дерева на основе — и алгоритм изоморфизма дерева для сравнения исходных кодов. Однако при таком подходе теряется много информации, лежащей на графе. так как граф превращается в дерево. Лим и др. предложил метод обнаружения плагиата Java-программ посредством анализа путей потока байт-кодов Java [22]. Поскольку поток программы представляет собой последовательность основных блоков при выполнении программы, они попытались выровнять пути потока, используя алгоритм полуглобального выравнивания, а затем обнаружили пары плагиата исходного кода программы. Че и др. также пытались обнаружить плагиат бинарной программы (исполняемого файла) [23]. Они построили первые A-CFG (график потока управления, помеченный API), который представляет собой функциональную абстракцию программы, а затем генерирует вектор предопределенного измерения из A-CFG с использованием интерфейса прикладного программирования Microsoft Development Network (MSDN API), чтобы избежать вычислительной сложности . Наконец, они использовали алгоритм случайного блуждания (ранжирования страниц) для вычисления сходства между программами. К сожалению, этот подход нельзя применить к другим языкам, не имеющим MSDN API. В последнее время в некоторых исследованиях для измерения сходства использовались стоп-слова-граммы [24] и тематическая модель [25].

В Интернете доступно несколько средств обнаружения плагиата исходного кода программы. Большинство из них используют токенизацию строк и алгоритм сопоставления строк для измерения сходства между исходными кодами. Пречелт и др. предложил JPlag. Это система, которую можно использовать для обнаружения плагиата исходных кодов, написанных на C, C++, Java и Scheme [26]. Сначала он извлекал токены из исходных кодов, а затем сравнивал токены из каждого исходного кода, используя алгоритм Karp-Rabin Greedy String Tiling. Еще одна широко используемая система обнаружения плагиата — 9.0029 MOSS (Measure Of Software Similarity), предложенный Айкеном [27]. Он также основан на алгоритме сопоставления строк. Он делит программы на -граммы, где -грамма — это непрерывная подстрока длины . Затем сходство определяется количеством одинаковых -граммов, используемых программами. Одной из современных и хорошо известных систем обнаружения плагиата является CCFinder, предложенная Kamiya et al. [28]. Он использует как метрику подсчета атрибутов, так и информацию о структуре. Исходный код преобразуется в набор нормализованных последовательностей токенов по собственным правилам преобразования. Правила преобразования создаются вручную для каждого языка, чтобы выразить структурные характеристики языков. Затем нормализованные токены сравниваются для выявления пар клонов в исходных кодах. Они показали относительно хорошую производительность и в некоторой степени использовали структурную информацию, но она не полностью отражает структурную информацию исходных кодов в своей мере подобия.

Предлагаемый в этой статье метод расширяет ядерный метод, предложенный Son et al. [5]. Они сравнили структуру исходных кодов, напрямую используя функцию ядра. Они использовали ядро ​​дерева синтаксического анализа, в частности [9], своего рода ядра -свертки [7], для сравнения древовидной структуры исходных кодов. По сравнению с этой работой предлагаемый метод дополнительно включает информацию о вызове функции. Функциональные вызовы являются одной из важных структурных данных при сравнении исходных кодов. Основная проблема Son et al. заключается в том, что они сосредоточены только на синтаксической структурной информации, которая является локальной и статической. С другой стороны, информация о вызове функции обеспечивает глобальное представление о выполнении исходного кода. Таким образом, плагиатные пары исходных кодов обнаруживаются более точно, учитывая не только синтаксическую структуру, но и информацию о вызове функции.

3. Обнаружение плагиата исходного кода программы

Обнаружение плагиата для исходных кодов программ, также известное как обнаружение плагиата программирования, направлено на обнаружение пар исходного кода с плагиатом среди набора исходных кодов. Обнаружение плагиата в исходном коде обычно состоит из трех шагов, как показано на рис. 1. Первый шаг — это этап предварительной обработки, при котором из исходного кода извлекаются такие функции, как токены и деревья синтаксического анализа. На втором этапе вычисляется попарное сходство с извлеченными функциями и мерой сходства. Поэтому значения сходства среди всех пар записываются в матрицу сходства. Наконец, группы исходных кодов, которые с наибольшей вероятностью могут быть плагиатом, выбираются в соответствии с их значениями сходства.

Формально пусть — набор исходных кодов. Обнаружение плагиата направлено на создание списка плагиатных исходных кодов на основе сходства между и . Если сходство пары превышает заранее заданный порог, пара определяется как плагиат. Таким образом, для исходного кода набор плагиатных исходных кодов определяется как

Мера сходства определяется типом информации, извлеченной из исходных кодов. Исходный код содержит два вида информации: лексическую и структурную информацию. Лексическая информация соответствует переменным и зарезервированным словам, например 9.0029 public , для и для . Этот словарь состоит из большого набора редко встречающихся определяемых пользователем слов (переменных) и небольшого набора часто встречающихся слов (зарезервированных слов). С другой стороны, структурная информация соответствует структуре, которая определяется зарезервированными словами. Среди них структурная информация является более важной подсказкой для обнаружения плагиата, поскольку токены могут быть легко преобразованы в другие токены без понимания предмета исходного кода. Поэтому в данной статье основное внимание уделяется структурной информации. Обратите внимание, что исходная программа имеет два вида структурной информации. Одна представляет собой синтаксическую структуру, которая обычно выражается в виде дерева синтаксического анализа, а другая представляет собой структуру графа вызовов функций.

4. Мера сходства исходных кодов на основе ядра дерева синтаксического анализа
4.1. Исходный код в виде дерева

Исходный код программы естественно представить в виде дерева синтаксического анализа, каждый узел которого обозначает переменные, зарезервированные слова, операторы и т.д. На рис. 2 показан пример дерева синтаксического анализа, извлеченного из кода Java в блоке 1 (это дерево синтаксического анализа немного отличается от дерева синтаксического анализа, используемого в Son et al. [5]. Это связано с тем, что в этом документе используется более поздняя версия грамматики Java). бумага). Код Java во вставке 1 реализует последовательность Фибоначчи. Из-за недостатка ширины бумаги на рисунке 2 показана только одна функция,   rFibonacci,   , в то время как в блоке 1 существует пять функций. Как показано в этом алгоритме, дерево разбора из простого исходного кода может быть очень большим и глубоким. -укорененный.

В этой статье мы используем ANTLR (еще один инструмент для распознавания языка) (http://www.antlr.org/) для извлечения дерева синтаксического анализа из исходного кода. ANTLR , предложенный Парром и Куонгом, представляет собой языковой инструмент, обеспечивающий основу для построения распознавателей, интерпретаторов, компиляторов и трансляторов из грамматических описаний [29]. С помощью ANTLR и грамматики языка можно легко построить синтаксический анализатор дерева, который переводит исходный код в дерево синтаксического анализа.

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

4.2. Ядро дерева синтаксического анализа

Ядро дерева синтаксического анализа — это ядро, предназначенное для сравнения древовидных структур, таких как деревья синтаксического анализа предложений естественного языка. Это ядро ​​отображает дерево синтаксического анализа в пространство, охватываемое всеми поддеревьями, которые могут появиться в дереве синтаксического анализа. Явное перечисление всех поддеревьев вычислительно невозможно, поскольку количество поддеревьев увеличивается экспоненциально по мере роста размера дерева. Коллинз и Даффи предложили метод вычисления скалярного произведения двух деревьев без необходимости перечисления всех поддеревьев [9]. ].

Позвольте быть всем поддеревьям в дереве синтаксического анализа. Затем можно представить в виде вектора, где частота в дереве синтаксического анализа. Функция ядра между двумя деревьями синтаксического анализа и определяется как и определяется как где и все узлы в деревьях и . Индикаторная функция равна 1, если корнем является узел, и 0 в противном случае. это функция, которая определяется как Эта функция может быть вычислена за полиномиальное время, используя следующее рекурсивное определение. (i) Если продукты в и различны, (ii) Если оба и являются предтерминалом, (iii) В противном случае функция может быть определена следующим образом:  где — количество потомков узла в дереве.

Так как производство в и одинаково, также равно . Здесь обозначает th дочерний узел . Этот рекурсивный алгоритм основан на том факте, что все поддеревья с корнями в определенном узле могут быть построены путем объединения поддеревьев с корнями в каждом из его потомков.

4.3. Модифицированное ядро ​​дерева синтаксического анализа

Ядро дерева синтаксического анализа показало хорошую производительность для деревьев синтаксического анализа естественного языка, но оно плохо работает для сравнения исходного кода программы из-за двух проблем. Первая проблема — асимметричное влияние изменений узла. Дерево синтаксического анализа из исходного кода, как правило, намного больше и глубже, чем из предложения на естественном языке. Следовательно, изменения вблизи корневого узла отражались чаще, чем изменения вблизи листовых узлов. Второй проблемой является последовательность поддеревьев. Исходное ядро ​​дерева синтаксического анализа подсчитывает последовательность поддеревьев, учитывая их порядок. Однако порядок двух подструктур в исходном коде не имеет смысла в языках программирования.

Сон и др. предложил модифицированное ядро ​​дерева синтаксического анализа, чтобы справиться с этими проблемами [5]. Чтобы решить первую проблему, они ввели коэффициент затухания и порог, контролирующие влияние больших поддеревьев. Коэффициент затухания масштабирует относительную важность поддеревьев по их размеру. По мере увеличения глубины поддерева значение ядра поддерева уменьшается на , где — глубина поддерева. Кроме того, ограничение максимальной глубины возможных поддеревьев установлено как , чтобы можно было уменьшить влияние больших поддеревьев. Вторая проблема решается путем изменения функции в (7), чтобы игнорировать порядок двух узлов.

С коэффициентом затухания и порогом рекурсивные правила ядра дерева синтаксического анализа изменяются следующим образом. (i) Если и различны, (ii) Если оба и являются терминалами или текущая глубина равна , Уравнение (7 ) нельзя использовать с этими новыми рекурсивными правилами, так как количество дочерних узлов может быть разным в и . Таким образом, мы принимаем максимальное сходство между дочерними узлами. В результате функция в (7) принимает вид где множество дочерних узлов .

Ядро дерева разбора с измененной функцией не удовлетворяет условию Мерсера. Однако многие функции, не удовлетворяющие условию Мерсера [30, 31], хорошо работают при вычислении подобия [32]. Наконец, это ядро ​​дерева синтаксического анализа используется в качестве меры подобия в (1) для синтаксического структурного сравнения исходных кодов.

5. Мера сходства исходных кодов на основе ядра графа

1. Исходный код в виде графика

В последнее время исходные коды программ пишутся с использованием объектно-ориентированных концепций и нескольких методов рефакторинга, так что коды становятся все более и более модульными на функциональном уровне. Поскольку исходный код кодирует логику программы для решения проблемы, поток выполнения на функциональном уровне является одним из важных факторов для идентификации исходного кода. Следовательно, этот поток на функциональном уровне следует рассматривать для сравнения исходных кодов.

Одним из возможных представлений потока на уровне функций является граф вызовов функций, который представляет зависимости между функциями в программе. Пусть будет исходным кодом. Тогда граф вызовов функции представляет собой ориентированный граф, извлеченный из , где функция в . Таким образом, число функций в . представляет собой набор ребер, и каждое ребро представляет отношение зависимости между функциями. То есть ребро, соединяющее узлы и подразумевающее, что функция вызывает другую функцию. Вес ребра равен

На рис. 3 показан пример графа вызовов функций, извлеченный из кода Java во вставке 1. Этот код содержит пять функций, включая   main. Во-первых,   main   вызывает   rFibonacci   и   iFibonacci   по порядку. Поскольку   rFibonacci   — рекурсивная функция, она вызывает сама себя. iFibonacci  вызывает две функции,  initOne   и sum,   для инициализации переменной и получения суммы. Наконец,   main  вызывает println  для вывода результатов.

Для извлечения графа вызовов из исходного кода используется подход, основанный на правилах. Простые правила используются для нахождения отношения вызывающий-вызываемый из дерева синтаксического анализа. Например, в Java правило «, если    ‘выражение   (expressionList)’ найдено, тогда   выражение   является именем вызываемой функции» используется для поиска поддеревьев из дерева разбора. Затем имена функций и параметры извлекаются из соответствующих поддеревьев. Узлы для извлеченных имен функций подключаются к вызывающему узлу.

График вызовов функций программы показывает, как программа выполняется на функциональном уровне и как функции связаны друг с другом. Поскольку поток программы достаточно уникален в зависимости от задачи, сходство между двумя источниками может быть рассчитано с использованием потоков программ. Поскольку этот поток представлен в виде графа вызовов функций, ядро ​​графа является лучшим методом для сравнения графов вызовов функций. Он показал хорошие результаты в нескольких областях, включая биологию и анализ социальных сетей.

5.2. Ядро графа

Ядро графа — это ядро, предназначенное для сравнения структур графов. Подобно ядру дерева синтаксического анализа, граф отображается в пространство признаков, натянутое их подграфами в ядре графа. Интуитивным свойством ядра графа является изоморфизм графа, определяющий топологическую идентичность. Согласно Гертнеру и соавт. [10], однако так же сложно, как решить, изоморфны ли два графа, вычислить любое полное ядро ​​графа с инъективной функцией отображения для всех графов, где изоморфизм графов является NP-полной задачей [33]. Таким образом, большинство ядер графов фокусируются на альтернативном представлении признаков графов.

Ядро графа случайного блуждания — одно из наиболее широко используемых ядер графа. Он использует все возможные случайные блуждания в качестве признаков для графиков. Позвольте быть множество всех возможных случайных блужданий и обозначает множество всех возможных блужданий с ребрами в графе. Для каждого случайного блуждания, длина которого равна , соответствующая функция отображения признаков графа задается как где — вес для длины , и — th метка случайного блуждания и , соответственно. Функция ядра между двумя графиками и , обозначаемая , может быть определена как

Гертнер и др. предложил подход для вычисления всех случайных блужданий в пределах двух графов без явного перебора всех случайных блужданий [10]. Граф прямого произведения двух графов и , обозначаемый где его набор узлов и его набор ребер, определяется следующим образом: где метка узла и метка ребра между узлом и узлом . На основе графа прямого произведения можно рассчитать ядро ​​случайного блуждания. Обозначим через матрицу смежности прямого произведения . С весовым коэффициентом в (13) можно переписать как Это ядро ​​случайных блужданий можно вычислить с помощью уравнения Сильвестра или метода сопряженных градиентов, где — количество узлов [34].

5.3. Модифицированное ядро ​​графа

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

Боргвардт и др. модифицировал ядро ​​случайных блужданий для сравнения неидентичных меток, изменив граф прямого произведения, включив в него все пары узлов и ребер [35]. Предположим, что узлы сравниваются ядром узла, а ребра сравниваются ядром ребра kedge. То есть вычисляет сходство между двумя метками по узлам и , а также вычисляет сходство между двумя ребрами и . С этими двумя ядрами ядро ​​случайного блуждания между двумя графами вызовов функций и теперь определяется как где

Если это модифицированное ядро ​​случайного блуждания используется для сравнения исходного кода, необходимо определить ядро ​​узла и ядро ​​пограничного уровня. Обратите внимание, что метки ребер в графе вызовов функций являются двоичными значениями по (11). Таким образом, он просто предназначен для сравнения двоичных значений. Простейшая форма for — это функция, которая возвращает 1, когда имеет похожие шаблоны строк, и 0 в противном случае. То есть он возвращает 1, если расстояние между и меньше предопределенного порога. В этой статье мы просто используем расстояние Левенштейна в качестве расстояния и устанавливаем порог 0,5.

Модифицированное ядро ​​случайного блуждания также можно вычислить с помощью (15). Однако матрица смежности прямого произведения должна быть изменена как где является краткой формой , а ребра и принадлежат и , соответственно. Как и в ядре дерева синтаксического анализа, это ядро ​​модифицированного графа используется для сравнения исходных кодов в качестве меры сходства в (1).

6. Мера сходства для исходных кодов, основанных на составном ядре

Модифицированное ядро ​​дерева синтаксического анализа управляет синтаксической структурной информацией, тогда как модифицированное ядро ​​графа учитывает высокоуровневую топологическую информацию исходных кодов. Чтобы использовать оба вида информации, требуется композиция двух ядер. Кристианини и Шоу-Тейлор доказали, что новое ядро ​​можно получить, объединив несколько существующих ядер с некоторыми свойствами замыкания, такими как взвешенная сумма и умножение [36]. Среди различных свойств замыкания в этой статье используется взвешенная сумма, поскольку она проста и широко используется.

Перед объединением двух ядер ядра должны быть нормализованы, поскольку модифицированное ядро ​​дерева синтаксического анализа и модифицированное ядро ​​графа не связаны. Поэтому в их составе одно ядро ​​может доминировать над другим. Чтобы убрать этот эффект, ядра сначала нормализуются. Когда задано ядро, его нормализованное ядро ​​определяется как Следовательно, ограничено между 0 и 1. То есть .

Наше составное ядро ​​состоит из ядра нормализованного модифицированного дерева синтаксического анализа и ядра нормализованного модифицированного графа. То есть составное ядро, , для заданных двух исходных кодов и определяется как где — вес смешивания между двумя ядрами. и – деревья разбора, извлеченные из исходных кодов и , соответственно, и – графы вызовов из и , соответственно. Чем больше, тем значительнее. С другой стороны, по мере того, как значение становится маленьким, ядро ​​графа становится более значимым, чем ядро ​​дерева синтаксического анализа . Это составное ядро ​​используется в качестве окончательной меры подобия в (1).

Ядро дерева синтаксического анализа сравнивает исходные коды с представлением локального уровня , поскольку оно основано на сравнении поддеревьев. Большинство исходных кодов с плагиатом изменяют небольшую часть исходного кода. Таким образом, ядро ​​дерева синтаксического анализа в целом показало хорошие результаты. Однако он не отражает потока программы, который является динамической структурной информацией. Ядро графа, с другой стороны, вычисляет сходство с точки зрения динамического представления высокого уровня . Таким образом, когда исходный код состоит из нескольких функций, графовое ядро ​​обеспечивает приемлемую производительность. В результате должна определяться сложность исходных кодов, поскольку это параметр для управления относительной важностью между ядром дерева синтаксического анализа и ядром графа.

Существует множество методов измерения сложности исходного кода. Одним из широко используемых методов является цикломатическая сложность, предложенная Маккейбом [37]. Цикломатическая сложность — это теоретико-графовая количественная метрика, измеряющая количество путей в исходном коде. Он просто рассчитывается с использованием графа потока управления исходного кода, где узлы графа соответствуют объектам исходного кода, а (направленное) ребро между двумя узлами подразумевает отношение зависимости между объектами. Учитывая граф потока управления исходного кода, цикломатическая сложность исходного кода определяется как где число ребер графа, количество узлов и количество связанных компонентов. Чем он больше, тем сложнее исходный код.

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

Пусть и цикломатическая сложность двух исходных кодов и , соответственно. Так как это вес двух нормализованных ядер, он должен нормализоваться между 0 и 1. Сигмоидальная функция определена для всех действительных входных значений и возвращает положительное значение между 0 и 1. Таким образом, сигмоидальная функция принимается для (20) , и определяется как где возвращает минимальное значение между и . Согласно (22), с ростом цикломатической сложности также увеличивается. должно быть 0,5, когда цикломатическая сложность исходного кода равна 25. Это указывает на то, что, когда цикломатическая сложность исходного кода равна 25, ядро ​​дерева синтаксического анализа и ядро ​​графа имеют одинаковую важность в составном ядре. Ряд приложений для анализа исходного кода рассматривает исходные коды, цикломатическая сложность которых превышает 25, как сложные коды (http://msdn.microsoft.com/en-us/library/ms182212.aspx). Таким образом, мы устанавливаем 25 как точку равенства важности между ядром дерева разбора и ядром графа.

7. Эксперименты
7.1. Experimental Settings

Для экспериментов тот же набор данных в работе Son et al. [5]. Этот набор данных собран из реальных заданий по программированию классов Java, выполненных студентами бакалавриата в период с 2005 по 2009 год. В таблице 1 показана простая статистика набора данных. Общее количество заданий по программированию составляет 36, а количество представленных исходных кодов составляет 555 для 36 заданий. Таким образом, среднее количество исходников на одно задание составляет 15,42.

На рис. 4 показана гистограмма исходных кодов по строкам. По оси — количество строк программы, а по оси — количество исходных кодов. Как показано на этом рисунке, около 75% исходных кодов содержат менее 400 строк. Минимальное количество строк исходного кода — 49, максимальное — 2863. Среднее количество строк в коде — 305,07.

В нашем наборе данных минимальное количество функций в программе равно 12, а максимальное — 447. Программы с большим количеством программ — это программы рисования с любыми кнопками. В программах рисования учащиеся должны установить макет вручную с помощью необработанных функций, таких как setBounds. Таким образом, программы рисования имеют ряд функций. Среднее количество функций — 64,27.

Два аннотатора создали золотой стандарт для этого набора данных. Они исследовали все исходные коды и вручную отметили плагиат. Чтобы измерить надежность и достоверность аннотаторов, измеряется каппа-соглашение Коэна [38]. Каппа-соглашение аннотаторов соответствует категории «почти идеальное согласие». Только те пары, которые оба аннотатора оценивают как пары с плагиатом, считаются настоящими парами с плагиатом. Всего 175 пар помечены как плагиат.

В качестве меры оценки используются три показателя: точность, полнота и -мера. Они рассчитываются следующим образом:

Для оценки предлагаемого метода используется несколько базовых систем. Его сравнивают с JPlag и CCFinder. Во всех экспериментах для ядра дерева синтаксического анализа пороговое значение глубины поддерева установлено равным 3, а коэффициент затухания равен 0,1. Фактор затухания ядра графа эмпирически установлен равным 0,1. в (21) устанавливается равным 1, потому что каждый исходный код в нашем наборе данных представляет собой одну программу.

7.2. Экспериментальные результаты

Перед оценкой эффективности обнаружения плагиата мы сначала исследуем взаимосвязь между количеством строк исходного кода и цикломатической сложностью. Это исследование пытается показать, что (22) выполнимо. Поскольку определяется цикломатической сложностью, ожидается, что она будет пропорциональна цикломатической сложности. На рис. 5 показан график разброса между количеством строк и цикломатической сложностью. Как показано на этом рисунке, они сильно коррелируют друг с другом в нашем наборе данных. Коэффициент корреляции Пирсона равен 0,714. Этот результат означает, что в (22) можно установить пропорциональную цикломатической сложности.

Чтобы увидеть влияние порога в (1) в нашем методе, производительность измеряется в соответствии со значениями . На рис. 6 показана производительность предлагаемого метода для различных . По мере увеличения точность также увеличивается, а полнота немного уменьшается. Наилучшие характеристики достигаются при 0,87 меры. Таким образом, используется во всех приведенных ниже экспериментах.

На рис. 7 предложенный метод сравнивается с различными ядрами по количеству строк исходного кода. На этом рисунке по оси -количество строк исходного кода, а по оси -среднее значение. Как показано на этом рисунке, исходное ядро ​​графа показывает наихудшую производительность. Поскольку он использует только структуру графа вызовов функций, он часто не может вычислить сходство между исходными кодами. Например, предположим, что есть два исходных кода. В одном исходном коде   main   вызывает функцию    add,   and   add    вызывает другую функцию  multiple. В другом исходном коде   main   вызовы   умножаются и   умножаются   вызовы   добавляются. Эти два исходных кода одинаковы для ядра графа, поскольку ядро ​​графа игнорирует информацию о метках. Без меток эти два графика идентичны. С другой стороны, модифицированное ядро ​​графа использует информацию о метках. В результате достигается лучшая производительность, чем у ядра графа.

Ядро дерева синтаксического анализа обеспечивает более высокую производительность, чем другие методы, для исходных кодов с менее чем 300 строками. Когда количество строк в исходных кодах невелико, плагиат кода часто делается путем локального изменения исходного кода. Таким образом, ядро ​​дерева синтаксического анализа точно обнаруживает плагиатные пары для кодов с небольшим количеством строк. Когда исходный код содержит более 300 строк, модифицированное ядро ​​графа показывает немного лучшую производительность, чем ядро ​​дерева синтаксического анализа. Этот результат подразумевает, что структурная информация высокого уровня является еще одним фактором для сравнения (больших) исходных кодов, и модифицированное ядро ​​графа может хорошо отражать эту структурную информацию.

Предлагаемый метод, сочетающий ядро ​​дерева синтаксического анализа и модифицированное ядро ​​графа, обеспечивает наилучшую производительность для всех исходных кодов, кроме строковых. Поскольку цикломатическая сложность исходных кодов со строками близка к 25, предлагаемый метод в равной степени отражает ядро ​​дерева синтаксического анализа и ядро ​​модифицированного графа. Таким образом достигается средняя производительность ядер. Из-за цикломатической сложности исходных кодов на предлагаемый метод больше влияет ядро ​​дерева разбора, когда исходный код небольшой. Если исходный код большой, эффект ядра графа больше, чем эффект ядра дерева синтаксического анализа. Из результатов можно сделать вывод, что предлагаемый метод эффективно учитывает не только структурную информацию локального уровня, но и структурную информацию высокого уровня.

Окончательная -мера обнаружения плагиата исходного кода программы приведена в таблице 2. Предлагаемый метод показывает наилучшую -меру по сравнению с другими ядрами или системами с открытым исходным кодом для выявления плагиата. Разница -measure составляет 0,29 по сравнению с JPlag, 0,17 по сравнению с CCFinder, 0,08 по сравнению с модифицированным графом и 0,05 по сравнению с модифицированным ядром дерева синтаксического анализа. Этот результат означает, что для обнаружения плагиата исходного кода мера сходства в (1) должна одновременно учитывать не только синтаксическую структурную информацию, но и структуру динамического вызова.

8. Заключение

В этой статье мы предложили новый метод сравнения исходного кода программы. Предлагаемый метод вычисляет сходство между двумя исходными кодами по составу двух видов структурной информации, извлеченной из исходных кодов. То есть метод использует как синтаксическую информацию, так и динамическую информацию. Синтаксическая информация, обеспечивающая представление структуры на локальном уровне, включена в дерево синтаксического анализа. Чтобы сравнить деревья синтаксического анализа, в этой статье используется специализированное ядро ​​дерева для деревьев синтаксического анализа исходных кодов. Динамическая информация, содержащаяся в графе вызовов функций, дает структурное представление высокого и глобального уровня. Ядро графа с именами функций рассмотрения принято для отражения структуры графа. Наконец, предлагаемый метод использует составное ядро ​​из ядер для использования обоих видов информации. Кроме того, веса ядер в составном ядре автоматически определяются цикломатической сложностью.

В экспериментах по обнаружению плагиата исходного кода программы Java на реальном наборе данных показано, что предложенный метод превосходит существующие методы в обнаружении плагиатных пар. В частности, эксперименты с различным количеством строк показывают, что предложенный метод всегда хорошо работает независимо от размера исходных кодов.

Одним из преимуществ предложенного метода является то, что его можно использовать с другими языками, такими как C, C++ и Python, даже если эксперименты проводились только с Java. Поскольку для предлагаемого метода требуются только деревья синтаксического анализа и графы вызовов функций исходных кодов, его можно применять к любым другим языкам, если доступен синтаксический анализатор для этих языков. Все виды информации о предлагаемом методе доступны по адресу http://ml.knu.ac.kr/plagiarism.

Конфликт интересов

Авторы заявляют об отсутствии конфликта интересов в отношении публикации данной статьи.


Это исследование было поддержано проектом BK21 Plus (Программа развития человеческих ресурсов SW для поддержки умной жизни), финансируемым Министерством образования, Школа компьютерных наук и инженерии, Национальный университет Кёнпук, Корея (21A20131600005), и Программа исследований и разработок в области ИКТ MSIP/IITP (10044494, WiseKB: саморазвивающаяся база знаний и платформа рассуждений на основе больших данных).

  1. J.-W. Сын и С.-Б. Парк, «Распознавание веб-таблиц с композицией богатой структурной и содержательной информации», Applied Soft Computing , vol. 13, нет. 1, стр. 47–57, 2013 г.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  2. Д. Л. Маккейб, «Обман среди студентов колледжей и университетов: взгляд Северной Америки», International Journal for Educational Integrity , vol. 1, нет. 1, стр. 1–11, 2005.

    Посмотреть по адресу:

    Google Scholar

  3. С. Хорвиц, «Выявление семантических и текстовых различий между двумя версиями программы», в Трудах конференции ACM SIGPLAN по разработке и реализации языков программирования , стр. 234–245, 1990.

    Посмотреть по адресу:

    Google Scholar

  4. В. Ян, «Выявление синтаксических различий между двумя программами», Программное обеспечение: практика и опыт , том. 21, нет. 7, стр. 739–755, 1991.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  5. Ж.-В. Сын, Т.-Г. Но, Х.-Дж. Сонг и С.-Б. Парк, «Приложение для обнаружения плагиата исходного кода на основе ядра дерева синтаксического анализа», Engineering Applications of Artificial Intelligence , vol. 26, нет. 8, стр. 1911–1918, 2013.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  6. М. Л. Каммер, Обнаружение плагиата в программах Haskell с использованием сопоставления графа вызовов [M.S. диссертация] , Утрехтский университет, 2011.

  7. Д. Хаусслер, «Ядра свертки на дискретных структурах», Tech. Представитель UCS-CRL-99-10, Калифорнийский университет, Санта-Крус, Калифорния, США, 1999 г.

    Посмотреть по адресу:

    Google Scholar

  8. Б. Шолкопф, К. Цуда и Дж.-П. Vert, Kernel Methods in Computational Biology , MIT Press, 2004.

  9. М. Коллинз и Н. Даффи, «Ядра свертки для естественного языка», в Достижения в системах обработки нейронной информации , стр. 625–632, 2001.

    Посмотреть по адресу:

    Google Scholar

  10. Т. Гертнер, П. Флах и С. Врубель, «О графовых ядрах: результаты твердости и эффективные альтернативы», в Proceedings of the 16th Annual Conference on Learning Theory , стр. 129–143, август 2003 г. 28-го ежегодного собрания Ассоциации компьютерной лингвистики (ACL ’90) , стр. 268–275, Страудсбург, Пенсильвания, США, июнь 1990 г.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  11. П. Резник, «Использование информационного содержания для оценки семантического сходства в таксономии», в Proceedings of the 13th International Joint Conference on Artificial Intelligence , стр. 448–453, 1995.

    Посмотреть по адресу:

    Google Scholar

  12. Б. Гипп, Н. Меушке и К. Брайтингер, «Обнаружение плагиата на основе цитирования: осуществимость в крупномасштабном научном корпусе», Журнал Ассоциации информационных наук и технологий , том. 65, нет. 8, стр. 1527–1540, 2014.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  13. Г. Варелас, Э. Вутсакис, П. Рафтопулу, Э. Г. Петракис и Э. Э. Милиос, «Методы семантического подобия в wordnet и их применение для поиска информации в Интернете», в Proceedings of 7th Annual ACM. Международный семинар по веб-информации и управлению данными , стр. 10–16, 2005 г.

    Посмотреть по адресу:

    Google Scholar

  14. К. Уильямс, Х.-Х. Чен и С. Л. Джайлс, «Классификация и ранжирование результатов поисковых систем как потенциальных источников плагиата», в Proceedings of the ACM Symposium on Document Engineering , стр. 97–106, Форт-Коллинз, Колорадо, США, сентябрь 2014 г.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  15. Р. А. Джарвис и Э. А. Патрик, «Кластеризация с использованием меры сходства на основе общих ближайших соседей», Транзакции IEEE на компьютерах , том. 22, нет. 11, стр. 1025–1034, 1973.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  16. К. Дж. Оттенштейн, «Алгоритмический подход к обнаружению и предотвращению плагиата», Бюллетень ACM SIGCSE , том. 8, нет. 4, стр. 30–41, 1976.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  17. М. Холстед, Elements of Software Science , Elsevier, 1977.

  18. И. Д. Бакстер, А. Яхин, Л. Моура, М. Сант-Анна и Л. Бир, «Обнаружение клонов с использованием абстрактных синтаксических деревьев», в Трудах Международной конференции IEEE по обслуживанию программного обеспечения (ICSM ’98). ) , стр. 368–377, ноябрь 1998 г.

    Просмотр по адресу:

    Google Scholar

  19. Дж. Ферранте, К. Дж. Оттенштейн и Дж. Д. Уоррен, «График зависимости программы и его использование в оптимизации», ACM Сделки по языкам и системам программирования , том. 9, нет. 3, стр. 319–349, 1987.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  20. C. Liu, C. Chen, J. Han и PS Yu, «Gplag: обнаружение плагиата программного обеспечения с помощью анализа графа программной зависимости», в Proceedings of the 12th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining , стр. 872–881, 2006.

    Посмотреть по адресу:

    Google Scholar

  21. Лим, Х. Парк, С. Чой и Т. Хан, «Метод обнаружения кражи программ Java посредством анализа информации о потоке управления», Информационные и программные технологии , том. 51, нет. 9, стр. 1338–1350, 2009.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  22. Д.-К. Че, Дж. Ха, С.-В. Ким, Б. Дж. Кан и Э. Г. Им, «Обнаружение плагиата в программном обеспечении: подход на основе графов», в Трудах 22-й Международной конференции ACM по управлению информацией и знаниями (CIKM ’13) , стр. 1577–1580, Burlingame, Калифорния, США, ноябрь 2013 г.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  23. Э. Стамататос, «Обнаружение плагиата с использованием стоп-слов n-грамм», Журнал Американского общества информационных наук и технологий , том. 62, нет. 12, стр. 2512–2527, 2011.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  24. Г. Косма и М. Джой, «Подход к обнаружению и расследованию плагиата исходного кода с использованием скрытого семантического анализа», IEEE Transactions on Computers , том. 61, нет. 3, стр. 379–394, 2012 г.

    Посмотреть по адресу:

    Сайт издателя | ученый Google | MathSciNet

  25. Л. Пречелт, Г. Малполь и М. Филиппсен, «Поиск плагиата среди набора программ с помощью jplag», Journal of Universal Computer Science , vol. 8, нет. 11, pp. 1016–1038, 2002.

    Посмотреть по адресу:

    Google Scholar

  26. A. Aiken, «Moss: система для обнаружения программного плагиата», 1998, http://theory.stanford.edu/ ~айкен/мосс/.

    Посмотреть по адресу:

    Google Scholar

  27. Т. Камия, С. Кусумото и К. Иноуэ, «CCFinder: многоязычная система обнаружения клонов кода на основе токенов для крупномасштабного исходного кода», IEEE Transactions on Software Машиностроение , вып. 28, нет. 7, стр. 654–670, 2002.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  28. Т. Дж. Парр и Р. В. Куонг, «ANTLR: генератор парсеров с предикативным LL (k)», Программное обеспечение: практика и опыт , том. 25, нет. 7, стр. 789–810, 1995.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  29. В. Н. Вапник, The Nature of Statistical Learning Theory , Springer, New York, NY, USA, 1995.

    Посмотреть по адресу:

    Сайт издателя | MathSciNet

  30. R. Courant and D. Hilbert, Methods of Mathematical Physics , Interscience, New York, NY, USA, 1953.

  31. A. Moschitti and FM Zanzottos, из текстов», в Труды 24-й Международной конференции по машинному обучению (ICML ’07) , стр. 649–656, Корваллис, штат Орегон, США, июнь 2007 г.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  32. M. R. Garey and D. S. Johnson, Computers and Intractability: A Guide to the Theory of NP-Completeness , WH Freeman, 1990.

  33. S. V. N. B. , «Ядра графа», Journal of Machine Learning Research , том. 11, стр. 1201–1242, 2010.

    Посмотреть по адресу:

    Сайт издателя | ученый Google | MathSciNet

  34. К. М. Боргвардт, К. С. Онг, С. Шёнауэр, С. В. Н. Вишванатан, А. Дж. Смола и Х.-П. Кригель, «Прогнозирование функции белков с помощью ядер графа», Bioinformatics , vol. 21, приложение 1, стр. i47–i56, 2005.

    Посмотреть по адресу:

    Сайт издателя | Google Scholar

  35. Н. Кристианини и Дж. Шоу-Тейлор, Введение в машины опорных векторов , Cambridge University Press, Cambridge, UK, 2000.

    Посмотреть по адресу:

    Сайт издателя

  36. Т. Дж. Маккейб, «Мера сложности», IEEE Transactions on Software Engineering , vol. 2, нет. 4, стр. 308–320, 1976.

    Посмотреть по адресу:

    Google Scholar | MathSciNet

  37. Дж. Карлетта, «Оценка согласия по задачам классификации: статистика каппа», Computational Linguistics , vol. 22, нет. 2, стр. 249–254, 1996.

    Посмотреть по адресу:

    Google Scholar


Copyright © 2015 Hyun-Je Song et al. Это статья с открытым доступом, распространяемая в соответствии с лицензией Creative Commons Attribution License, которая разрешает неограниченное использование, распространение и воспроизведение на любом носителе при условии надлежащего цитирования оригинальной работы.

Патент США на помощь в составлении имен в приложениях для обмена сообщениями. Патент (патент № 11 283 752, выданный 22 марта 2022 г.)

Настоящая заявка является продолжением заявки на патент США Сер. № 16/559,808, поданной 4 сентября 2019 г., которая является продолжением заявки на патент США Сер. № 14/089,830, поданной 26 ноября 2013 г., в которой испрашивается преимущество даты подачи предварительной заявки на патент США № 61/904,731, поданной 15 ноября 2013 г. , полное раскрытие которой настоящим включено в настоящий документ посредством ссылки .


Настоящее изобретение в целом относится к приложениям для обмена электронными сообщениями и, более конкретно, к составлению сообщений в приложениях для обмена электронными сообщениями.


Следуя прецеденту аналогов бумажных ручек, которые предшествовали им, электронные письма, мгновенные сообщения (IM), текстовые сообщения и другие электронные сообщения часто состоят из приветствия или приветствия, которое включает имя одного или нескольких предполагаемых получателей электронного сообщения. Однако это приводит к ситуациям, когда составитель сообщения непреднамеренно ошибается в написании имени получателя в приветствии или в другом месте в теле сообщения. Такие ошибки особенно распространены, когда имя получателя необычно в культуре отправителя или если имя пишется так же, как обычное слово без имени. Обычные механизмы обнаружения ошибок, такие как процессы проверки орфографии, использующие предопределенный общий словарь, часто не могут уловить такие ситуации. Чтобы проиллюстрировать это, имя получателя может быть похоже по написанию на обычное слово, и отправитель может неосознанно написать имя получателя как обычное слово, что затем приведет к тому, что опечатка останется незамеченной, поскольку она соответствует написанию, найденному в словаре проверки орфографии. . Кроме того, даже если имя получателя правильно написано отправителем, функция автокоррекции в некоторых приложениях для обмена сообщениями изменяет имя в соответствии со словом, найденным в словаре проверки орфографии. Такие инциденты могут вызвать смущение или замешательство как у отправителя, так и у получателя.


Настоящее раскрытие может быть лучше понято специалистами в данной области техники, а его многочисленные особенности и преимущества станут очевидными для специалистов в данной области техники при обращении к прилагаемым чертежам. Использование одних и тех же условных обозначений на разных чертежах указывает на сходные или идентичные элементы.

РИС. 1 представляет собой схему, иллюстрирующую электронное устройство, использующее помощь в составлении имени получателя с использованием опции автоматического предложения для приложения обмена сообщениями в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. Фиг.2 представляет собой схему, иллюстрирующую интерфейс составления сообщения приложения для обмена сообщениями, которое использует помощь в составлении имени получателя с использованием опции автозаполнения в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. Фиг.3 представляет собой схему, иллюстрирующую интерфейс составления сообщений приложения для обмена сообщениями, которое применяет помощь в составлении имен получателей с использованием опции автокоррекции в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. 4 представляет собой схему, иллюстрирующую интерфейс составления сообщения приложения для обмена сообщениями, которое использует помощь в составлении имени получателя с использованием опции автокоррекции после составления в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. 5 представляет собой блок-схему, иллюстрирующую способ предоставления помощи в составлении имени получателя для составления имени получателя в теле сообщения электронного сообщения в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. 6 представляет собой схему, иллюстрирующую способ идентификации имен-кандидатов для помощи в составлении имени получателя во время составления электронного сообщения путем синтаксического анализа адреса сообщения получателя электронного сообщения в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. 7 представляет собой схему, иллюстрирующую способ идентификации имен-кандидатов для помощи в составлении имени получателя во время составления электронного сообщения путем синтаксического анализа отображаемого имени, связанного с адресом получателя электронного сообщения для обмена сообщениями, в соответствии по меньшей мере с одним вариантом осуществления настоящего изобретения. раскрытие.

РИС. 8 представляет собой схему, иллюстрирующую способ идентификации имен-кандидатов для помощи в составлении имени получателя во время составления электронного сообщения путем анализа тела электронного сообщения в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. 9 представляет собой схему, иллюстрирующую способ идентификации имен-кандидатов для помощи в составлении имени получателя во время составления электронного сообщения путем выполнения поиска контактов в базе данных контактов с использованием контекста сообщения из одного или нескольких полей электронного сообщения в соответствии по меньшей мере с одним вариантом осуществления. настоящего раскрытия.

РИС. 10 представляет собой схему, иллюстрирующую способ идентификации имен-кандидатов для помощи в составлении имени получателя во время составления электронного сообщения путем синтаксического анализа содержимого другого приложения, которое инициировало составление электронного сообщения, в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия.

РИС. 11 представляет собой схему, иллюстрирующую реализацию электронного устройства , 100, в соответствии по меньшей мере с одним вариантом осуществления настоящего изобретения.


Следующее описание предназначено для того, чтобы передать полное понимание настоящего раскрытия путем предоставления ряда конкретных вариантов осуществления и деталей, включающих помощь в составлении имени во время составления электронного сообщения на электронном устройстве. Однако следует понимать, что настоящее раскрытие не ограничивается этими конкретными вариантами осуществления и деталями, которые являются только примерами, и соответственно предполагается, что объем раскрытия ограничивается только следующей формулой изобретения и ее эквивалентами. Кроме того, понятно, что специалист в данной области, в свете известных систем и способов, оценит использование раскрытия по назначению и преимущества в любом количестве альтернативных вариантов осуществления, в зависимости от конкретной конструкции и других потребностей.

РИС. 1-11 иллюстрируют примерные методы предоставления помощи в автоматизированном составлении имени в теле сообщения электронного сообщения, составленного на электронном устройстве. По меньшей мере в одном варианте осуществления электронное устройство идентифицирует одно или несколько имен потенциальных получателей на основе контекста сообщения и в ответ на идентификацию того, что пользователь составляет приветствие или другое приветствие, которое, как ожидается, будет включать имя получателя в тело сообщения, предоставляет имя помощь в составлении с использованием одного или нескольких идентифицированных имен-кандидатов для облегчения точного составления имени получателя. Помощь в составлении имени может предоставляться в виде представления графического представления выбранного имени-кандидата в соответствии с одним или несколькими вариантами представления, такими как вариант автоматического предложения («самопредложение»), вариант автоматического завершения («автозаполнение»), и вариант автоматического исправления («автокоррекция»). Для варианта автозаполнения при идентификации пользовательского ввода, указывающего на триггер приветствия (например, при вводе приветственного термина, такого как «Привет» или «Уважаемый», или инициировании ввода первого слова тела сообщения), одно или несколько имен-кандидатов графически представлен как выбираемый пользователем вариант через графический пользовательский интерфейс (GUI) электронного устройства, и выбор пользователем выбираемого пользователем параметра приводит к автоматическому заполнению («автозаполнение») выбранного имени кандидата в теле сообщения как часть приветствия. Для варианта автозаполнения, после идентификации приветственного триггера и получения пользовательского ввода, указывающего состав начальных букв не приветственного термина в теле сообщения, выбирается имя-кандидат (если имеется более одного имени-кандидата), и электронное устройство предоставляет графическое представление имени кандидата путем автономного завершения слова в теле сообщения на основе выбранного имени кандидата. Затем пользователь может принять это завершенное слово в качестве предполагаемого имени получателя или отклонить завершенное слово и, таким образом, вызвать его удаление из тела сообщения. Для варианта автозамены электронное устройство определяет, включает ли приветствие в теле сообщения слово, совпадающее с именем-кандидатом, и, если есть несоответствие, отображает уведомление о том, что пользователь мог ошибиться при составлении имени получателя в теле сообщения. Это уведомление может включать в себя выбираемую пользователем опцию замены слова в приветствии предлагаемым именем кандидата. Опцию автозамены можно использовать после завершения приветствия и до составления остальной части тела сообщения, после составления тела сообщения (например, когда пользователь поручил приложению обмена сообщениями инициировать передачу составленного электронного сообщения), и тому подобное. Ввод приветствий и других слов может осуществляться путем набора текста на клавиатуре, набора текста на виртуальной клавиатуре (с сенсорным экраном), проведения пальцем по виртуальной клавиатуре, выбора букв мышью или сенсорной панелью, набора аккордов на клавиатуре или наборе клавиш, распознавания речи или другого типа текстовая запись.

Идентификация имен-кандидатов для процесса помощи в составлении имен может быть определена из внутреннего контекста сообщения, внешнего контекста сообщения или их комбинации. Внутренний контекст сообщения включает в себя поля самого электронного сообщения, такие как адреса сообщения получателя в полях адреса сообщения получателя сообщения, отображаемые имена полей отображаемого имени, связанных с адресами сообщения получателя, имена вложений файлов вложений, перечисленных в полях вложений ( и содержание вложенных файлов), а также содержание самого тела сообщения, такое как строка темы сообщения или содержание предыдущего электронного сообщения, которое было включено в тело сообщения составляемого электронного сообщения. Внешний контекст сообщения включает в себя контекст сообщения, отличный от полей составляемого электронного сообщения, и, таким образом, может включать, например, базу данных контактов, поддерживаемую на электронном устройстве, или содержимое приложения, из которого была составлена ​​композиция электронного сообщения. срабатывает (например, содержимое веб-страницы, содержащей ссылку, при выборе которой инициируется составление электронного сообщения). По меньшей мере в одном варианте осуществления электронное устройство идентифицирует имена-кандидаты из внутреннего или внешнего контекста сообщения путем синтаксического анализа содержимого контекста сообщения для идентификации отдельных слов или комбинаций или слов, которые, по прогнозам, представляют слова имени, или путем использования таких проанализированных слов для выполнения поиск имени, например, в базе данных контактов для определения соответствующего имени-кандидата. Эта идентификация имени-кандидата посредством внутреннего и внешнего контекста сообщения, таким образом, может использоваться в дополнение к обычным процессам проверки орфографии, которые полагаются на предопределенные словари правописания, которые не отражают конкретный контекст имени получателя или другое содержимое составляемого электронного сообщения.

Для простоты иллюстрации, большая часть следующего описания методов помощи при автоматизированном составлении имен предоставлена ​​в соответствии с примером использования приложения для обмена сообщениями электронной почты на портативном электронном устройстве. Однако эти автоматизированные методы составления имен не ограничиваются этим контекстом, а вместо этого могут использоваться для любого из множества приложений для обмена электронными сообщениями, таких как приложения для обмена мгновенными сообщениями (IM), приложения для обмена текстовыми сообщениями, приложения для микроблогов, приложения для социальных сетей и т. подобное, аналогичное, похожее.

РИС. 1 показано электронное устройство , 100, , использующее автоматизированную помощь в составлении имени получателя во время составления электронного сообщения в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия. Электронное устройство 100 может включать в себя любое из множества устройств, которые могут использоваться для обмена электронными сообщениями, например мобильный телефон с вычислительной функцией («смартфон») или часы с вычислительной функцией («умные часы»), планшетный компьютер, ноутбук. компьютер, настольный компьютер, игровая консоль, персональный цифровой помощник (КПК) и т. п.

В показанном примере электронное устройство 100 включает в себя приложение для обмена сообщениями 102 , предназначенное для обмена электронными сообщениями между электронным устройством 100 и другими электронными устройствами через поставщика электронных сообщений 104 , доступного через один или несколько сети 106 . Для иллюстрации приложение обмена сообщениями 102 может включать в себя веб-приложение электронной почты (например, Google Gmail™), которое взаимодействует с сервером электронной почты в Интернете (один вариант осуществления поставщика 9 сообщений).0559 104 ) через Интернет (один из вариантов сети 106 ). В качестве другого примера, приложение обмена сообщениями 102 может включать в себя клиент электронной почты Microsoft Outlook™, который взаимодействует с сервером Microsoft Exchange™ (один вариант осуществления поставщика сообщений 104 ) через внутреннюю корпоративную сеть, Интернет или их комбинацию. . В качестве еще одного примера, приложение обмена сообщениями , 102, может включать в себя приложение обмена мгновенными сообщениями (IM), которое обменивается данными с веб-сервером обмена мгновенными сообщениями (один вариант осуществления поставщика 9 обмена сообщениями).0559 104 ) через Интернет. Другие примеры приложения для обмена сообщениями 102 включают, например, приложение для обмена текстовыми сообщениями (например, приложение службы простого обмена сообщениями (SMS) или приложение службы обмена мультимедийными сообщениями (MMS)), приложение для ведения микроблогов (например, приложение для «твитинга»). предоставленный Twitter Inc.), приложение для социальных сетей (например, Facebook™ или Google Circles™) и т.п. В некоторых реализациях приложение для обмена электронными сообщениями 102 отправляет и получает электронные сообщения в координации с операционной системой (ОС) 108 (или другое системное программное обеспечение) электронного устройства 100 . Для иллюстрации, ОС 108 может облегчить доступ к проводному или беспроводному сетевому интерфейсу, который подключается к сети 106 , доступ к дисплею и пользовательским устройствам ввода (например, сенсорному экрану, микрофону, мыши или клавиатуре) электронного устройство 100 и т.п.

Одной из функций обмена сообщениями, обеспечиваемой приложением обмена сообщениями 102 , является представление графического пользовательского интерфейса (GUI) для облегчения составления пользователем электронных сообщений, которые должны быть переданы одному или нескольким получателям через поставщика услуг обмена сообщениями 104 . Композиция электронного сообщения управляется с помощью ввода пользовательской композиции 110 , полученного через один или несколько интерфейсов пользовательского ввода, связанных с этим графическим интерфейсом пользователя, таких как сенсорный экран, микрофон, мышь или клавиатура. Пользовательский ввод , 110, состава обычно включает в себя инструкцию для инициирования составления электронного сообщения, например, выбор пользователем кнопки «составить», отображаемой в графическом пользовательском интерфейсе (GUI), предоставляемом приложением обмена сообщениями .102 или с помощью голосовых команд пользователя, предписывающих электронному устройству 100 инициировать новое электронное сообщение. Пользовательский ввод , 110, состава также включает в себя пользовательский ввод для предоставления адресов сообщения получателя в одном или нескольких полях адреса сообщения и пользовательский ввод для предоставления текста и другого типографского содержимого в тело сообщения составляемого электронного сообщения.

При составлении электронного сообщения пользователь электронного устройства 100 может захотеть обратиться к одному или нескольким получателям по имени в теле сообщения, например, инициировав содержимое тела сообщения приветствием, которое включает одно или несколько имен получателей. Однако существует значительная вероятность того, что пользователь может неправильно написать имя предполагаемого получателя в теле сообщения либо из-за того, что пользователь не знаком с этим именем (например, оно может не написания (например, «Карл» против «Карл»), или оно может иметь написание, очень похожее на другое слово. Для иллюстрации получатель электронного сообщения может быть назван «Gulprit», что пользователь может непреднамеренно ввести как «Culprit» в теле сообщения из-за сходства написания. Чтобы уменьшить количество ошибок при написании имени получателя или избежать их, по меньшей мере, в одном варианте осуществления приложение 9 обмена сообщениями0559 102 обеспечивает автоматическую помощь в составлении имени получателя, определяя имена-кандидаты на основе контекста сообщения, а затем автономно облегчая правильное использование имени в теле сообщения с помощью различных параметров помощи пользователю, таких как параметр автозаполнения, параметр автозаполнения, параметр автозамены и подобное, аналогичное, похожее.

В одном варианте осуществления этой помощи в составлении имени получателя способствует различная информация, хранящаяся в электронном устройстве 100 . Такая информация может включать, например, контекст сообщения , 112, самого сообщения. Этот контекст сообщения 112 может включать внутренний контекст сообщения, который представляет собой информацию в полях составляемого сообщения, такую ​​как информация в полях адреса сообщения получателя, например, адреса электронной почты в полях «кому:», «копия:» и адресные поля «скрытая копия:», имена или другая информация на основе имен, уже присутствующая или впоследствии добавленная в тело сообщения, и т.п. Контекст этого сообщения 112 также может включать внешний контекст сообщения, то есть информацию, которая не получена напрямую из полей составляемого электронного сообщения, например, содержимое другого приложения, которое инициировало составление электронного сообщения, или контактную запись получателя, которая осуществляется косвенно, используя некоторую информацию из внутреннего контекста сообщения.

Приложение обмена сообщениями 102 может использовать этот контекст сообщения 112 для определения одного или нескольких имен-кандидатов (т. имена кандидатов из анализа частей адресов электронной почты, специфичных для получателя, в полях получателя или косвенно, например, путем определения идентификаторов, специфичных для получателя, из полей сообщения, а затем использования этих идентификаторов, специфичных для получателя, для поиска соответствующего имени получателя из, например, база контактов 114 сохраняется на электронном устройстве 100 . База данных контактов 114 может включать, например, постоянный список записей контактов, которые были собраны приложением обмена сообщениями 102 или другим приложением, которое разрешило доступ к своей базе данных контактов, например к записям контактов Google, доступным в приложение Google Gmail™, набор записей контактов, доступных в приложении Microsoft Outlook™, или набор записей «друзей», доступных в учетной записи пользователя Facebook™. Идентифицированные таким образом имена-кандидаты могут быть сохранены во временной базе данных имен-кандидатов 9.0559 116 , который может быть списком, таблицей или другой структурой данных, реализованной, например, в пространстве памяти или дисковом пространстве, выделенном для приложения обмена сообщениями 102 , и может сохраняться в течение всего времени составления электронного сообщения, на время, пока приложение обмена сообщениями 102 работает или иным образом активно, и т.п. Ниже подробно описаны различные методы идентификации имен-кандидатов.

С одним или несколькими именами-кандидатами, идентифицированными и сохраненными в базе данных имен-кандидатов 116 , приложение обмена сообщениями 102 отслеживает ввод 110 состава пользователя для обнаружения любых потенциальных триггеров приветствия, которые могут включать имя получателя или быть связаны с ним. Такие триггеры приветствия могут включать в себя, например, пользовательский ввод, указывающий на ввод типичного вводного приветствия, такого как ввод пользователем слова «Привет» или «Уважаемый» в начале тела сообщения. Кроме того, триггер приветствия может быть начальным вводом пользователем содержимого тела сообщения (то есть набором первых нескольких букв или слов в теле сообщения), и, в частности, триггер приветствия может сработать, когда первые несколько буквы, напечатанные в теле сообщения, по существу совпадают с соответствующими начальными буквами идентифицированного имени кандидата. В ответ на обнаружение триггера приветствия приложение обмена сообщениями 102 пытается помочь пользователю правильно составить имя получателя в теле сообщения. Как описано выше, эта помощь может предоставляться как графическое представление имени кандидата как часть одной или нескольких опций помощи пользователю, таких как опция автозаполнения, опция автозаполнения, опция автозамены и т.п.

Для иллюстрации на РИС. 1 показан состав сообщения GUI 118 приложения для обмена сообщениями 102 для составления сообщения электронной почты получателю с именем «Gulprit» по адресу электронной почты «[email protected] com», как указано полем «Кому: адрес» 120 сообщения электронной почты. Этот графический интерфейс 118 композиции сообщения иллюстрирует реализацию опции автозаполнения, посредством которой приложение обмена сообщениями 102 идентифицирует «Gulprit» как имя-кандидат из адреса электронной почты «[email protected]» и в ответ на ввод пользователя, представляющий ввод слова «Привет» 130 в тело сообщения 122 сообщения электронной почты, приложение для обмена сообщениями 102 предоставляет опцию автоматического предложения для завершения приветствия, предоставляя выбираемую пользователем опцию 124 в графическом интерфейсе пользователя 118 , который предлагает графическое представление имени «Gulprit» в качестве одной записи имени-кандидата 126 , идентифицированной из контекста сообщения 112 , и графическое представление имени «Gillray» в качестве другого имени-кандидата запись 128 , которая идентифицируется, например, из предопределенного орфографического словаря, содержащего «Gillray» в качестве записи. В то время как выбираемая пользователем опция 124 проиллюстрирована как графическое изображение списка выбираемых записей имен-кандидатов 126 , 128 , выбираемая пользователем опция 124 для автоматического предложения имен-кандидатов может быть реализована любым из множества способов, согласующихся с изложенными здесь идеями. С отображаемой таким образом выбираемой пользователем опцией 124 , предполагая, что пользователь намеревался обратиться к Gulprit в теле сообщения 122 , пользователь может выбрать запись имени-кандидата «Gulprit» 126 из выбираемой пользователем опции 124 , в ответ на что приложение обмена сообщениями 102 вставляет имя «Gulprit» в текущую позицию курсора в теле сообщения 122 . Таким образом, имя получателя «Gulprit» правильно вводится в тело сообщения 122 , и исключается возможность ошибки пользователя при самостоятельном вводе имени «Gulprit».

РИС. 2, 3 и 4 иллюстрируют другие варианты помощи в автоматизированном составлении имени получателя, которые могут предоставляться приложением , 102, обмена сообщениями электронного устройства 9.0559 100 на фиг. 1 в сочетании с составом электронного сообщения. Например, фиг. 2 иллюстрирует GUI , 218, составления сообщения, который предоставляется приложением , 102 обмена сообщениями и который обеспечивает опцию автозаполнения для помощи в составлении имени. Для варианта автозаполнения приложение , 102, для обмена сообщениями отслеживает пользовательский ввод , 110, композиции (фиг. 1) для обнаружения пользовательского ввода, представляющего ввод или другой ввод начального набора букв слова в теле сообщения 9.0559 222 состава сообщения GUI 218 . В случае, если начальный набор букв совпадает с соответствующим начальным набором букв имени-кандидата, идентифицированного из контекста сообщения 112 составляемого электронного сообщения, приложение обмена сообщениями 102 обеспечивает графическое представление имени-кандидата через параметр автозаполнения 224 , который представляет собой предлагаемое завершение слова в теле сообщения 222 .

В этом примере имя кандидата «Gulprit» определяется по адресу электронной почты «[email protected]» в поле «Кому: адрес» 220 . Для опции автозаполнения 224 , когда пользователь вводит приветственный триггер «Привет», за которым следует пробел, а затем три начальные буквы «Гул» слова 225 после приветственного триггера, приложение обмена сообщениями 102 идентифицирует этот начальный набор букв слова 225 как достаточное совпадение с именем-кандидатом «Gulprit» и, таким образом, автоматически дополняет слово 225 в качестве имени-кандидата «Gulprit». Как показано, это автозаполнение может включать, например, автоматическое включение оставшихся букв «prit» имени-кандидата «Gulprit» в тело сообщения 222 после начальных букв «Gul» и предоставление некоторого индикатора того, что эти последние буквы 226 заполняются автоматически, например, с использованием текста другого цвета, подчеркивания и т. п. Если автозаполненное имя является словом, которое пользователь намеревался ввести, пользователь может выразить свое согласие на автозаполнение, например, нажав клавишу «пробел» на клавиатуре или выбрав кнопку «принять» или другую функцию принятия (не показана). ), связанный с параметром автозаполнения 224 в составе сообщения GUI 218 .

РИС. 3 иллюстрирует GUI , 318, составления сообщения, который обеспечивается приложением , 102, для обмена сообщениями и который обеспечивает опцию автокоррекции. Для этого подхода к помощи в составлении имени получателя приложение для обмена сообщениями 102 предоставляет параметр автозамены 324 для замены слова идентифицированным именем-кандидатом после того, как слово уже было введено и заполнено в теле сообщения 322 . Таким образом, приложение , 102, обмена сообщениями идентифицирует законченное слово в теле , 322, сообщения как потенциально представляющее имя получателя и проверяет, соответствует ли это слово имени-кандидату, идентифицированному для имени получателя. Если слово недостаточно соответствует имени-кандидату, приложение обмена сообщениями 102 может отобразить опцию автозамены 324 в графическом пользовательском интерфейсе 318 , чтобы предоставить пользователю возможность заменить слово именем-кандидатом, графически представленным в автозамена вариант 324 . В показанном примере параметр автозамены 324 включает в себя диалоговое окно, которое предоставляет пользователю возможность заменить слово «Преступник» в теле сообщения именем-кандидатом «Гулприт», определенным по адресу электронной почты в поле «Кому:». поле 320 . В этом примере слово «Преступник» может быть идентифицировано как потенциально неправильно набранное имя получателя, например, из-за того, что оно сразу следует за триггером приветствия «Привет», пишется с заглавной буквы, но не является первым словом предложения, или потому что оно по существу соответствует названию «Гулприт».

Приложение для обмена сообщениями 102 может анализировать тело составляемого электронного сообщения на предмет возможностей предоставления опции автозамены в одном или нескольких точках процесса составления сообщения. В примере на фиг. 3, адрес получателя для обмена сообщениями (например, «[email protected]») уже введен в поле адреса получателя электронного сообщения, составляемого в момент начала составления тела сообщения, и, таким образом, приложение для обмена сообщениями 102 может использовать этот адрес для обмена сообщениями получателя, чтобы идентифицировать одно или несколько имен-кандидатов для опции автозамены. Таким образом, когда сообщается о завершении потенциального слова имени в теле сообщения (например, когда пользователь вводит символ «пробел» или другой символ пробела после слова), приложение обмена сообщениями 102 может проверить слово в момент завершения. Однако в некоторых случаях пользователь может инициировать составление тела сообщения до заполнения любого из полей получателя электронного сообщения, и, таким образом, может не хватить контекста сообщения для приложения обмена сообщениями 102 , чтобы определить имя кандидата во время составления сообщения. Соответственно, в других случаях анализ тела сообщения на наличие одного или нескольких потенциальных слов для автозамены имени может быть отложен до тех пор, пока пользователь не введет информацию о получателе.

РИС. 4 иллюстрирует пример процесса задержки опции автокоррекции до тех пор, пока составление сообщения не будет по существу завершено. В этом примере снимок экрана 400 иллюстрирует состояние графического интерфейса 9 состава сообщения.0559 418 после того, как пользователь набрал сообщение в теле сообщения 422 , но до заполнения любого из полей адреса получателя сообщения графического пользовательского интерфейса 418 . Сообщение, введенное пользователем, содержит ошибочное представление имени «Gulprit» как «Culprit». Однако, поскольку поля адреса сообщения получателя еще не заполнены на этом этапе, приложение обмена сообщениями 102 может быть не в состоянии идентифицировать ошибку, поскольку не удается идентифицировать имена кандидатов, а «преступник» — это правильно написанное слово. , и, следовательно, не будет обнаружен с помощью стандартного процесса проверки орфографии с предопределенным орфографическим словарем. Напротив, скриншот 402 иллюстрирует состав сообщения GUI 418 после того, как пользователь заполнил поле адреса 420 с псевдонимом «Gulprit» (который приложение обмена сообщениями 102 понимает как соответствующее «[email protected]» в этом примере), и пользователь указал, что составление сообщения электронной почты завершено, например, инициировав передачу сообщения электронной почты, выбрав значок «отправить» 423 графического интерфейса пользователя 9 состава сообщения.0559 418 .

В ответ на это указание о том, что составление завершено, приложение обмена сообщениями 102 может затем повторно оценить поля адреса сообщения получателя, чтобы определить, можно ли определить из них имя-кандидат. В этом случае приложение обмена сообщениями может идентифицировать имя-кандидат «Gulprit» и, таким образом, при анализе тела сообщения 422 может идентифицировать слово «Culprit» потенциально как вариант имени-кандидата «Gulprit» с ошибкой и, таким образом, предоставить вариант автозамены, например вариант автозамены 324 на фиг. 3, заменить «Culprit» на «Gulprit» в теле сообщения 422 . Таким образом, приложение обмена сообщениями , 102, может продолжать обновлять процесс помощи в составлении имен, когда становится доступным дополнительный контекст сообщения.

РИС. 5 иллюстрирует примерный способ , 500, работы приложения , 102, обмена сообщениями электронного устройства 100 для предоставления помощи в составлении имени во время составления электронного сообщения в соответствии по меньшей мере с одним вариантом осуществления. Способ 500 инициируется в блоке 502 , когда пользователь выполняет действие, чтобы инициировать составление электронного сообщения. Это действие может включать, например, пользовательский ввод, указывающий инструкцию для приложения обмена сообщениями 102 инициировать составление сообщения, например, путем выбора значка «создать сообщение» в графическом пользовательском интерфейсе приложения обмена сообщениями 102 или в графическом пользовательском интерфейсе ОС 108 (фиг. 1). В некоторых случаях составление электронного сообщения может быть инициировано косвенно. Для иллюстрации отдельное приложение может связать или иным образом перенаправить пользователя в приложение для обмена сообщениями 9.0559 102 для составления сообщения. Для иллюстрации веб-сайт, отображаемый в веб-браузере, может включать ссылку, которая инициирует вызов интерфейса прикладного программирования (API) к приложению обмена сообщениями 102 , чтобы позволить пользователю составить электронное сообщение в связи с веб-сайтом (например, пересылка статьи на веб-сайте указанному получателю или пересылка сообщения получателю, связанному с веб-сайтом).

В ответ на этот инициирующий ввод в блоке 504 приложение для обмена сообщениями 102 генерирует и отображает графический пользовательский интерфейс для составления сообщения, облегчающий ввод данных пользователем для составления электронного сообщения. Графический интерфейс состава сообщения обычно включает в себя несколько полей, в том числе одно или несколько полей адреса сообщения получателя (например, поля адреса электронной почты «Кому», «Копия:» и «Скрытая копия») и одно или несколько полей тела сообщения, т. е. адрес, не являющийся получателем. поля (обратите внимание, что термин «тело сообщения» может включать, например, поле строки темы сообщения электронной почты, поскольку это сродни заголовку сообщения). С отображаемым графическим интерфейсом состава сообщения в блоке 506 исходный пользовательский ввод состава получен приложением обмена сообщениями 102 через графический интерфейс состава сообщения.

В некоторых случаях этот первоначальный ввод состава пользователя может включать в себя предоставление пользователем адресных псевдонимов или неполных адресов сообщения получателя в одном или нескольких полях адреса сообщения получателя электронного сообщения. В таких случаях в блоке 508 приложение обмена сообщениями 102 идентифицирует полные или полные адреса сообщений получателей, используя функцию автозаполнения приложения обмена сообщениями 9.0559 102 . Эта функция автозаполнения может, например, использовать псевдоним или частичный адрес сообщения получателя для выполнения поиска в базе данных контактов 114 (фиг. 1) для идентификации полного адреса сообщения получателя.

На этапе 510 приложение обмена сообщениями 102 готовится к поддержке процесса помощи в составлении имени получателя для составляемого электронного сообщения путем определения внутреннего контекста сообщения, который может быть полезен при идентификации имен-кандидатов. Этот внутренний контекст сообщения включает в себя контекст сообщения, определяемый непосредственно из полей составляемого электронного сообщения, и, таким образом, может включать в себя адреса получателя сообщения в полях адреса сообщения получателя электронного сообщения, имена файлов вложенных файлов, перечисленных в поле вложения, или содержание самих вложенных файлов, а также содержимое, уже присутствующее в поле тела сообщения, такое как любое начальное содержимое, составленное пользователем в теле сообщения, или электронное сообщение может включать ответное сообщение или сообщение пересылки, и в этом случае тело сообщения может содержать содержимое исходного электронного сообщения, служащего основой для ответа или пересылаемого сообщения. Это содержимое исходного электронного сообщения может включать в себя, например, адреса получателей исходного электронного сообщения, а также одно или несколько имен получателей в поле тела сообщения.

В некоторых вариантах осуществления имена-кандидаты также могут определяться на основе внешнего контекста сообщения; то есть контекст сообщения, который не идентифицируется непосредственно полем составляемого электронного сообщения, и, таким образом, на этапе 512 приложение обмена сообщениями 102 определяет такой внешний контекст сообщения. Этот внешний контекст сообщения может включать в себя, например, определение имени получателя из базы данных контактов , 114, на основе поиска с использованием по меньшей мере части адреса сообщения получателя. Кроме того, поскольку составление электронного сообщения могло быть инициировано другим приложением (например, описанным выше примером веб-сайта), контекст внешнего сообщения может включать в себя контекстную информацию об этом другом приложении, например содержимое приложения, связанное со ссылкой или другими данными. источник происхождения электронного сообщения.

После определения одного или обоих внутреннего контекста сообщения и внешнего контекста сообщения на этапе 514 приложение обмена сообщениями 102 идентифицирует одно или несколько имен-кандидатов для электронного сообщения из внутреннего и внешнего контекста сообщения. Как более подробно описано ниже, идентификация этих имен-кандидатов может включать в себя синтаксический анализ информации, относящейся к имени, во внутреннем контексте сообщения, поиск имени на основе информации, специфичной для получателя, из контекста сообщения и т.п. Любые имена-кандидаты, идентифицированные таким образом, могут быть сохранены во временной базе данных имен-кандидатов 9.0559 116 (фиг. 1), поддерживаемый приложением обмена сообщениями 102 для электронного сообщения.

Одновременно с процессом идентификации имени-кандидата на этапе 516 приложение для обмена сообщениями 102 отслеживает исходный ввод данных пользователем для обнаружения триггера приветствия, который указывает, что пользователь может намереваться включить имя получателя в поле тела сообщения. Как отмечалось выше, этот триггер приветствия может включать ввод слова, которое обычно служит частью приветствия в сообщении, например ввод «Привет», «Привет», «Уважаемый» и т. д. Вместо этого триггер приветствия может включать ввод по крайней мере части слова в область тела сообщения, обычно используемую для приветствий, например, первое или два слова в теле сообщения, или набор слов, расположенный в самом верхнем левом углу поля тела сообщения, или ввод начального набора букв, совпадающего с соответствующим начальным набором букв имени-кандидата.

В ответ на обнаружение триггера приветствия в блоке 518 приложение для обмена сообщениями 102 выбирает имя-кандидат (если имеется более одного имени-кандидата), которое может отражать имя получателя, к которому направляется пользователь или пытается to, ввод в сочетании с триггером приветствия. Этот процесс выбора может включать применение одного или нескольких правил определения приоритетов. Например, правило приоритизации может предусматривать, что имена-кандидаты, определенные из полей адреса сообщения получателя электронного сообщения, могут иметь приоритет выбора по сравнению с именами-кандидатами, определенными из полей, не являющихся адресами получателя, то есть полей тела сообщения. Кроме того, правило приоритизации может предусматривать, что имена-кандидаты, определенные из поля адреса «кому», могут иметь приоритет выбора над именами-кандидатами, определенными из поля «копия: адрес», которые, в свою очередь, имеют приоритет выбора над именами-кандидатами, определенными из поля «скрытая копия: адрес». и т. д. В ситуациях, когда триггер приветствия включает в себя ввод пользователем начального набора букв слова, которое, как ожидается, будет именем получателя, приоритет выбора среди нескольких имен-кандидатов может быть отдан тому имени-кандидату, которое наиболее точно соответствует начальному набору букв. .

При выборе имени-кандидата в блоке 520 приложение для обмена сообщениями 102 может упростить составление имени получателя, предоставив через графический интерфейс составления сообщений один или оба варианта автозаполнения (например, на рис. 1) или автозаполнения. вариант (например, фиг. 2), который графически представляет имя-кандидат пользователю для включения в тело электронного сообщения таким образом, чтобы исключить многие вероятные ошибки ввода пользователем имени получателя. В случае, если опция автозаполнения/опция автозаполнения не принимается пользователем, или в случае, если ни одна из опций не представлена, в блоке 522 приложение для обмена сообщениями 102 продолжает отслеживать введенные пользователем данные, чтобы определить, завершил ли пользователь слово, которое, по прогнозам, предназначалось пользователем в качестве имени получателя, которое несовместимо с одним или несколькими идентифицированными именами-кандидатами. (например, не соответствует ни одному из идентифицированных имен-кандидатов). Этот анализ может быть выполнен относительно быстро после того, как пользователь завершит ввод слова (например, после ввода символа пробела после слова) или после того, как пользователь просигнализировал о завершении составления электронного сообщения, например, выбрав «сохранить». ” или попытавшись инициировать передачу электронного сообщения, выбрав значок «отправить».

Если такое несоответствие или несоответствие имени-кандидата/полного слова возникает в теле сообщения, то на этапе 524 приложение обмена сообщениями 102 может предоставить опцию автозамены (например, фиг. 3 и 4), чтобы уведомить пользователя потенциальной ошибки и дать пользователю возможность исправить ошибку (если это ошибка), заменив слово, о котором идет речь, предложенным именем кандидата. После внесения этой коррекции или, если такая коррекция вообще не требуется, в блоке 526 приложение для обмена сообщениями 102 завершает составление электронного сообщения и отправляет электронное сообщение поставщику услуг обмена сообщениями 104 (рис. 1) для распространения на один или несколько адресов обмена сообщениями получателя, указанных в полях адреса сообщения получателя электронное сообщение.

РИС. 6-10 иллюстрируют примерные методы, которые могут использоваться приложением 102 обмена сообщениями, ОС 108 или другим компонентом электронного устройства 9.0559 100 на фиг. 1 для идентификации одного или нескольких имен-кандидатов из контекста сообщения , 112, составляемого электронного сообщения. В частности, фиг. 6-8 иллюстрируют методы, которые идентифицируют имена-кандидаты из внутреннего контекста сообщения (то есть информации в полях самого сообщения), а фиг. 9 и 10 иллюстрируют методы, которые идентифицируют имена-кандидаты из внешнего контекста сообщения (то есть контекста из внешних источников, доступ к которым осуществляется или которые идентифицируются на основе внутреннего контекста сообщения).

РИС. 6 иллюстрирует способ идентификации одного или более имен-кандидатов из адресов сообщения получателя, присутствующих в полях адреса сообщения получателя электронного сообщения. В этом подходе синтаксический анализатор , 600, приложения , 102, обмена сообщениями осуществляет доступ к специфичной для получателя части адреса сообщения получателя и анализирует вероятные слова имени из специфичной для получателя части. Однако, поскольку имя получателя может включать несколько слов, синтаксический анализатор 600 также может генерировать различные комбинации слов имени, проанализированных из адреса сообщения получателя, для создания нескольких имен-кандидатов. Чтобы проиллюстрировать, в изображенном примере синтаксический анализатор 600 получает доступ к адресу электронной почты получателя 602 (один из вариантов адреса сообщения получателя) из поля «Кому: адрес» или поля «Копия: адрес» или из исходного сообщения электронной почты, включенного в теле сообщения в случае, если составляемое сообщение электронной почты является ответным сообщением электронной почты или пересылаемым сообщением электронной почты. Адреса электронной почты обычно состоят из части, относящейся к получателю, за которой следует часть домена, с символом «@», разделяющим их. Таким образом, адрес электронной почты «[email protected]» включает в себя часть, относящуюся к получателю, «gulprit.singh» и часть домена, «gmail.com». Парсер 9Таким образом, 0559 600 может анализировать часть, относящуюся к получателю, для идентификации одного или нескольких потенциальных слов имени, посредством чего синтаксический анализатор 600 может использовать различные разделители слов общего имени, такие как точка («.»), подчеркивание («_») , тире («-«) и т.п. для обнаружения отдельных слов. Таким образом, для специфичной для получателя части «gulprit.singh» адреса электронной почты получателя 602 синтаксический анализатор 600 может генерировать слова имени «gulprit» и «singh», и из комбинаций этих слов имени получаются три имена кандидатов 604 , 606 , 608 — «Гулприт», «Сингх» и «Гулприт Сингх» соответственно. «Сингх Гулприт» также может быть разумным кандидатом на имя, если соглашение системы адресации электронной почты заключается в том, чтобы ставить фамилию или фамилию первыми в адресе электронной почты. Затем синтаксический анализатор 600 может поместить эти имена-кандидаты 604 , 606 и 608 в базу данных 116 имен-кандидатов электронного устройства 100 для последующего использования в помощи при составлении имен, как описано выше. Этот процесс может быть аналогичным образом применен для разбора имен файлов, перечисленных в поле вложения электронного сообщения.

РИС. 7 иллюстрирует способ идентификации одного или более имен-кандидатов из поля отображаемого имени, связанного с адресом сообщения получателя, присутствующим в полях адреса сообщения получателя электронного сообщения. Часто из соображений безопасности или по другим причинам организация, предоставляющая услугу обмена электронными сообщениями своим членам, может решить использовать специфичную для получателя часть адреса сообщения получателя, которая, хотя и уникальна для получателя, не отражает имя получателя. Такие конфигурации затрудняют, если не делают невозможным, идентификацию имен-кандидатов непосредственно из адреса получателя сообщения. Однако протоколы электронной почты и другие протоколы обмена сообщениями часто предоставляют одно или несколько полей идентификации пользователя, которые могут быть более полезными для идентификации получателя, чем адрес получателя для обмена сообщениями. Для иллюстрации протоколы электронной почты предусматривают включение поля отображаемого имени в связь с адресом электронной почты получателя, где поле отображаемого имени хранит удобное для пользователя отображаемое имя. Парсер 600 может использовать такие поля имени пользователя для идентификации одного или нескольких имен-кандидатов. Например, получатель составляемого сообщения электронной почты может быть указан в наборе полей получателя электронной почты 702 , который включает поле адреса электронной почты 704 , в котором хранится адрес электронной почты «[email protected] com» и поле отображаемого имени. 706 , в котором хранится отображаемое имя «Gulprit Singh». Часть адреса электронной почты «A100269», относящаяся к получателю, не содержит какой-либо полезной информации для прямой идентификации одного или нескольких слов имени, и, таким образом, синтаксический анализатор 600 вместо этого может проанализировать отображаемое имя «Gulprit Singh» в поле отображаемого имени 706 , чтобы определить одно или несколько имен-кандидатов. Как и в примере на фиг. 6, анализ этого отображаемого имени может привести к именам-кандидатам 604 , 606 , 608 — «Гулприт», «Сингх» и «Гулприт Сингх» соответственно, которые хранятся в базе данных имен-кандидатов . 116 для помощи в составлении имени приложением для обмена сообщениями 102 .

РИС. 8 иллюстрирует способ идентификации одного или нескольких имен-кандидатов из поля тела сообщения электронного сообщения. Часто при составлении электронного сообщения поле тела сообщения может содержать содержимое, которое включает в себя или иным образом идентифицирует по меньшей мере часть имени одного или нескольких получателей электронного сообщения. Для иллюстрации, электронное сообщение может быть ответом на предыдущее электронное сообщение или может пересылать предыдущее электронное сообщение другому получателю. В таких случаях одно или более полей тела сообщения и полей адреса сообщения получателя предыдущего электронного сообщения могут быть включены в поле тела сообщения составляемого электронного сообщения. Таким образом, поле тела сообщения может включать в себя адреса сообщений получателей предыдущего электронного сообщения, отображаемые имена, связанные с адресами сообщений получателей, или другие ссылки на вероятных получателей, такие как строка подписи, включенная отправителем предыдущего электронного сообщения. электронное сообщение в теле сообщения предыдущего электронного сообщения. Парсер 600 , таким образом, может анализировать поле тела сообщения электронного сообщения в таких случаях, чтобы идентифицировать одно или несколько имен-кандидатов.

Для иллюстрации примера на фиг. 8 показано поле , 802, тела сообщения составляемого ответного сообщения электронной почты, при этом поле , 802, тела сообщения включает в себя содержимое , 804 исходного сообщения электронной почты. Это содержимое 804 включает строку подписи 806 отправителя исходного сообщения. Таким образом, анализатор 600 может анализировать содержимое 804 , чтобы идентифицировать строку подписи 806 , используя любой из множества методов анализа, а затем анализировать строку подписи 806 , чтобы идентифицировать потенциальные слова имени. Этот синтаксический анализ может включать, например, отбрасывание или игнорирование слов, предварительно идентифицированных, например, в словаре синтаксического анализа (не показан) как не указывающие на имена получателей. При синтаксическом анализе иллюстрированной строки подписи 806 анализатор 600 проигнорирует слова «CTO», «Motorola», «Mobility» и «Inc. » и, таким образом, получит слова имени «Pathy» и «Sunil». как название слова. Из комбинаций этих именных слов парсер 600 может генерировать, например, имена-кандидаты 808 , 810 , 812 — «Пэти», «Сунил» и «Пэти Сунил» соответственно, и сохранять эти имена-кандидаты 808 , 8 , 812 в базе данных имен-кандидатов для использования при составлении имен приложением обмена сообщениями 102 . Этот процесс может быть аналогичным образом применен к разбору содержимого файлов, перечисленных как вложения в поле вложения электронного сообщения.

РИС. 9 иллюстрирует способ косвенной идентификации одного или нескольких имен-кандидатов с использованием базы данных контактов , 114, (фиг. 1), поддерживаемой в электронном устройстве , 100, . Как отмечалось выше, адрес сообщения получателя может не содержать информации, полезной для прямой идентификации имен-кандидатов, и может не быть отображаемого имени или другого удобного для пользователя поля именования, связанного с адресом сообщения получателя. Однако пользователь мог ранее иметь дело с получателем, связанным с адресом сообщения получателя, и, таким образом, может иметь контактную запись для получателя в базе данных контактов 9.0559 114 . Эта контактная запись может включать в себя различную информацию о получателе, такую ​​как имя получателя, должность, работодатель, адрес, номер телефона и различные электронные адреса получателя. Соответственно, в таких случаях приложение , 102, для обмена сообщениями или другой компонент электронного устройства , 100, по фиг. 1, может использовать модуль поиска контактов для идентификации записи контакта, связанной с контекстом сообщения, идентифицированным в одном или нескольких полях составляемого электронного сообщения, и из этой записи контакта косвенно идентифицировать одно или несколько имен-кандидатов.

Чтобы проиллюстрировать, в показанном примере единственная информация, идентифицирующая получателя составляемого сообщения электронной почты, — это адрес электронной почты 902 , который имеет специфичную для получателя часть «A100269», которая не отражает имя получателя, связанного с адрес электронной почты 902 . Соответственно, модуль поиска контактов 900 может использовать эту часть, специфичную для получателя, для поиска в базе данных контактов 114 записи контакта, которая имеет поле, соответствующее части, специфичной для получателя, «A100269».». В этом примере база данных контактов 114 имеет совпадающую запись контакта, связанную с человеком по имени «Гулприт Сингх», и, таким образом, модуль поиска контактов 900 может анализировать поля имени в этой совпадающей записи контакта, чтобы определить имя. слово 904 имени «Гулприт» и слово фамилии 906 имени «Сингх». Затем модуль поиска контактов 900 может сохранить эти слова имен 904 , 906 в базе данных имен кандидатов 116 , после чего синтаксический анализатор 600 (фиг. 6) затем объединяет слова имени в различные имена-кандидаты «Гулприт», «Сингх» и «Гулприт Сингх», или модуль поиска контактов 900 может генерировать эти кандидаты имена непосредственно перед их сохранением в базе данных имен кандидатов 116 . Таким образом, как показано в этом примере, модуль 900 поиска контактов использует внутренний контекст сообщения, а именно адрес электронной почты получателя 902 , для косвенной идентификации одного или нескольких имен-кандидатов через внешний контекст сообщения, а именно запись контакта в базе данных 9 контактов.0559 114 .

РИС. 10 иллюстрирует метод косвенной идентификации одного или нескольких имен-кандидатов с использованием читаемого пользователем содержимого приложения, из которого было инициировано составление электронного сообщения. Веб-браузеры, приложения социальных сетей и другие подобные приложения часто имеют возможность инициировать или инициировать составление электронного сообщения. Для иллюстрации веб-браузер может отображать новостной веб-сайт со ссылкой, которая при выборе пользователем связывается с приложением обмена сообщениями 9.0559 102 , чтобы инициировать составление электронного сообщения, которое, например, используется для пересылки соответствующей новостной статьи получателю. Сами другие электронные сообщения могут иметь такие ссылки, которые инициируют составление электронного сообщения. В таких случаях, с учетом того, что имя получателя часто находится рядом со ссылкой или другой функцией в содержимом приложения, приложение, которое инициирует составление электронного сообщения, может иметь читаемый пользователем контент, который может служить в качестве основу для идентификации одного или нескольких имен-кандидатов получателя электронного сообщения. Таким образом, анализатор 600 может проанализировать этот читаемый пользователем контент другого приложения, чтобы идентифицировать одно или несколько имен-кандидатов.

Чтобы проиллюстрировать, в изображенном примере веб-страница, отображаемая веб-браузером, включает читаемый пользователем контент 1002 , который включает в себя текст, инструктирующий представление сделать резервирование на событие, связавшись с «Хэ Юн Ким» по указанному адресу электронной почты «HYK1032». @gmail.com», и при этом текст адреса электронной почты служит гипертекстовой ссылкой, которая при выборе зрителем через веб-браузер заставляет веб-браузер связываться с приложением обмена сообщениями 102 , чтобы инициировать составление сообщения электронной почты на адрес «[email protected]». Поскольку с этого адреса электронной почты невозможно проанализировать полезные имена-кандидаты, синтаксический анализатор 600 вместо этого может проанализировать читаемый пользователем контент веб-страницы рядом с гипертекстовой ссылкой, чтобы идентифицировать одно или несколько имен-кандидатов. В этом примере этот текст в близи включает фразу 1003 «Чтобы ответить на приглашение на мероприятие, пожалуйста, свяжитесь с Хэ Юн Ким по адресу [email protected]», которую анализатор 600 может анализировать слова имени «Хэ», «Юн» и «Ким», которые могут быть объединены, например, в имена кандидатов 1004 , 1006 , 1008 и 1010 — «Хэ», «Юн», «Хэ Юн» и «Ким» соответственно и хранятся в базе данных имен кандидатов 116 .

Следует понимать, что приложение, из которого было инициировано электронное сообщение, может быть отделено от приложения 102 обмена сообщениями. В таких случаях синтаксический анализатор 600 может быть реализован вне приложения обмена сообщениями 102 , например, в другом приложении или в ОС 108 , чтобы иметь возможность доступа к содержимому другого приложения. Альтернативно, синтаксический анализатор 600 может быть реализован как часть приложения 102 обмена сообщениями, а читаемый пользователем контент другого приложения может быть передан синтаксическому анализатору 600 как часть запроса на инициирование составления электронного сообщения. сообщение. Например, вызов API, сделанный другим приложением в ответ на выбор зрителем гипертекстовой ссылки, может включать в себя унифицированный указатель ресурса (URL) веб-страницы, на которой находится читаемый пользователем контент, и синтаксический анализатор 9. 0559 600 , таким образом, этот URL-адрес можно использовать для доступа к веб-странице и анализа ее содержимого для идентификации слова имени.

РИС. 11 иллюстрирует пример реализации электронного устройства , 100, по фиг. 1 в соответствии по меньшей мере с одним вариантом осуществления настоящего раскрытия. В изображенном примере электронное устройство 100 включает в себя по меньшей мере один процессор 1102 (например, центральное устройство обработки или ЦП), один или более энергонезависимых машиночитаемых носителей данных, таких как системная память 1104 или другое запоминающее устройство 1106 (например, флэш-память, оптический или магнитный дисковод, твердотельный жесткий диск и т. д.), сетевой интерфейс 1108 (например, интерфейс беспроводной локальной сети (WAN) или проводной интерфейс Ethernet) и пользовательский интерфейс (UI) 1110 , подключенный через одну или несколько шин 1112 или другие межсоединения. UI 1110 включает в себя, например, устройство отображения 1114 и клавиатуру или сенсорный экран 1116 , а также другие компоненты ввода/вывода 1118 , такие как динамик или микрофон, для приема ввода или предоставления информации пользователю.

Процессор 1102 выполняет набор исполняемых инструкций, хранящихся на машиночитаемом носителе данных, таком как системная память 1104 или флэш-память, при этом набор исполняемых инструкций представляет собой одно или несколько программных приложений 1120 , например как приложение для обмена сообщениями 102 на фиг. 1. Программные приложения 1120 при выполнении манипулируют процессором 1102 для выполнения различных программных функций для реализации, по крайней мере, части методов, описанных выше, предоставляют визуальную информацию через устройство отображения 1114 , отвечают на пользовательский ввод через сенсорный экран 1116 и т. п. Таким образом, большая часть изобретательских функциональных возможностей и многие изобретательские принципы, описанные выше, хорошо подходят для реализации с программами или в них. Ожидается, что специалист с обычными навыками, несмотря на возможные значительные усилия и множество вариантов дизайна, мотивированных, например, наличием времени, современной технологией и экономическими соображениями, руководствуясь концепциями и принципами, раскрытыми в настоящем документе, сможет легко создать такое программное обеспечение. инструкции и программы минимум экспериментов. Следовательно, в интересах краткости и сведения к минимуму любого риска затемнения принципов и концепций согласно настоящему раскрытию, дальнейшее обсуждение такого программного обеспечения, если таковое имеется, будет ограничено существенными элементами в отношении принципов и концепций в рамках предпочтительных вариантов осуществления. .

В этом документе относительные термины, такие как первый и второй и т. п., могут использоваться исключительно для того, чтобы отличить один объект или действие от другого объекта или действия, не обязательно требуя или подразумевая какие-либо фактические отношения или порядок между такими объектами или действиями. Термины «содержит», «содержащий» или любой другой их вариант предназначены для охвата неисключительного включения, такого, что процесс, метод, изделие или устройство, которые включают список элементов, включают не только эти элементы, но и могут включать другие элементы, не указанные явно или присущие такому процессу, методу, изделию или устройству. Элемент, которому предшествует «содержит . . . а» не исключает, без дополнительных ограничений, существования дополнительных идентичных элементов в процессе, методе, изделии или устройстве, которые содержат элемент. Термин «другой», используемый здесь, определяется как по меньшей мере второй или более. Термины «включающий» и/или «имеющий», используемые в данном документе, определяются как содержащие. Термин «связанный», как он используется здесь в отношении электрооптической технологии, определяется как связанный, хотя и не обязательно напрямую, и не обязательно механически. Используемый здесь термин «программа» определяется как последовательность инструкций, предназначенных для выполнения в компьютерной системе. «Программа» или «компьютерная программа» может включать в себя подпрограмму, функцию, процедуру, метод объекта, реализацию объекта, исполняемое приложение, апплет, сервлет, исходный код, объектный код, общий библиотека/библиотека динамической загрузки и/или другая последовательность инструкций, предназначенная для выполнения в компьютерной системе.

Спецификацию и чертежи следует рассматривать только как примеры, и, соответственно, предполагается, что объем раскрытия ограничивается только следующей формулой изобретения и ее эквивалентами. Обратите внимание, что не все действия или элементы, описанные выше в общем описании, являются обязательными, что часть конкретного действия или устройства может не требоваться, и что одно или несколько дополнительных действий или элементов могут быть выполнены в дополнение к описанные. Более того, порядок перечисления действий не обязательно соответствует порядку их выполнения. Шаги блок-схем, изображенных выше, могут быть в любом порядке, если не указано иное, и шаги могут быть исключены, повторены и/или добавлены, в зависимости от реализации. Кроме того, концепции были описаны со ссылкой на конкретные варианты осуществления. Однако специалисту в данной области техники понятно, что различные модификации и изменения могут быть выполнены без отклонения от объема настоящего изобретения, изложенного в приведенной ниже формуле изобретения. Соответственно, описание и чертежи следует рассматривать в иллюстративном, а не ограничительном смысле, и предполагается, что все такие модификации включены в объем настоящего раскрытия.

Преимущества, другие преимущества и решения проблем были описаны выше в отношении конкретных вариантов осуществления. Однако выгоды, выгоды, решения проблем и любые свойства, которые могут привести к появлению или усилению каких-либо выгод, преимуществ или решений, не должны рассматриваться как критические, требуемые или существенные свойства любого или все претензии.

Google Ngram Viewer

Что делает Ngram Viewer?

Когда вы вводите фразы в Google Books Ngram Viewer, он отображает
график, показывающий, как эти фразы встречались в корпусе книг (например,
«Британский английский», «Английская художественная литература», «Французский») над выбранным
годы. Давайте посмотрим на образец графика:

Это показывает тенденции в трех ngrams с 1960 по 2015 год: «питомник
школа» ( 2-грамм или биграмма ), «детский сад»
( 1-грамм или униграмм ) и «уход за детьми» (другой
биграмма). Ось Y показывает следующее: из всех содержащихся биграмм
в нашей выборке книг, написанных на английском языке и опубликованных в Соединенных
Государства, какой процент из них составляют «детские сады» или «присмотр за детьми»?
Какой процент из всех униграмм относится к «детским садам»?
Здесь вы можете видеть, что использование фразы «уход за детьми» начало расти.
в конце 1960-х, обогнав «детский сад» примерно в 1970-х, а затем
«детский сад» примерно в 1973 году. Он достиг своего пика вскоре после 1990 года и был
неуклонно падает с тех пор.

(Интересно, что результаты заметно отличаются, когда
корпус переведен на британский английский.)

Вы можете навести курсор на линейный график для ngram, который подсветит его. С
щелчок левой кнопкой мыши по линейному графику позволяет сфокусироваться на конкретной энграмме,
затемнение других энграмм на диаграмме, если таковые имеются. На последующем слева
щелчки по другим линейным графикам на диаграмме, несколько энграмм могут
быть сосредоточенным. Вы можете дважды щелкнуть любую область диаграммы, чтобы восстановить
все энграммы в запросе.

Вы также можете указывать подстановочные знаки в запросах, искать перегибы,
выполнять поиск без учета регистра, искать определенные части речи или складывать, вычитать и делить энграммы.
Подробнее о тех, кто находится в разделе «Расширенное использование».

Расширенное использование

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

Поиск подстановочных знаков

Когда вы ставите * вместо слова, Ngram Viewer отобразит десять первых замен.
Например, чтобы найти самые популярные слова после «Университет», выполните поиск «Университет *».

Вы можете щелкнуть правой кнопкой мыши любую из замещающих энграмм, чтобы свернуть их все в исходный запрос с подстановочными знаками, в результате чего будет получена сумма замен за год. Последующий щелчок правой кнопкой мыши расширяет запрос с подстановочными знаками до всех замен. Обратите внимание, что Ngram Viewer поддерживает только один * на ngram.

Обратите внимание, что первые десять замен вычисляются для указанного диапазона времени. Поэтому вы можете получить разные замены для разных диапазонов лет. Мы отфильтровали знаки пунктуации из списка первых десяти, но для слов, которые часто начинают или заканчивают предложения, вы можете увидеть один из символов границы предложения (_START_ или _END_) в качестве одной из замен.

Поиск флексии

Инфекция — это модификация слова для представления различных грамматических категорий, таких как вид, падеж, род, наклонение, число, лицо, время и залог. Вы можете искать их, добавляя _INF к ngram. Например, поиск «book_INF a hotel» отобразит результаты для «book», «booked», «books» и «booking»:

Щелчок правой кнопкой мыши по любому изгибу сворачивает все формы в их сумму. Обратите внимание, что Ngram Viewer поддерживает только одно ключевое слово _INF для каждого запроса.

Предупреждение: Вы не можете свободно смешивать поиск с подстановочными знаками, перегибы и поиск без учета регистра для одной конкретной энграммы.
Однако вы можете искать с помощью любой из этих функций отдельные ngram в запросе: «book_INF a hotel, book * hotel» — это нормально, а «book_INF * hotel» — нет.

Поиск без учета регистра

По умолчанию Ngram Viewer выполняет с учетом регистра поиск: использование заглавных букв имеет значение. Вы можете выполнить поиск без учета регистра, установив флажок «без учета регистра» справа от поля запроса. Затем Ngram Viewer отобразит годовую сумму наиболее распространенных вариантов без учета регистра.
входного запроса. Вот две нечувствительные к регистру энграммы, «Fitzgerald» и «Dupont»:

Щелчок правой кнопкой мыши по любой сумме за год приводит к расширению до наиболее распространенных вариантов, нечувствительных к регистру. Например, щелчок правой кнопкой мыши на «Dupont (All)» приводит к появлению следующих четырех вариантов: «DuPont», «Dupont», «duPont» и «DUPONT».

Теги части речи

Рассмотрим слово браться за дело , которое может быть глаголом («решать
проблема») или существительное («рыболовная снасть»). Можно различать
эти разные формы, добавив _VERB
или _NOUN:

Полный список тегов выглядит следующим образом:


_NOUN_ Эти теги могут быть либо отдельными (_PRON_)
, либо добавляться к слову (she_PRON)
_ADJ_ adjective
_ADV_ adverb
_PRON_ pronoun
_DET_ determiner or article
_ADP_ an adposition: either a preposition or a postposition
_NUM_ число
_CONJ_ соединение
_PRT_ частица
_ROOT_ корень дерева разбора Эти теги должны быть автономными (например, _START_)
_START_ начало предложения
_END_ конец предложения

вы можете использовать тег DET для поиска прочитать книгу ,
прочитать книгу , прочитать эту книгу , прочитать эту книгу ,
и так далее:

Если вы хотите узнать, каковы наиболее распространенные определители в этом контексте, вы можете комбинировать подстановочные знаки и теги частей речи для read * _DET book :

Чтобы получить все различные варианты словосочетания книга , за которой последовали
СУЩЕСТВИТЕЛЬНОЕ в корпусе, вы можете выполнить запрос book_ INF _NOUN_:

Наиболее часто встречающиеся части речи для слова могут быть получены с помощью функции подстановочных знаков. Рассмотрим запрос cook_* :

Ключевое слово склонения также можно комбинировать с тегами части речи. Например, рассмотрим запрос cook _INF, cook _VERB_INF ниже,
который отделяет интонации словесного значения слова «готовить»:

Средство просмотра Ngram помечает границы предложений, позволяя вам идентифицировать ngrams в начале и конце предложений с помощью тегов START и END:

Иногда полезно подумать о словах с точки зрения зависимостей
а не узоры. Допустим, вы хотите знать, как
часто вкусно модифицирует десерт . То есть вы хотите
количество упоминаний о вкусных замороженных десертах , хрустящих, вкусных
, вкусный, но дорогой десерт и все остальные
случаи, когда слово вкусный применяется к десерт .
Для этого Ngram Viewer предоставляет отношения зависимости с
оператор =>:

Каждое проанализированное предложение имеет _ROOT_. в отличие от других
теги, _ROOT_ не обозначает конкретное слово или позицию
в предложении. Это корень дерева синтаксического анализа, построенного
анализ синтаксиса; вы можете думать об этом как о заполнителе для того, что
основной глагол предложения является изменением. Итак, как определить
как часто will был главным глаголом предложения:

Приведенный выше график включал бы предложение Larry will
а не Ларри сказал что решит ,
Поскольку will не является основным глаголом в этом предложении.

Зависимости можно комбинировать с подстановочными знаками. Например, рассмотрим запрос drink=>*_ NOUN ниже:

«Чистые» части речи можно свободно смешивать с обычными словами
в 1, 2, 3, 4 и 5 граммах (например, тосты _ADJ_ или _DET_
_ADJ_ тост).

Композиции Ngram

Средство просмотра Ngram предоставляет пять операторов, которые можно использовать для объединения
ngrams: +, -, /, * и :.

+ Суммирует выражения с обеих сторон, позволяя объединить несколько временных рядов ngram в один.
Вычитает выражение справа из выражения слева, давая вам возможность измерить один ngram относительно другого. Поскольку пользователям часто нужно искать фразы, написанные через дефис, ставьте пробелы по обе стороны от знака -.
/ Делит выражение слева на выражение справа, что полезно для выделения поведения одной энграммы по отношению к другой.
* Умножает выражение слева на число справа, что упрощает сравнение энграмм с очень разными частотами. (Обязательно заключайте всю ngram в круглые скобки, чтобы * не интерпретировался как подстановочный знак.)
: Применяет ngram слева к корпусу справа, позволяя сравнивать ngram в разных корпусах. .

Ngram Viewer попытается угадать, применять ли эти
поведение. Вы можете использовать круглые скобки, чтобы принудительно включить их, и возвести в квадрат
скобы, чтобы принудительно их снять. Пример: и/или будет
разделить и на или ; для измерения использования
фраза и/или , используйте [и/или].
И из лучших побуждений будет искать
фраза из лучших побуждений ; если вы хотите вычесть смысл из колодца,
использовать (в хорошем смысле).

Чтобы продемонстрировать оператор +, вот как можно найти сумму игра , спорт и игра :

лет, ты мог
сравнить выбор , выбор , вариант ,
и альтернатива , указав формы существительных, чтобы избежать
формы прилагательных (например, выбор лакомства , альтернатива

Вычитание Ngram дает вам простой способ сравнить один набор ngram с другим:

Вот как вы можете комбинировать + и /, чтобы показать, как слово яблочное пюре расцвело за счет яблочного соуса :

Оператор * полезен, когда вы хотите сравнить энграммы с широким диапазоном частот, например скрипка и более эзотерический терменвокс :

Оператор выбора :corpus позволяет сравнивать энграммы в
разные языки, или американский против британского английского (или художественная литература),
или между версиями сканов наших книг 2009, 2012 и 2019 годов.
Вот чат на английском и тот же юниграмм на французском:

Когда мы создали исходный корпус Ngram Viewer в 2009 году, наш
OCR не был так хорош, как сегодня. Особенно это было заметно в
английский язык до 19 века, где удлиненная медиальная буква s (ſ) была
часто интерпретируется как f , поэтому best часто читали
как впереди . Вот свидетельство улучшений, которые мы сделали с тех пор
затем, используя оператор корпуса для сравнения версий 2009, 2012 и 2019 годов:

Сравнивая художественную литературу со всем английским, мы видим, что используется
из волшебник вообще английский в последнее время набирает
по сравнению с использованием в художественной литературе:


Ниже приведены описания корпусов, которые можно искать с помощью
Средство просмотра Ngram для Google Книг. Все корпуса созданы в июле
2009 г., июль 2012 г. и февраль 2020 г.; мы будем обновлять эти корпуса как нашу книгу
сканирование продолжается, и обновленные версии будут иметь четкие постоянные
идентификаторы. Книги с низким качеством OCR и сериалы были исключены.

Неформальное название корпуса Стенограмма Постоянный идентификатор Описание
Американский английский 2019 eng_us_2019 googlebooks-eng-us-20200217 Книг преимущественно на английском языке, изданных в США.
Американский английский 2012 eng_us_2012 googlebooks-eng-us-all-20120701
Американский английский 2009 eng_us_2009 googlebooks-eng-us-all-200
Британский английский 2019 eng_gb_2019 googlebooks-eng-gb-20200217 Книг преимущественно на английском языке, изданных в Великобритании.
Британский английский 2012 eng_gb_2012 googlebooks-eng-gb-all-20120701
Британский английский 2009 г. eng_gb_2009 googlebooks-eng-gb-all-200
Английский 2019 eng_2019 googlebooks-eng-20200217 Книг преимущественно на английском языке, изданных в любой стране.
Английский 2012 eng_2012 googlebooks-eng-all-20120701
Английский 2009 eng_2009 googlebooks-eng-all-200
Английская художественная литература 2019 eng_fiction_2019 googlebooks-eng-fiction-20200217 Книги преимущественно на английском языке, которые библиотека или издатель определили как художественную литературу.
Английская художественная литература 2012 eng_fiction_2012 googlebooks-eng-fiction-all-20120701
Английская художественная литература 2009 г. eng_fiction_2009 googlebooks-eng-fiction-all-200
Английский Один миллион eng_1m_2009 googlebooks-eng-1M-200 «Гугл Миллион». Все на английском языке с датами от
с 1500 по 2008 год. Было отобрано не более 6000 книг из
год, что означает, что все отсканированные книги ранних лет
настоящее время, а книги более поздних лет выбираются случайным образом. Случайный
выборки отражают предметные распределения за год (поэтому есть
больше компьютерных книг в 2000 г., чем в 1980 г.).
Китайский 2019 chi_sim_2019 гуглбукс-чи-сим-20200217 Книги, написанные преимущественно упрощенным китайским шрифтом.
Китайский 2012 chi_sim_2012 гуглбукс-чи-сим-все-20120701
Китайский 2009 chi_sim_2009 googlebooks-chi-sim-all-200
Французский 2019 fre_2019 googlebooks-fre-20200217 Книги преимущественно на французском языке.
Французский 2012 fre_2012 googlebooks-fre-all-20120701
Французский 2009 fre_2009 googlebooks-fre-all-200
Немецкий 2019 ger_2019 googlebooks-ger-20200217 Книги преимущественно на немецком языке.
Немецкий 2012 ger_2012 googlebooks-ger-all-20120701
немецкий 2009 ger_2009 googlebooks-ger-all-200
Иврит 2019 heb_2019 googlebooks-heb-20200217 Книги преимущественно на иврите.
Иврит 2012 heb_2012 googlebooks-heb-all-20120701
Иврит 2009 heb_2009 googlebooks-heb-all-200
Испанский 2019 spa_2019 googlebooks-spa-20200217 Книги преимущественно на испанском языке.
Испанский 2012 spa_2012 googlebooks-spa-all-20120701
Испанский 2009 spa_2009 googlebooks-spa-all-200
Русский 2019 rus_2019 googlebooks-rus-20200217 Книги преимущественно на русском языке.
Русский 2012 рус_2012 гуглбукс-рус-все-20120701
Русский 2009 rus_2009 googlebooks-rus-all-200
Итальянский 2019 ита_2019 googlebooks-ita-20200217 Книг преимущественно на итальянском языке.
Итальянский 2012 ита_2012 googlebooks-ita-all-20120701

По сравнению с версиями 2009 г., 2012 и 2019 гг.версии имеют
больше книг, улучшенное распознавание текста, улучшенная библиотека и издатель
метаданные. Версии 2012 и 2019 годов также не образуют энграммы, которые перекрещивают предложения.
границы, и формируют ngrams через границы страницы, в отличие от
версии 2009 года.

В корпусах 2012 и 2019 токенизация также улучшилась с использованием
набор правил, придуманных вручную (за исключением китайского, где
статистическая система используется для сегментации). В корпусах 2009 г.
токенизация основывалась просто на пробелах.

Поиск в Google Книгах

Под графиком мы показываем «интересные» диапазоны лет для вашего запроса.
условия. При нажатии на них ваш запрос будет отправлен непосредственно в Google.
Книги. Обратите внимание, что Ngram Viewer чувствителен к регистру, но Google Книги
результаты поиска , а не .

Эти поиски дадут фразы на языке любого
выбранный вами корпус, но результаты возвращаются из полного Google
Корпус книг. Поэтому, если вы используете Ngram Viewer для поиска французского
фразу во французском корпусе, а затем перейдите в Google Книги,
этот поиск будет вестись по той же французской фразе, которая может встречаться в
книга преимущественно на другом языке.

Часто задаваемые вопросы

Почему я не вижу ожидаемых результатов?

Возможно по одной из следующих причин:

  • Средство просмотра Ngram чувствительно к регистру. Попробуйте написать запрос с заглавной буквы или установите флажок «без учета регистра».
    поле справа от окна поиска.
  • Вы ищете в неожиданном корпусе. Например, Франкенштейн не встречается в русских книгах, поэтому, если вы выполните поиск в русском корпусе, вы увидите прямую линию. Вы можете выбрать корпус через раскрывающееся меню под окном поиска или через оператор выбора корпуса, например, Frankenstein:eng_2019..
  • Ваша фраза содержит запятую, плюс, дефис, звездочку, двоеточие,
    или косая черта в нем. Они имеют особое значение для Ngram
    Зритель; см. Расширенное использование. Попробуйте заключить фразу в квадратные скобки (хотя это не поможет с запятыми).
Как средство просмотра Ngram обрабатывает пунктуацию?

Мы применяем набор правил токенизации, характерных для конкретного
язык. В английском языке сокращения становятся двумя словами (они
становится биграммой они, мы будем мы
буду и так далее). Притяжательный ‘s также отделяется,
но R’n’B остается одним токеном. Отрицания (n’t)
нормализовано так, что не становится не. На русском,
диакритическое ё нормализуется к е и т.д. Такие же правила
применяется для разбора как ngrams, введенных пользователями, так и ngrams
извлечены из корпусов, а это значит, что если вы ищете
ибо не пугайтесь того факта, что Ngram Viewer
переписывает его, чтобы этого не делать; это точно изображает обычаи
как нет, так и нет в корпусе. Однако это
означает, что нет возможности явно искать конкретный
формы не могут (или не могут): вы получаете не может
и не может и не может все сразу.

Как просмотреть примеры использования в контексте?

Под диаграммой Ngram Viewer мы предоставляем таблицу предопределенных
Поиски в Google Книгах, каждый из которых сужен до определенного диапазона лет. Мы выбрали
диапазоны в зависимости от интереса: если ngram имеет огромный пик
в определенный год, который появится сам по себе как поиск, с
другие поиски, охватывающие более длительные периоды.

В отличие от корпуса Ngram Viewer 2019 года, корпус Google Книг не
помечены частью речи. Нельзя искать, скажем, форму глагола
из развеселить в Google Книгах. Таким образом, любые ngrams с частью речи
теги (например, cheer_VERB) исключаются из таблицы Google
Поиски книг.

В Ngram Viewer есть корпуса 2009, 2012 и 2019 годов, но Google Книги
так не работает. Когда вы ищете в Google Книгах, вы
поиск всех доступных в настоящее время книг, так что могут быть некоторые
различия между тем, что вы видите в Google Книгах, и тем, что вы
ожидайте увидеть данную диаграмму Ngram Viewer.

Почему в первые годы я вижу больше всплесков и плато?

Издание было относительно редким событием в 16 и 17 вв.
веков. (Есть
издано всего около 500 000 книг
на английском языке до 19 века.) Поэтому, если фраза встречается в одной книге в одной
году, но не в предыдущие или последующие годы, что создает
более высокий шип, чем в последующие годы.


обычно представляют собой просто сглаженные шипы. Изменить сглаживание
до 0.

Что означает «сглаживание»?

Часто тенденции становятся более очевидными, когда данные рассматриваются как движущиеся
средний. Сглаживание 1 означает, что данные, показанные для 1950 будет
среднее значение необработанного счета за 1950 год плюс 1 значение с каждой стороны:
(«счет за 1949 год» + «счет за 1950 год» + «счет за 1951 год»), деленное на
3. Таким образом, сглаживание 10 означает, что будет усреднено 21 значение: 10 на
с обеих сторон плюс целевое значение в центре.

На левом и правом краях графика меньше значений.
усредненный. При сглаживании 3 самое левое значение (представьте,
это 1950 год) будет рассчитываться как («количество за 1950» + «количество
на 1951 год» + «считайте до 19″52» + «счет за 1953»), разделить на 4.

Сглаживание, равное 0, означает полное отсутствие сглаживания: только необработанные данные.

В наши дни издается гораздо больше книг. Разве это не перекос
результаты, достижения?

Было бы, если бы мы не нормализовали количество книг, изданных в
каждый год.

Почему вы показываете плоскую линию 0%, когда я знаю фразу в моем
запрос возник хотя бы в одной книге?

При большой нагрузке Ngram Viewer иногда возвращает
плоская линия; перезагрузите, чтобы подтвердить, что на самом деле нет хитов для
фраза. Кроме того, мы учитываем только те энграммы, которые встречаются не менее чем в 40
книги. В противном случае набор данных раздулся бы в размерах, и мы бы не
в состоянии предложить их все.

Насколько точна маркировка частей речи?

Прогнозируются частичные теги и отношения зависимости
автоматически. Оценка точности этих прогнозов
сложно, но для современного английского языка мы ожидаем точности
теги части речи должны быть около 95%, а точность зависимости
отношения около 85%. На старом английском тексте и для других языков
точность ниже, но, вероятно, выше 90% для тегов части речи
и выше 75% для зависимостей. Это предполагает значительное количество
ошибки, которые следует учитывать при рисовании

Теги части речи созданы на основе небольшого обучающего набора
(просто миллион слов для английского). Это будет иногда
недооценивать необычные употребления, такие как зеленый или собака
или запишите как глаголы, или спросите как существительное.

Дополнительное примечание о китайском языке: до 20 века классический
Китайский язык традиционно использовался для всех письменных
коммуникация. Классический китайский язык основан на грамматике и
словарь древнекитайского языка, а синтаксические аннотации будут
поэтому ошибаются чаще, чем правы.

Также обратите внимание, что корпуса 2009 года не были частью речи.

Я пишу статью на основе ваших результатов. Как я могу процитировать вашу работу?

Если вы собираетесь использовать эти данные для научной публикации, пожалуйста, укажите оригинал статьи:

Жан-Батист Мишель*, Юань Куй Шен, Авива Прессер Эйден, Адриан
Верес, Мэтью К. Грей, Уильям Брокман, команда Google Книги,
Джозеф П. Пикетт, Дейл Хойберг, Дэн Клэнси, Питер Норвиг, Джон Орвант,
Стивен Пинкер, Мартин А. Новак и Эрез Либерман Эйден*.
Количественный анализ культуры с использованием миллионов оцифрованных
. Science (Опубликовано в Интернете до печати: 16 декабря 2010 г. )

У нас также есть статья о нашей маркировке частей речи:

Юрий Лин, Жан-Батист Мишель, Эрез Либерман Эйден, Джон Орвант,
Уильям Брокман, Слав Петров.
Синтаксические аннотации для корпуса Ngram Google Книг . Производство
50-го ежегодного собрания Ассоциации компьютерной лингвистики

Том 2: Демонстрационные документы (ACL ’12) (2012)

Могу ли я загрузить ваши данные для проведения собственных экспериментов?

Да! Данные ngram доступны для
Скачать здесь. Чтобы сделать размеры файлов
управляемы, мы сгруппировали их по начальной букве, а затем
сгруппированы различные размеры ngram в отдельные файлы. Нграммы внутри
каждый файл не отсортирован по алфавиту.

Для создания машиночитаемых имен файлов мы транслитерировали
ngrams для языков, использующих нелатинское письмо (китайский, иврит,
русский) и использовал начальную букву транслитерированного ngram для
определить имя файла. Тот же подход был применен к персонажам
например ä на немецком языке. Обратите внимание, что транслитерация была
используется только для определения имени файла; фактические ngrams закодированы в
UTF-8 с использованием алфавита для конкретного языка.

Я хочу опубликовать график Ngram в своей книге/журнале/блоге/презентации. Каковы ваши условия лицензирования?

Графики и данные Ngram Viewer можно свободно использовать для любых целей, однако мы приветствуем упоминание Google Books Ngram Viewer в качестве источника и включение ссылки на http://books.google.com/ngrams.


Команда Google Ngram Viewer, часть Google Research

разбор — лучший способ определить и извлечь даты из текста Python?

Задавать вопрос


1 год, 4 месяца назад

64к раз

В рамках более крупного личного проекта, над которым я работаю, я пытаюсь выделить встроенные даты из различных текстовых источников.

Например, у меня есть большой список строк (которые обычно имеют форму английских предложений или утверждений), которые принимают различные формы:

Заседание центрального проектного комитета Вторник 22 октября 18:30

Th 9/19 LAB: серийное кодирование (раздел 2.2)

15 декабря будет еще один для тех, кто не сможет прийти сегодня.

Рабочая тетрадь 3 (минимальная заработная плата): в среду, 18 сентября, 23:59

Он прилетит 15 сентября.

Хотя эти даты соответствуют естественному тексту, ни одна из них не находится в специфически естественной языковой форме (например, нет «Встреча состоится через две недели» — все четко).

Как человеку, не имеющему большого опыта в такого рода обработке, с чего лучше всего начать? Я изучил такие вещи, как dateutil.parser модуль и parsedatetime, но они, кажется, для после , вы изолировали дату.

Из-за этого есть ли хороший способ извлечь дату и посторонний текст

 ввод: Th 9/19 LAB: Серийное кодирование (раздел 2. 2)
вывод: ['Th 9/19', 'LAB: Серийное кодирование (раздел 2.2)']

или что-то подобное? Похоже, такая обработка выполняется такими приложениями, как Gmail и Apple Mail, но возможно ли это реализовать на Python?

дата парсинга python nlp


Я также искал решение этой проблемы и не смог найти его, поэтому мы с другом создали для этого инструмент. Я думал, что вернусь и поделюсь, если другие сочтут это полезным.

datefinder — поиск и извлечение дат внутри текста

Вот пример:

 импортировать datefinder
строка_с_датами = '''
    Заседание ЦПК вторник, 22 октября, 18:30
    Чт 9/19 LAB: последовательное кодирование (раздел 2.2)
    15 декабря будет еще один для тех, кто не сможет прийти сегодня.
    Рабочая тетрадь 3 (минимальная заработная плата): в среду, 18 сентября, в 23:59.
    Он прилетит 15 сентября.
    Мы ожидаем, что это произойдет между концом 2021 и началом 2022 года. 
совпадения = datefinder.find_dates (string_with_dates)
для матча в матчах:
    печать (совпадение)


Я удивлен, что нет упоминания о SUTime и методе search_dates в dateparser.

 из sutime импорт SUTime
импорт ОС
импортировать json
из dateparser.search импортировать search_dates
str1 = "Давай встретимся в следующий четверг"
# Вы получите больше информации об этих jar-файлах на странице SUTime на github.
jar_files = os.path.join (os.path.dirname (__file__), 'jars')
sutime = SUTime (jars = jar_files, mark_time_ranges = True)
печать (json.dumps (sutime.parse (str1), sort_keys = True, отступ = 4))
        "конец": 33,
        "старт": 20,
        "text": "в следующий четверг",
        "тип": "ДАТА",
        "значение": "2018-10-11"
печать (даты_поиска (str1))
#[('Четверг', datetime.datetime(2018, 9, 27, 0, 0)))]

Хотя я пробовал другие модули, такие как dateutil, datefinder и natty (не смог заставить утёнка работать с python), эти два, кажется, дают наиболее многообещающие результаты.

Результаты SUTime более надежны, и это видно из приведенного выше фрагмента кода. Однако SUTime дает сбой в некоторых основных сценариях, таких как разбор текста


«Я буду недоступен до 19 сентября»


«Я буду недоступен с (18 сентября по 20 сентября).

Не дает результата для первого текста и дает только месяц и год для второго текста.
Однако это довольно хорошо обрабатывается в методе search_dates.
Метод search_dates более агрессивен и выдаст все возможные даты, относящиеся к любым словам во входном тексте.

Я пока не нашел способа парсить текст строго по датам в search_methods. Если бы я мог найти способ сделать это, это был бы мой первый выбор, а не SUTime, и я также обязательно обновлю этот ответ, если найду его.


Вы можете использовать метод parse модуля dateutil с опцией fuzzy .

 >>> из анализа импорта dateutil.parser
>>> parse("Заседание Центрального конструкторского комитета, вторник, 22 октября, 18:30", fuzzy=True)
datetime.datetime(2018, 10, 22, 18, 30)
>>> parse("15 декабря будет еще один для тех, кто не сможет прийти сегодня.", fuzzy=True)
datetime.datetime(2018, 12, 15, 0, 0)
>>> parse("Тетрадь 3 (минимальная заработная плата): сдать в среду 9/18 23:59", fuzzy=True)
datetime.datetime(2018, 3, 9, 23, 59)
>>> parse("Он прилетит 15 сентября", fuzzy=True)
datetime.datetime(2018, 9, 15, 0, 0)
>>> parse("Th 9/19 LAB: Серийное кодирование (Раздел 2.2)", fuzzy=True)
datetime.datetime(2002, 9, 19, 0, 0)

Если вы можете идентифицировать сегменты, которые действительно содержат информацию о дате, их синтаксический анализ может быть довольно простым с помощью parsedatetime. Однако есть несколько вещей, которые следует учитывать, а именно то, что в ваших датах нет лет, и вы должны выбрать локаль.

 >>> импортировать parsedatetime
>>> p = parsedatetime. Calendar()
>>> p.parse("15 декабря")
((2013, 12, 15, 0, 13, 30, 4, 319, 0), 1)
>>> p.parse("18 сентября 23:59")
((2014, 9, 18, 23, 59, 0, 4, 319, 0), 3)
>>> # Выбирается 2014 год, так как это *следующее* событие 18 сентября

Не всегда работает идеально, если у вас есть посторонний текст.

 >>> p.parse("9/19 LAB: Серийное кодирование")
((2014, 9, 19, 0, 15, 30, 4, 319, 0), 1)
>>> p.parse("9/19 LAB: Последовательное кодирование (раздел 2.2)")
((2014, 2, 2, 0, 15, 32, 4, 319, 0), 1)

Честно говоря, это похоже на проблему, которую достаточно просто разобрать на конкретные форматы и выбрать наиболее вероятные из каждого предложения. Кроме того, это была бы достойная задача машинного обучения.


Привет, я не уверен, что приведенный ниже подход является машинным обучением, но вы можете попробовать его:

  • добавьте некоторый контекст из внешнего текста, например, время публикации текстового сообщения, публикации, сейчас и т. д. (ваш текст ничего не говорит о год)
  • извлеките все токены с разделителем пробелами и должно получиться что-то вроде этого:

     ['Чт','Среда','9:34pm','7:34','pm','am','9/18','9/','/18', '19', '12']
  • обработать их с помощью наборов правил, например, основанных на днях недели и/или вариациях времени формирования компонентов, и пометить их, например. ‘%d:%dpm’, ‘%d am’, ‘%d/%d’, ‘%d/%d’ и т. д. могут означать время.
    Обратите внимание, что он может иметь композиции, например. «12 / 31» — это 3 грамма («12», «/», «31»), должен быть один токен «12/31», представляющий интерес.

  • «видеть», какие токены находятся вокруг отмеченных токенов, таких как «9:45 вечера», например («Чт», «9/19», «9:45 вечера») — это 3gram, сформированный из «интересных» токенов, и применять к нему правила, которые могут определить значение

  • процесс для более конкретного анализа, например, если 31/12, то 31 > 12 означает d/m или наоборот, но если 12/12 м, d будет доступно только в контекстной сборке из текста и/или вне его.


Новые версии parsedatetime lib предоставляет функцию поиска.


 из dateparser.search import search_dates
date = search_dates('Заседание Центрального проектного комитета, вторник, 22 октября, 18:30')


Идеального решения не существует. Это полностью зависит от того, с каким типом данных вы должны работать. Быстро просмотрите и проанализируйте данные, просмотрев определенный набор данных вручную, подготовьте шаблон регулярного выражения и проверьте его, работает он или нет.

Предопределенные все пакеты решают проблему извлечения данных в некоторой степени, и это ограничено. если кто-то примерно узнает шаблон, просматривая данные, пользователь может подготовить регулярное выражение. Это поможет им предотвратить перебор и повторение всех правил, написанных в пакетах.

Твой ответ

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Учебник по фактору

от andreaferretti

Factor — это зрелый язык с динамической типизацией, основанный на конкатенационной парадигме. Начало работы с Factor может быть пугающим, поскольку конкатенативная парадигма отличается от большинства основных языков. Это руководство познакомит вас с основами Factor, чтобы вы могли оценить его простоту и мощь. Я предполагаю, что вы опытный программист, знакомый с функциональным языком, и я предполагаю, что вы понимаете такие понятия, как свертывание, функции высшего порядка и каррирование.

Несмотря на то, что Factor является нишевым языком, он является зрелым и имеет обширную стандартную библиотеку, охватывающую задачи от сериализации JSON до программирования сокетов и шаблонов HTML. Он работает на собственной оптимизированной виртуальной машине с очень высокой производительностью для языка с динамической типизацией. Он также имеет гибкую объектную систему, FFI для C и асинхронный ввод-вывод, который немного похож на Node.js, но с гораздо более простой моделью совместной многопоточности.

Вы можете задаться вопросом, почему вы должны так заботиться о Факторе, чтобы прочитать это руководство. У Factor есть несколько существенных преимуществ перед другими языками, большинство из которых связано с тем, что он практически не имеет синтаксиса:

  • рефакторинг очень прост, что приводит к коротким и содержательным определениям функций;
  • чрезвычайно лаконичен, позволяя программисту сосредоточиться на том, что важно, а не на шаблонах;
  • обладает мощными возможностями метапрограммирования, превосходящими даже возможности LISP;
  • идеально подходит для создания DSL;
  • легко интегрируется с мощными инструментами.

Прежде чем приступить к этому руководству, загрузите копию Factor, чтобы вы могли следовать примерам в слушателе (Factor REPL).

Я предполагаю, что вы используете Mac OS X или какой-либо дистрибутив Linux, но все должно работать так же и в других системах, если вы настроите пути к файлам в примерах.

Первый раздел дает некоторую мотивацию для довольно своеобразной модели вычисления конкатенационных языков, но не стесняйтесь пропустить его, если хотите намочить ноги и вернуться к нему после некоторой практики с Factor.

Конкатенационные языки

Коэффициент является конкатенацией язык программирования в духе Форта. Что это вообще значит?

Чтобы понять каскадное программирование, представьте себе мир, в котором каждое значение является функцией, а единственной допустимой операцией является композиция функций. Поскольку композиция функций настолько распространена, она неявна, и функции могут быть буквально сопоставлены друг с другом, чтобы составить их. Таким образом, если f и g — это две функции, то их состав будет как раз f g (в отличие от математической записи, функции читаются слева направо, так что это означает сначала выполнить f , затем выполнить g ).

Это требует некоторого объяснения, так как мы знаем, что функции часто имеют несколько входов и выходов, и не всегда выход f совпадает с вводом g . Например, g может потребоваться доступ к значениям, вычисленным более ранними функциями. Но единственное, что может видеть g , — это вывод f , поэтому вывод f — это все состояние мира до г касается. Чтобы это работало, функции должны обрабатывать глобальное состояние, передавая его друг другу.

Существуют различные способы кодирования этого глобального состояния. Самым наивным было бы использовать хэш-карту, которая сопоставляет имена переменных с их значениями. Это оказывается слишком гибким: если каждая функция может получить доступ к любой части глобального состояния, мало контроля над тем, что могут делать функции, мало инкапсуляции, и в конечном итоге программы превращаются в неструктурированный беспорядок подпрограмм, изменяющих глобальные переменные.

На практике хорошо работает представление состояния мира в виде стека. Функции могут обращаться только к самому верхнему элементу стека, так что элементы ниже него фактически выходят за рамки. Если для управления несколькими элементами в стеке задано несколько примитивов (например, swap , который меняет местами два верхних элемента в стеке), то становится возможным ссылаться на значения ниже по стеку, но чем дальше значение вниз по стеку, тем сложнее становится ссылаться на него.

Таким образом, рекомендуется, чтобы функции оставались небольшими и обращались только к двум или трем верхним элементам стека. В некотором смысле нет различия между локальными и глобальными переменными, но значения могут быть более или менее локальными в зависимости от их расстояния от вершины стека.

Обратите внимание: если каждая функция принимает состояние всего мира и возвращает следующее состояние, ее входные данные больше никогда не используются. Таким образом, хотя удобно думать о чистых функциях как о приеме стека на вход и выводе стека, семантика языка может быть реализована более эффективно путем изменения одного стека.

Это оставляет конкатенационные языки, такие как Factor, в странном положении, они оба чрезвычайно функциональны — позволяют только компоновать более простые функции в более сложные — и в значительной степени императивны — описывают операции в изменяемом стеке.

Игра со стеком

Давайте начнем с того, что на самом деле чувствует Фактор. Нашими первыми словами будут литералы, такие как 3 , 12.58 или "Чак Норрис" . Литералы можно рассматривать как функции, помещающие себя в стек. Попробуйте написать 5 в прослушивателе, а затем нажмите Enter для подтверждения. Вы увидите, что стек, изначально пустой, теперь выглядит как



Вы можете ввести более одного числа, разделенного пробелами, например 7 3 1 , и получить


(интерфейс показывает вершину стека внизу). Что насчет операций? Если вы напишите + , вы запустите функцию + , которая извлекает два самых верхних элемента и подталкивает их сумму, оставляя нам


Вы можете поместить дополнительные входы в одну строку, например, - * оставит в стеке единственное число 15 (понимаете, почему?).

Функция . (точка или точка) печатает элемент в верхней части стека, извлекая его из стека, оставляя стек пустым.

Если мы пишем все в одну строку, наша программа пока выглядит как

 5 7 3 1 + - * .

, который показывает своеобразный способ Factor выполнять арифметические действия, ставя аргументы первыми, а оператор последним — соглашение, которое называется обратной польской нотацией (RPN). Обратите внимание, что RPN не требует круглых скобок, в отличие от полированной нотации Лиспа, где оператор стоит первым, и RPN не требует правил приоритета, в отличие от инфиксной нотации, используемой в большинстве языков программирования и в повседневной арифметике. Например, в любом Лиспе одно и то же вычисление будет записано

 (* 5 (- 7 (+ 3 1)))

и в знакомой инфиксной нотации

 (7 - (3 + 1)) * 5

Также заметьте, что мы смогли разбить наши вычисления на несколько строк или объединить их в меньшее количество строк довольно произвольно, и что каждая строка имела смысл сама по себе.

Определение нашего первого слова

Теперь мы определим нашу первую функцию. Factor имеет немного странное наименование функций: поскольку функции читаются слева направо, они называются просто слов , и так мы будем называть их с этого момента. Модули в Factor определяют слова в терминах предыдущих слов, и эти наборы слов затем называются словарями .

Предположим, мы хотим вычислить факториал. Чтобы начать с конкретного примера, мы вычислим факториал 10 , поэтому начнем с записи 10 в стек. Теперь факториал — это произведение чисел от 1 до 10 , поэтому сначала мы должны создать такой список чисел.

Слово для создания диапазона называется [a,b] (маркировка в Factor тривиальна, потому что слова всегда разделяются пробелами, что позволяет использовать любую комбинацию непробельных символов в качестве имени слова; нет семантики для [ , , и ] в [a,b] , поскольку это просто токен, такой как foo или bar ).

Диапазон, который нам нужен, начинается с 1 , поэтому мы можем использовать более простое слово 9.2061 [1,b] , который предполагает, что диапазон начинается с 1 , и ожидает, что в стеке будет только значение в верхней части диапазона. Если вы напишете в слушателе [1,b] , Factor предложит вам выбор, потому что слово [1,b] по умолчанию не импортируется. Factor может предложить вам импортировать словарь math.ranges , поэтому выберите этот вариант и продолжайте.

Теперь в вашем стеке должна быть довольно непрозрачная структура, похожая на


 Т {диапазон f 1 10 1 }

Это связано с тем, что наши функции диапазона ленивы и создают диапазон только тогда, когда мы пытаемся его использовать. Чтобы подтвердить, что мы действительно создали список чисел от 1 до 10 , мы преобразуем ленивый ответ в стеке в массив, используя слово >массив . Введите это слово, и ваш стек теперь должен выглядеть как


 { 1 2 3 4 5 6 7 8 9 10 }

что многообещающе!

Далее мы хотим получить произведение этих чисел. Во многих функциональных языках это можно сделать с помощью функции, называемой сокращением или свертыванием. Давайте искать один. Нажатие F1 в слушателе откроет контекстную справочную систему, где вы можете искать уменьшить . Оказывается, что уменьшить — это на самом деле то слово, которое мы ищем, но на данный момент может быть не очевидно, как его использовать.

Попробуйте написать 1 [ * ] уменьшить и посмотрите на результат: это действительно факториал 10 . Теперь reduce обычно принимает три аргумента: последовательность (а у нас была одна в стеке), начальное значение (это 1 кладем в стек рядом) и бинарную операцию. Это определенно должны быть * , но как насчет квадратных скобок вокруг * ?

Если бы мы написали просто * , Factor попытался бы применить умножение к двум самым верхним элементам в стеке, чего мы не хотели. Что нам нужно, так это способ поместить слово в стек, не применяя его. Придерживаясь нашей текстовой метафоры, этот механизм называется цитатой . Чтобы процитировать одно или несколько слов, просто окружите их цифрой 9.2061 [ и ] (оставляя пробелы!). То, что вы получаете, похоже на анонимную функцию в других языках.

Давайте введем слово drop в слушатель, чтобы очистить стек, и попробуем записать то, что мы уже сделали, в одной строке: 10 [1,b] 1 [ * ] reduce . Это оставит 3628800 в стеке, как и ожидалось.

Теперь мы хотим определить слово для факториала, которое можно использовать всякий раз, когда нам нужен факториал. Назовем наше слово фактом (хотя ! обычно используется как символ факториала, в Factor ! используется для комментариев). Чтобы определить его, нам сначала нужно использовать слово : . Затем мы помещаем имя определяемого слова, затем стек влияет на и, наконец, тело, заканчивающееся на ; слово:

 : факт ( n -- n! ) [1,b] 1 [ * ] уменьшить ;

Что такое эффекты стека? В нашем случае это (n - n!) . Эффекты стека — это то, как вы документируете входные данные из стека и выходные данные в стек для вашего слова. Вы можете использовать любой идентификатор для именования элементов стека, здесь мы используем п . Factor выполнит проверку согласованности, чтобы количество указанных вами входных и выходных данных согласовывалось с тем, что делает тело.

Если вы попытаетесь написать

 : факт ( m n -- n! ) [1,b] 1 [ * ] уменьшить ;

Фактор сообщит об ошибке, что 2 входа ( m и n ) не согласуются с телом слова. Чтобы восстановить предыдущее правильное определение, нажмите Ctrl+P два раза, чтобы вернуться к предыдущему вводу, а затем введите его.

Мы можем рассматривать эффекты стека в определениях как инструмент документирования и как очень простую систему типов, которая, тем не менее, улавливает несколько ошибок.

В любом случае, вы успешно определили свое первое слово: если вы напишете 10 факт в слушателе, вы сможете это доказать.

Обратите внимание, что часть определения 1 [ * ] reduce имеет смысл сама по себе, поскольку является продуктом последовательности. Прелесть конкатенативного языка в том, что мы можем просто вынести эту часть за скобки и записать

 : prod ( {x1,...,xn} -- x1*...*xn ) 1 [ * ] уменьшить ;
: факт ( n -- n!) [1,b] prod ;

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

Конечно, в Factor уже есть слово для факториала (на самом деле существует целый словарь math.factorials , включающий множество вариантов обычного факториала) и слово для произведения ( продукт в последовательности словарь), но как это часто бывает вводные примеры пересекаются со стандартной библиотекой.

Разбор слов

Если вы до сих пор были внимательны, то понимаете, что я солгал вам. Я сказал, что каждое слово действует в стеке по порядку, но есть несколько слов, таких как [ , ] , : и ; , которые, похоже, не следуют этому правилу.

Это слов для синтаксического анализа , и они ведут себя иначе, чем более простые слова, такие как 5 , [1,b] или падение . Мы рассмотрим их более подробно, когда будем говорить о метапрограммировании, а сейчас достаточно знать, что синтаксические слова имеют особое значение.

Они определяются не с помощью слова : , а со словом СИНТАКСИС: . Когда встречаются слова для синтаксического анализа, они могут взаимодействовать с синтаксическим анализатором с помощью четко определенного API, чтобы влиять на то, как анализируются следующие друг за другом слова. Например : запрашивает следующие токены у парсеров до ; найден и пытается скомпилировать этот поток токенов в определение слова.

Слова синтаксического анализа обычно используются для определения литералов. Например, { — слово разбора , которое начинает определение массива и заканчивается } . Все, что находится между ними, является частью массива. Пример массива, который мы видели раньше, это { 1 2 3 4 5 6 7 8 9 10 } .

Существуют также литералы для хэш-карт, H{ { "Perl" "Larry Wall" } { "Factor" "Слава Пестов" } { "Scala" "Martin Odersky" } } и массивы байтов, B{ 1 14 18 23 } .

Другие варианты использования синтаксического слова включают модульную систему, объектно-ориентированные функции Factor, перечисления, запоминаемые функции, модификаторы конфиденциальности и многое другое. Теоретически даже SYNTAX: может быть определен сам по себе, хотя, конечно, систему надо как-то загружать.

Перетасовка стека

Теперь, когда вы знаете основы Factor, вы можете начать собирать более сложные слова. Иногда это может потребовать от вас использовать переменные, которые не находятся на вершине стека, или использовать переменные более одного раза. Есть несколько слов, которые могут помочь в этом. Я упомянул их сейчас, поскольку вам нужно знать о них, но я предупреждаю вас, что использование слишком большого количества этих слов для управления стеком приведет к тому, что ваш код быстро станет труднее читать и писать. Перетасовка стека требует мысленного моделирования перемещения значений в стеке, что не является естественным способом программирования. В следующем разделе мы увидим гораздо более эффективный способ удовлетворения большинства потребностей.

Вот список наиболее распространенных слов для перетасовки вместе с их влиянием на стек. Попробуйте их в прослушивателе, чтобы понять, как они манипулируют стеком, и изучите интерактивную справку, чтобы узнать больше.

 дубликат ( х -- х х )
падение ( х -- )
поменять местами ( х у -- у х )
над ( х у -- х у х )
дупд ( х у -- х х у )
swapd ( x y z -- y x z )
щипок ( х у -- у )
гниль ( x y z -- y z x )
-rot ( x y z -- z x y )
2dup ( х у -- х у х у )


Хотя слова, упомянутые в предыдущем абзаце, иногда бывают полезны (особенно более простые dup , drop и swap ), вы должны написать код, который делает как можно меньше перетасовки стека. Это требует практики получения аргументов функции в правильном порядке. Тем не менее, есть определенные общие шаблоны необходимых манипуляций со стеком, которые лучше абстрагировать в свои собственные слова.

Предположим, мы хотим определить слово, чтобы определить, является ли заданное число n простым. Простой алгоритм заключается в проверке каждого числа из 2 9.2062 в квадратный корень из n и посмотрите, является ли оно делителем n . В этом случае n используется в двух местах: как верхняя граница последовательности и как число для проверки на делимость.

Слово bi применяет две разные кавычки к одному элементу в стеке над ними, и это именно то, что нам нужно. Например, 5 [ 2 * ] [ 3 + ] би дает


bi применяется котировка [ 2 * ] до значения 5 , а затем цитата [ 3 + ] до значения 5 , оставляя нам 10 , а затем 8 в стеке. Без bi нам пришлось бы сначала дублировать 5 , затем умножить, а затем поменять местами результат умножения со вторым 5 , чтобы мы могли сделать сложение

 5 дублирование 2 * замена 3 +

Вы можете видеть, что bi заменяет общий шаблон дублирует , затем вычисляет, затем меняет местами и снова вычисляет.

Чтобы продолжить наш основной пример, нам нужен способ создать диапазон, начинающийся с 2 . Мы можем определить наше собственное слово для этого [2,b] , используя слово диапазона [a,b] , которое мы обсуждали ранее


 : [2,b] ( n -- {2,...,n} ) 2 поменять местами [a,b] ; в соответствии

Что случилось с этим встроенным словом ? Это один из модификаторов, которые мы можем использовать после определения слова, другой — 9.2061 рекурсивный . Это позволит нам иметь встроенное определение короткого слова, где бы оно ни использовалось, вместо вызова функции.

Попробуйте наше новое слово [2,b] и убедитесь, что оно работает

 6 [2,b] >массив .

Использование [2,b] для получения диапазона чисел от 2 до квадратного корня из n , которое уже находится в стеке, очень просто: sqrt floor [2,b] (технически floor здесь не нужен, так как [a,b] работает для нецелочисленных границ). Давайте попробуем

 16 sqrt [2,b] >массив .

Теперь нам нужно слово для проверки на делимость. Быстрый поиск в онлайн-справке показывает, что делитель ? — это слово, которое нам нужно. Это поможет иметь аргументы для проверки делимости в другом направлении, поэтому мы определяем кратное ?

 : несколько? ( a b -- ? ) делитель местами? ; в соответствии

Оба возвращаются t

 9 3 делитель? .
3 9 кратное? .

Если мы собираемся использовать bi в нашем определении простого , как мы подразумевали выше, нам нужна вторая цитата. Наша вторая цитата должна проверить значение в диапазоне, являющемся делителем n — другими словами, нам нужно частично применить слово , кратное? . Это можно сделать с помощью слова curry , например: [multiple? ] карри .

Наконец, когда у нас есть диапазон потенциальных делителей и тестовая функция в стеке, мы можем проверить, удовлетворяет ли какой-либо элемент делимости на любой? , а затем отрицайте этот ответ с помощью , а не . Наше полное определение Prime выглядит как


 : премьер? ( n -- ? ) [ sqrt [2,b] ] [ [ несколько? ] карри ] би любой? нет ;

Хотя определение prime сложное, перетасовка стека минимальна и используется только в небольших вспомогательных функциях, о которых проще рассуждать, чем о prime? .

Заметили, что простое число? использует два уровня вложенности котировок, начиная с bi работает с двумя цитатами, а наша вторая цитата содержит слово curry , которое также работает с цитатой. В общем, факторные слова имеют тенденцию быть довольно поверхностными, используя один уровень вложенности для каждой функции более высокого порядка, в отличие от Лиспа или более общих языков, основанных на лямбда-исчислении, которые используют один уровень вложенности для каждой функции более высокого порядка или нет. .

Существует гораздо больше комбинаторов, кроме bi (и его родственника tri ), и вам следует ознакомиться хотя бы с bi , tri , bi* и [email protected] , прочитав о них в интерактивной справке и попробовав их в слушателе.


Пришло время начать писать свои функции в файлах и научиться импортировать их в прослушиватель. Factor организует слова во вложенные пространства имен, называемые словарями . Вы можете импортировать все имена из словаря со словом USE: . На самом деле, вы могли видеть что-то вроде


 ИСПОЛЬЗОВАНИЕ: math. ranges

, когда вы попросили слушателя импортировать для вас слово [1,b] . Вы также можете использовать более одного словаря одновременно со словом USING: , за которым следует список словарей и заканчивается ; , вроде

 ИСПОЛЬЗОВАНИЕ: math.ranges sequences.deep ;

Наконец, вы определяете словарь, в котором хранятся ваши определения, с помощью слова IN: . Если вы ищете в онлайн-справке слово, которое вы уже определили, например премьер? , вы увидите, что ваши определения были сгруппированы в словаре по умолчанию Блокнот . Кстати, это показывает, что онлайн-помощь автоматически собирает информацию о ваших собственных словах, что является очень полезной функцией.

Есть еще несколько слов, таких как QUALIFIED: , FROM: , EXCLUDE: и RENAME: , которые позволяют более точно контролировать импорт, но USING: является наиболее распространенным.

На диске словари хранятся в нескольких корневых каталогах, подобно пути к классам в языках JVM. По умолчанию система начинает поиск в каталогах базис , ядро ​​, дополнительный , рабочий под Фактором домой. Вы можете добавить больше, как во время выполнения с помощью слова add-vocab-root , так и создав файл конфигурации .factor-rc , но пока мы будем хранить наши словари в каталоге work , который зарезервирован. для пользователя.

Создать шаблон для написания словаря

 ПРИМЕНЕНИЕ: инструменты.леса
"github.tutorial" скаффолд-работа

Вы найдете файл work/github/tutorial/tutorial.factor , содержащий пустой словарь. Factor интегрируется со многими редакторами, поэтому вы можете попробовать "github.tutorial" edit : вам будет предложено выбрать ваш любимый редактор и использовать этот редактор для открытия вновь созданного словаря.

Можно добавить определения предыдущего абзаца, чтобы выглядело как

 ! Copyright (C) 2014 Андреа Ферретти.
! См. http://factorcode.org/license.txt для лицензии BSD.
В: github.tutorial
: [2,b] ( n -- {2,...,n} ) 2 поменять местами [a,b] ; в соответствии
: несколько? ( a b -- ? ) делитель местами? ; в соответствии
: основной? ( n -- ? ) [ sqrt [2,b] ] [ [ несколько? ] карри ] би любой? нет ;

Поскольку словарь уже был загружен, когда вы его формировали, нам нужен способ обновить его с диска. Вы можете сделать это с помощью обновления «github.tutorial» . Есть еще обновить все слова с помощью ярлыка F2 .

Вам несколько раз будет предложено использовать словари, так как ваш оператор USING: пуст. Приняв их все, Factor предлагает вам новый заголовок со всеми необходимыми импортами:


 ИСПОЛЬЗОВАНИЕ: последовательности math.functions ядра math.ranges ;
В: github.tutorial

Теперь, когда в вашем словарном запасе есть несколько слов, вы можете отредактировать, скажем, кратное ? слова с \кратным? редактировать . Вы найдете свой редактор открытым в соответствующей строке нужного файла. Это также работает для слов в распределении Factor, хотя модифицировать их может быть плохой идеей.

Это слово \ требует небольшого пояснения. Это работает как побег, позволяя нам поместить ссылку на следующее слово в стеке, не выполняя его. Это именно то, что нам нужно, потому что edit — это слово, которое принимает сами слова в качестве аргументов. Этот механизм аналогичен цитатам, но в то время как цитата создает новую анонимную функцию, здесь мы напрямую ссылаемся на слово 9.2061 несколько? .

Вернувшись к нашей задаче, вы могли заметить, что слова [2,b] и кратны? — это просто вспомогательные функции, которые вы, возможно, не захотите раскрывать напрямую. Чтобы скрыть их от просмотра, вы можете обернуть их в приватный блок, подобный этому


: [2,b] ( n -- {2,...,n} ) 2 поменять местами [a,b] ; в соответствии
: несколько? ( a b -- ? ) делитель местами? ; в соответствии

После внесения этого изменения и обновления словарного запаса вы увидите, что слушатель не может ссылаться на такие слова, как [2,b] больше. Слово работает, помещая все определения в приватный блок в другой словарь, в нашем случае github.tutorial.private .

По-прежнему можно ссылаться на слова в приватных словарях, в чем можно убедиться, выполнив поиск [2,b] в онлайн-справке, но, конечно, это не рекомендуется, поскольку люди не гарантируют никакой стабильности API для приватных слов . Слова под github.tutorial могут относиться к словам в github.tutorial.private напрямую, как премьер? делает.

Тесты и документация

Самое время начать писать модульные тесты. Вы можете создать скелет с

 скаффолд-тесты "github.tutorial"

Вы находите сгенерированный файл под work/github/tutorial/tutorial-tests.factor , который вы можете открыть с помощью "github.tutorial" edit-tests . Обратите внимание на строку

 ИСПОЛЬЗОВАНИЕ: tools.test github.tutorial ;

, который импортирует модуль модульного тестирования, а также ваш собственный. Мы будем тестировать только общедоступный Prime? функция.

Тесты написаны с использованием слова модульного теста , которое ожидает две цитаты: первая содержит ожидаемые результаты, а вторая содержит слова, которые нужно выполнить, чтобы получить этот результат. Добавьте эти строки в github.tutorial-tests :


 [ т ] [ 2 простых числа? ] модульный тест
[ т ] [ 13 простых? ] модульный тест
[ т ] [ 29 простых? ] модульный тест
[ ж ] [ 15 простых? ] модульный тест
[ ф ] [ 377 простых? ] модульный тест
[ ж ] [ 1 простое число? ] модульный тест
[ т ] [ 20750750228539основной? ] модульный тест

Теперь вы можете запускать тесты с помощью теста "github.tutorial" . Вы увидите, что мы действительно допустили ошибку, и нажатие F3 покажет более подробную информацию. Кажется, что наши утверждения неверны для 2 .

На самом деле, если вы попытаетесь вручную запустить наши функции для 2 , вы увидите, что наше определение [2,b] возвращает { 2 } для 2 sqrt из-за того, что квадрат корень из двух меньше двух, поэтому мы получаем убывающий интервал. Попробуйте внести исправления, чтобы теперь тесты проходили.

Еще несколько слов для проверки ошибок и вывода эффектов стека. unit-test пока достаточно, но позже вы можете проверить must-fail и must-infer .

Мы также можем добавить некоторую документацию в наш словарь. Автоматически сгенерированная документация всегда доступна для определяемых пользователем слов (даже в прослушивателе), но мы можем написать некоторые полезные комментарии вручную или даже добавить пользовательские статьи, которые будут отображаться в интерактивной справке. Как и ожидалось, мы начинаем с "github.tutorial" scaffold-docs , а затем "github.tutorial" edit-docs .

Сгенерированный файл work/github/tutorial-docs.factor импортирует help.markup и help.syntax . Эти два словаря определяют слова для создания документации. Фактическая страница справки генерируется синтаксическим словом HELP: .

Аргументы для HELP: являются вложенным массивом вида { $directive content... } . В частности, вы видите здесь директивы $values ​​ и $description , но существуют и другие, такие как $errors , $examples и $see-alse .

Обратите внимание, что тип вывода ? считается логическим. Измените первые строки, чтобы они выглядели как


 ИСПОЛЬЗОВАНИЕ: help.markup help.syntax математика ядра ;
В: github.tutorial
ПОМОГИТЕ: премьер?
{ $значения
    {"n" фиксированное число}
    { "?" логическое значение }
{ $description "Проверяет, является ли n простым. Предполагается, что n является положительным целым числом." } ;

и обновите словарь github.tutorial . Если сейчас посмотреть справку по премьер? , например с \ прайм? help , вы увидите обновленную документацию.

Вы также можете отображать директивы в прослушивателе для более быстрой обратной связи. Например, попробуйте написать

 { $ значения
    {"n" целое}
    { "?" логическое значение }
} содержимое для печати

Разметка справки содержит множество возможных директив, и вы можете использовать их для написания отдельных статей в справочной системе. Взгляните на некоторые другие с "типы элементов" справка .

Система объектов и протоколы

Хотя это не очевидно из того, что мы сказали до сих пор, Factor имеет объектно-ориентированные функции, и многие ключевые слова на самом деле являются вызовами методов. Чтобы лучше понять, как ведут себя объекты в Factor, цитата по порядку:

Я придумал термин «объектно-ориентированный» и могу сказать вам, что не имел в виду C++.

Алан Кей

Термин «объектно-ориентированный» имеет столько различных значений, сколько людей его используют. Одна точка зрения, которая была центральной в работе Алана Кея, состоит в том, что речь идет о позднем связывании имен функций. В Smalltalk, языке, где родилась эта концепция, люди не говорят о вызове метода, а скорее об отправке сообщения объекту. Объект сам решает, как реагировать на это сообщение, и вызывающая сторона не должна знать о реализации. Например, можно отправить сообщение отображает как в массив, так и в связанный список, но внутри итерация будет обрабатываться по-разному.

Привязка имени сообщения к реализации метода является динамической, и это считается основной силой объектов. В результате из кооперации независимых объектов, не вмешивающихся друг в друга внутренностями, могут развиваться достаточно сложные системы.

Справедливости ради следует отметить, что Factor сильно отличается от Smalltalk, но все же существует концепция классов, и общие слова могут быть определены в разных реализациях для разных классов.

Некоторые классы встроены в Factor, например string , boolean , fixnum или word . Далее, наиболее распространенным способом определения класса является кортеж . Кортежи определяются с помощью слова разбора TUPLE: , за которым следует имя кортежа и поля класса, который мы хотим определить, которые называются слотами на языке Factor.

Определим класс для фильмов:

 TUPLE: название фильма режиссер актеры ;

Это также генерирует сеттеры >>заголовок , >>директор и >>актеры и геттеры титул>> , директор>> и актеры>> . Например, мы можем создать новый фильм с

 фильм новый "Престиж" >>название
  «Кристофер Нолан» >>режиссер
  { "Хью Джекман" "Кристиан Бэйл" "Скарлетт Йоханссон" } >>актеры

Мы также можем сократить это до


 «Престиж» «Кристофер Нолан»
{ "Хью Джекман" "Кристиан Бэйл" "Скарлетт Йоханссон" }
фильм боа

Слово boa означает «по порядку аргументов» и представляет собой конструктор, который заполняет слоты кортежа элементами стека по порядку. киноудав называется удав-конструктор , каламбур от Удава-констриктора. Принято определять наиболее распространенный конструктор с именем , который в нашем случае может быть просто


 :  (название режиссер актеры -- фильм ) movie boa ;

На самом деле конструкторы удавов встречаются довольно часто, поэтому приведенную выше строку можно сократить до


 C: <фильм> фильм

В других случаях вы можете захотеть использовать некоторые значения по умолчанию или вычислить некоторые поля.

Функциональные люди будут обеспокоены изменчивостью кортежей. На самом деле слоты могут быть объявлены доступными только для чтения с помощью {имя слота только для чтения} . В этом случае сеттер поля не будет сгенерирован, и значение должно быть установлено в начале с помощью конструктора удава. Другие допустимые модификаторы слотов: 9.2061 начальный: — для объявления значения по умолчанию — и слово класса, например целое число , для ограничения значений, которые можно вставлять.

В качестве примера мы определяем еще один класс кортежей для рок-групп

 КУРТКА: лента
  { строка клавиатуры только для чтения }
  { гитарная струна только для чтения }
  { басовая струна только для чтения }
  { барабанная струна только для чтения } ;
: <группа> ( клавишные гитара бас барабаны -- группа ) группа удав ;

вместе с одним экземпляром

 "Ричард Райт" "Дэвид Гилмор" "Роджер Уотерс" "Ник Мейсон" <группа>

Теперь, конечно, все знают, что в кино звезда – это первый актер, а в рок-группе – басист. Чтобы закодировать это, мы сначала определяем общее слово

 GENERIC: звездочка (элемент -- звездочка)

Как видите, он объявлен с помощью слова разбора GENERIC: и объявляет свои эффекты стека, но прямо сейчас не имеет реализации, поэтому нет необходимости в закрывающем ; . Общие слова используются для выполнения динамической диспетчеризации. Мы можем определить реализации для различных классов, используя слово М:

 M: кинозвезды актеры>> первый ;
M: бэнд звездный бас>> ;

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

Встроенные классы и классы кортежей — это не все, что есть в объектной системе: с помощью операций над множествами, таких как UNION: и INTERSECTION: , можно определить больше классов. Другой способ определить класс — это миксин .

Миксины определяются с помощью слова MIXIN: , и существующие классы могут быть добавлены к миксинам, написавшим


 INSTANCE: миксин класса

Методы, определенные в миксине, будут доступны для всех классов, принадлежащих миксину. Если вы знакомы с классами типов Haskell, вы узнаете сходство, хотя Haskell требует во время компиляции, чтобы экземпляры классов типов реализовывали определенные функции, в то время как в Factor это неофициально указано в документации.

Двумя важными примерами миксинов являются последовательность и assoc . Первый определяет протокол, доступный для всех конкретных последовательностей, таких как строки, связанные списки или массивы, а второй определяет протокол для ассоциативных массивов, таких как хэш-таблицы или списки ассоциаций.

Это позволяет обрабатывать все последовательности в Factor с помощью общего набора слов, отличаясь при этом реализацией и сводя к минимуму повторение кода (поскольку требуется только несколько примитивов, а другие операции определены для 9).2061 последовательность класс). Наиболее распространенными операциями, которые вы будете использовать с последовательностями, являются map , filter и reduce , но их гораздо больше — как вы можете видеть с помощью «sequences» help .

Изучение инструментов

Большая часть производительности Factor связана с глубокой интеграцией языка и библиотек с инструментами вокруг них, которые воплощены в слушателе. Многие функции слушателя можно использовать программно, и наоборот. Вы видели несколько примеров этого:

  • по справке можно перемещаться онлайн, но вы также можете вызвать ее с помощью help и распечатать элементы справки с помощью print-content ;
  • ярлык F2 или слова обновить и обновить-все можно использовать для обновления словарей с диска при продолжении работы в прослушивателе;
  • слово редактировать обеспечивает интеграцию с редактором, но вы также можете щелкнуть имена файлов на страницах справки, чтобы открыть словари.

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

 : вкл ( х -- у ) 1 + ;
: inc-print ( x -- ) inc . ;
5 вкл-принт

, а затем

 : вкл ( х -- у ) 2 + ;
5 вкл-принт

Это позволяет вам всегда держать прослушиватель открытым, улучшая ваши определения, периодически сохраняя ваши определения в файл и обновляя их без перезагрузки Factor.

Вы также можете сохранить все состояние Factor с помощью слова save-image и позже восстановить его, запустив Factor с

 ./factor -i=путь к изображению

Фактически, Factor основан на изображениях и использует файлы только при загрузке и обновлении словарей.

На этом сила слушателя не заканчивается. Элементы стека можно осмотреть, нажав на них, или вызвав слово инспектор . Например, попробуйте написать


 TUPLE: трилогия первая вторая третья ;
: <трилогия> ( первая вторая третья -- трилогия ) трилогия удав ;
«Новая надежда» «Империя наносит ответный удар» «Возвращение джедая» <трилогия>
"Джордж Лукас" 2 массива

Вы получите предмет, похожий на


 { ~трилогия~ "Джордж Лукас" }

в стеке. Попробуйте щелкнуть по нему: вы сможете увидеть слоты массива и сфокусироваться на трилогии или на струне, дважды щелкнув по ним. Это чрезвычайно полезно для интерактивного прототипирования. Специальные объекты могут настраивать инспектор, реализуя метод content-gadget .

Есть еще один инспектор ошибок. Всякий раз, когда возникает ошибка, ее можно проверить с помощью Ф3 . Это позволяет вам исследовать исключения, плохие объявления эффектов стека и так далее. Отладчик позволяет вам пошагово входить в код как вперед, так и назад, и вам следует уделить некоторое время тому, чтобы немного с ним ознакомиться. Вы также можете запустить отладчик вручную, введя код в прослушиватель и нажав Ctrl+w .

Еще одна функция слушателя позволяет вам тестировать код. В качестве примера мы пишем намеренно неэффективный Фибоначчи:


 ОТЛОЖИТЬ: fib-rec
: fib ( n -- f(n)) dup 2 < [ ] [ fib-rec ] if ;
: fib-rec ( n -- f(n)) [ 1 - fib ] [ 2 - fib ] bi + ;

(обратите внимание на использование DEFER: для определения двух взаимно рекурсивных слов). Вы можете измерить время работы, написав 40 fib , а затем нажав Ctrl+t вместо Enter. Вы получите информацию о времени, а также другую статистику. Программно вы можете использовать слово time в цитате, чтобы сделать то же самое.

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

 \ выдумка смотреть

, а затем запустите 10 fib , чтобы посмотреть, что произойдет. Затем можно удалить часы с помощью \fib reset .

Другим очень полезным инструментом является словарь lint . Это сканирует определения слов, чтобы найти повторяющийся код, который можно исключить. В качестве примера давайте определим слово, чтобы проверить, начинается ли строка с другого. Создать тестовую лексику

 строительные леса "lintme"

и добавьте следующее определение

 ИСПОЛЬЗОВАНИЕ: последовательности ядра ;
В: Линтме
: начинается с? ( str sub -- ? ) dup длина swapd head = ;

Загрузите инструмент lint с помощью USE: lint и напишите "lintme" lint-vocab . Вы получите отчет о том, что последовательность слов length swapd уже используется в слове (split) из splitting.private , поэтому ее можно исключить.

Конечно, вам не захочется изменять источник слова в стандартной библиотеке, не говоря уже о частной, но в более сложных случаях инструмент lint может найти фактические повторения. Это хорошая идея время от времени проверять словари, чтобы избежать дублирования кода и как хороший способ обнаружить библиотечные слова, которые вы могли случайно переопределить.

Наконец, есть несколько утилит для проверки слов. Вы можете увидеть определение слова в справочном инструменте, но более быстрым способом может быть см. . Или, наоборот, можно использовать . для проверки абонентов данного слова. Попробуйте \reverse посмотреть и \reverse использование. .


Теперь мы отправляемся в мир метапрограммирования и пишем наше первое слово для синтаксического анализа. К настоящему времени вы видели много слов для разбора, таких как [ . { , H { , USE: , IN: , , GENERIC: и так далее. Каждый из них определяется словом синтаксического анализа SYNTAX: и взаимодействует с парсером Factor.

Синтаксический анализатор накапливает токены в векторе-аккумуляторе, если он не находит слово синтаксического анализа, которое выполняется немедленно. Поскольку слова синтаксического анализа выполняются во время компиляции, они не могут взаимодействовать со стеком, но имеют доступ к вектору-аккумулятору. Эффект их стека должен быть равен ( аккум -- аккум ) . Обычно они запрашивают у синтаксического анализатора еще несколько токенов, что-то с ними делают и, наконец, помещают результат в вектор-аккумулятор с суффиксом слова ! .

В качестве примера мы определим литерал для последовательностей ДНК. Последовательность ДНК представляет собой последовательность одного из оснований цитозина, гуанина, аденина и тимина, которую мы будем обозначать буквами с, г, а, т. Поскольку существует четыре возможных основания, мы можем закодировать каждое двумя битами. Позвольте использовать определить слово

 : днк>биты ( токен -- биты ) {
  { "а" [ {ж ж } ] }
  { "с" [ { т т } ] }
  { "г" [ { ж т } ] }
  { "т" [ { т ж } ] }
} кейс ;

, где первый бит указывает, является ли основание пурином или пиримидином, а второй идентифицирует основания, которые соединяются друг с другом.

Наша цель — прочитать последовательность букв a, c, g, t — возможно, с пробелами — и преобразовать их в битовый массив. Factor поддерживает битовые массивы, а литеральные битовые массивы выглядят как ?{ f f t } .

Наш синтаксис для ДНК будет начинаться с DNA{ и получать все токены до тех пор, пока не будет найден закрывающий токен } . Промежуточные токены будут помещены в строку, и с помощью нашей функции dna>bits мы отобразим эту строку в битовый массив. Для чтения токенов мы будем использовать слово parse-tokens . Есть несколько слов более высокого уровня для взаимодействия с синтаксическим анализатором, например parse-until и parse-literal , но мы не можем применить их в нашем случае, так как токены, которые мы найдем, являются просто последовательностями c g t, а не действительных слов-факторов. Давайте начнем с простого приближения, которое просто считывает токены между нашими разделителями и выводит строку, полученную конкатенацией

 СИНТАКСИС: DNA{ "}" синтаксический анализ токенов concat суффикс!

Вы можете проверить эффект, выполнив DNA{ a ccg t a g } , что должно вывести "accgtag" . Во втором приближении преобразуем каждую букву в логическую пару:

 СИНТАКСИС: DNA{ "}" синтаксический анализ-токены concat
  [ 1string dna>bits ] { } map-as suffix! ;

Обратите внимание на использование карты как вместо карты . Поскольку целевая коллекция не является строкой, мы не использовали map , который сохраняет тип, но map-as , которые принимают в качестве дополнительного аргумента экземпляр целевой коллекции — здесь { } . Наша окончательная версия сглаживает массив пар с concat и, наконец, превращает его в битовый массив:

 СИНТАКСИС: DNA{ "}" синтаксический анализ-токены concat
  [ 1string dna>bits ] { } map-as
  concat > суффикс битового массива! ;

Если вы попробуете это с ДНК { a ccg t a g } , вы должны получить

 `?{ Ф Ф Т Т Т Т Ф Т Т Ф Ф Ф Ф Ф Т }`

Давайте сделаем еще один очень простой пример, украденный у Джона Бенедиктссона, который касается инфиксного синтаксиса для диапазонов. До сих пор мы использовали [a,b] для создания диапазона. Мы можем сделать синтаксис более удобным для людей из других языков, используя ... в качестве инфиксного слова.

Мы можем использовать scan-object , чтобы запросить у синтаксического анализатора следующий проанализированный объект, и unclip-last , чтобы получить верхний элемент из вектора-аккумулятора. Таким образом, мы можем определить . .. просто с

 СИНТАКСИС: ... unclip-last-scan-object [a,b] suffix! ;

Вы можете попробовать это с 12 ... 18 >массив .

Мы только коснулись разбора слов; в общем, они позволяют выполнять произвольные вычисления во время компиляции, обеспечивая мощные формы метапрограммирования.

В каком-то смысле синтаксис Factor совершенно плоский, а синтаксический анализ слов позволяет вводить более сложные синтаксисы, чем поток токенов для локального использования. Это позволяет расширить язык Factor, добавив множество новых функций в виде библиотек. В принципе, можно было бы даже скомпилировать внешний язык в Factor — скажем, JavaScript — и встроить его как DSL Factor в границы слова разбора. Требуется некоторый вкус, чтобы не злоупотреблять этим слишком сильно, чтобы ввести стили, которые слишком чужды в конкатенативном мире.

Когда стека не хватает

До сих пор я немного жульничал и старался избегать написания примеров, которые были бы слишком сложными для написания в конкатенативном стиле. По правде говоря, вы найдете случаи, когда это слишком ограничительно. К счастью, синтаксический анализ слов позволяет обойти эти ограничения, а в Factor есть несколько вариантов, позволяющих справиться с наиболее распространенными неприятностями.

Одна вещь, которую вы, возможно, захотите сделать, это дать имена локальным переменным. Слово :: работает так же, как : , но позволяет вам на самом деле связать имена параметров стека с переменными, чтобы вы могли использовать их несколько раз в нужном вам порядке. Например, давайте определим слово для решения квадратных уравнений. Я избавлю вас от чисто стековой версии и представлю вам версию с локалами (для этого потребуется словарь локалов ):

 :: решитьq ( a b c -- x )
  б отрицательный
  б б * 4 а в * * - кврт
  2 а * / ;

В этом случае мы выбрали знак +, но мы можем поступить лучше и вывести оба решения:

 :: решитьq ( a b c -- x1 x2 )
  б отрицательный
  б б * 4 а в * * - кврт
  [ + ] [ - ] 2би
  [ 2 a * / ] [email protected] ;

Вы можете проверить, что это определение работает с чем-то вроде 2 -16 30solveq , что должно выводить как 3. 0 , так и 5.0 . Помимо написания в стиле RPN, наша первая версия solveq выглядит точно так же, как на языке с локальными переменными. Для второго определения мы применяем как + и - операций для -b и дельты, используя комбинатор 2bi , а затем разделите оба результата на 2a, используя [email protected] .

Также есть поддержка местных в кавычках - с помощью [| - и методы - с использованием M:: - и также можно создать область, в которой можно связать локальные переменные вне определений, используя [пусть . Конечно, все они на самом деле скомпилированы в конкатенативный код с некоторой перетасовкой стека. Я рекомендую вам просмотреть примеры этих слов, но имейте в виду, что их использование на практике гораздо менее заметно, чем можно было бы ожидать — около 1% собственной кодовой базы Factor.

Другой более распространенный случай возникает, когда вам нужно специализировать цитату по некоторым значениям, но они не появляются в нужном месте. Помните, что вы можете частично применить котировку, используя curry . Но это предполагает, что значение, которое вы применяете, должно быть самым левым в цитате; в других случаях вам нужно перетасовать стек. Слово с - это своего рода частичное приложение с дыркой. Он также содержит цитату, но использует третий элемент в стеке вместо второго. Кроме того, полученная каррированная цитата будет применена к элементу, вставившем ее на вторую позицию.

Пример из документации, вероятно, говорит больше, чем приведенное выше предложение: попробуйте написать 1 { 1 2 3 } [ / ] с картой .

Позвольте мне снова взять премьер? , но на этот раз напишите его без вспомогательных слов:

 : премьер? ( n -- ? ) [ sqrt 2 поменять местами [a,b] ] [ [ поменять местами делитель? ] карри ] би любой? нет ;

Используя с вместо curry , это упрощается до

 : премьер? ( n -- ? ) 2 над sqrt [a,b] [ делитель? ] с любого? нет ;

Если вы не представляете, что происходит, вы можете рассмотреть словарь fry . Он определяет жареных котировок ; это котировки, в которых есть дыры, отмеченные _ , которые заполнены значениями из стека.

Первая цитата переписывается проще как

 [ '[ 2 _ sqrt [a,b] ] вызов ]

Здесь мы используем жареную цитату — начиная с '[ — чтобы внедрить элемент на вершине стека во вторую позицию, а затем используем позвоните по номеру , чтобы оценить полученное предложение. Вторая цитата становится просто

 [ '[ _ поменять местами делитель? ] ]

, так что альтернативное определение простое? это

 : премьер? ( n -- ? ) [ '[ 2 _ sqrt [a,b] ] call ] [ '[ _ поменять местами делитель? ] ] би любой? нет ;

В зависимости от вашего вкуса эта версия может показаться вам более читаемой. В этом случае добавленная ясность, вероятно, теряется из-за того, что жареные цитаты сами по себе находятся внутри цитат, но иногда их использование может многое сделать для упрощения потока.

Наконец, бывают случаи, когда просто нужно дать имена переменным, доступным внутри некоторой области, и использовать их там, где это необходимо. Эти переменные могут содержать значения, которые являются глобальными или, по крайней мере, не локальными для одного слова. Типичным примером могут быть входные и выходные потоки или соединения с базой данных.

Factor позволяет создавать динамических переменных и связывать их в области видимости. Первым делом нужно создать символ для переменной, скажем

 СИМВОЛ: любимый язык

Затем можно использовать слово set для привязки переменной и get для получения ее значений, например

 Набор любимых языков "Фактор"
любимый язык получить

Области являются вложенными, и новые области могут быть созданы с помощью слова with-scope . Попробуйте например

 : на JVM ( -- ) [
  Набор любимых языков "Скала"
  любимый язык получить . 
] с областью действия ;

Если вы запустите на JVM вы получите "Scala" напечатано, но все же после выполнения любимый язык получите return "Factor" .

Все инструменты, которые мы видели в этом разделе, следует использовать по мере необходимости, так как они нарушают конкатенацию и затрудняют факторизацию слов, но при необходимости они могут значительно повысить ясность. Factor имеет очень практичный подход и не стесняется предлагать функции, которые менее чисты, но, тем не менее, часто полезны.


Теперь мы заканчиваем экскурсию по языку и начинаем исследовать, как взаимодействовать с внешним миром. Я начну в этом разделе с нескольких примеров ввода/вывода, но это неизбежно приведет к обсуждению асинхронности. В оставшейся части руководства более подробно рассматриваются параллельные и распределенные вычисления.

Factor реализует эффективные средства асинхронного ввода-вывода, аналогичные NIO на JVM или системе ввода-вывода Node. js. Это означает, что операции ввода и вывода выполняются в фоновом режиме, оставляя задачу переднего плана свободной для выполнения работы, пока диск вращается или сеть буферизует пакеты. Фактор в настоящее время является однопоточным, но асинхронность позволяет ему быть довольно производительным для приложений, которые связаны с вводом-выводом.

Все слова ввода/вывода Factor сосредоточены на потоках . Потоки — это ленивые последовательности, которые можно читать или записывать, типичными примерами являются файлы, сетевые порты или стандартный ввод и вывод. Factor содержит пару динамических переменных, называемых input-stream и output-stream , которые используются большинством слов ввода/вывода. Эти переменные можно восстановить локально, используя with-input-stream , with-output-stream и with-streams 9.2062 . Когда вы находитесь в прослушивателе, потоки по умолчанию записывают и читают в прослушивателе, но как только вы развертываете свое приложение как исполняемый файл, они обычно привязываются к стандартному вводу и выводу вашей консоли.

Слова и (или ) могут использоваться для создания потока чтения или записи в файл, учитывая его путь и кодировку. Собрав все вместе, мы делаем простой пример слова, которое читает каждую строку файла, закодированного в UTF8, и записывает слушателю первую букву строки.

Во-первых, нам нужно слово safe-head , которое работает как head , но возвращает свой вход, если последовательность слишком короткая. Для этого мы будем использовать слово recovery , которое позволяет нам объявить блок try-catch. Требуются две цитаты: выполняется первая, а в случае неудачи выполняется вторая с ошибкой на входе. Следовательно, мы можем определить

 : safe-head (seq n -- seq') [голова] [2drop] восстановить;

Это в основном повод показать пример исключений, как Фактор определяет короткое слово , которое принимает последовательность и число и возвращает минимум между длиной последовательности и числом. Это позволяет нам писать просто

 : safe-head (seq n -- seq') короткая головка;

С помощью этого определения мы можем составить слово, которое будет читать первый символ первой строки:

 : чтение первых букв ( путь -- )
  utf8 <файл-читатель> [
    readln 1 безопасная запись nl
  ] с входным потоком ;

Использование вспомогательного слова с программой чтения файлов , мы также можем сократить это до


 : чтение первых букв ( путь -- )
  utf8 [
    readln 1 безопасная запись nl
  ] с программой чтения файлов ;

К сожалению, мы ограничены одной строкой. Чтобы прочитать больше строк, мы должны связать вызовы readln , пока один из них не вернет f . Factor помогает нам со словом file-lines , которое лениво перебирает строки. Наше окончательное определение становится


 : чтение первых букв ( путь -- )
  строки файла utf8 [ 1 безопасная запись nl ] каждая ;

Если файл небольшой, можно также использовать содержимое файла для чтения всего содержимого файла в одной строке. Factor определяет гораздо больше слов для ввода/вывода, которые охватывают гораздо больше случаев, таких как двоичные файлы или сокеты.

Мы заканчиваем этот раздел исследованием некоторых слов для обхода файловой системы. Наша цель — очень минимальная реализация команды ls .

Слово directory-entries перечисляет содержимое каталога, давая список элементов кортежа, каждый из которых имеет слоты имя и тип . Вы можете увидеть это, попробовав "/home" каталог-записи [ имя>> ] карту . Если вы проверите записи каталога, вы увидите, что это тип либо +directory+ , либо +regular-file+ (ну, есть и симлинки, но мы их проигнорируем для простоты). Следовательно, мы можем определить слово, в котором перечислены файлы и каталоги с номером


 : список файлов и каталогов ( путь -- каталоги файлов )
    записи-каталога [тип>> +обычный-файл+ = ] раздел ;

Таким образом, мы можем определить слово ls , которое будет печатать содержимое каталога следующим образом:

 : лс ( путь -- )
  список файлов и каталогов
  "КАТАЛОГИ:" напишите nl
  "------------" напишите нл
  [имя>> написать nl ] каждый
  "ФАЙЛЫ:" написать nl
  "------" напишите нл
  [имя>> написать nl] каждый;

Попробуйте слово в своем домашнем каталоге, чтобы увидеть эффект. В следующем разделе мы рассмотрим, как создать исполняемый файл для нашей простой программы.

Развертывание программ

Существует два способа запуска программ Factor вне прослушивателя: как сценарии, которые интерпретируются Factor, или как автономный исполняемый файл, скомпилированный для вашей платформы. Оба требуют, чтобы вы определили словарь с точкой входа (хотя для скриптов есть еще более простой способ), так что давайте сначала сделаем это.

Начните с создания нашего словаря ls с помощью "ls" скаффолда и сделайте так, чтобы он выглядел так:

 ! Copyright (C) 2014 Андреа Ферретти.
! См. http://factorcode.org/license.txt для лицензии BSD.
ИСПОЛЬЗОВАНИЕ: командная строка доступа io io.directories io.files.types
  последовательности пространств имен ядра;
В: лс
: список файлов и каталогов ( путь -- каталоги файлов )
    записи-каталога [тип>> +обычный-файл+ = ] раздел ;
: лс ( путь -- )
  список файлов и каталогов
  "КАТАЛОГИ:" напишите nl
  "------------" напишите нл
  [имя>> написать nl ] каждый
  "ФАЙЛЫ:" написать nl
  "------" напишите нл
  [имя>> написать nl] каждый;

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


 : ls-run ( -- ) командная строка получить первый ls ;

Наконец, мы используем слово MAIN: для объявления основного слова нашего словаря:

 ОСНОВНОЙ: ls-run

Добавив эти две строчки в свой словарь, вы теперь готовы запустить его. Самый простой способ — запустить словарь как скрипт с флагом -run , переданным в Factor. Например, чтобы перечислить содержимое моего дома, я могу сделать


 ./factor -run=ls /home/andrea

Чтобы создать исполняемый файл, мы должны установить некоторые параметры и вызвать слово deploy . Самый простой способ сделать это графически — вызвать инструмент развертывания 9.2062 слово. Если вы напишете "ls" deploy-tool , вам будет представлено окно для выбора параметров развертывания. Для нашего простого случая мы оставим параметры по умолчанию и выберем Deploy.

Через некоторое время вам должен быть представлен исполняемый файл, который вы можете запустить, как


 кд лс
./ls /дом/андреа

Попробуйте сделать программу ls более надежной, обрабатывая отсутствующие аргументы командной строки и несуществующие аргументы или аргументы, не относящиеся к каталогу.


Как мы уже говорили, среда выполнения Factor является однопоточной, как и Node. Тем не менее, можно эмулировать параллелизм в однопоточной настройке, используя сопрограмм . По сути, это взаимодействующие потоки, которые периодически освобождают управление с помощью слова , возвращающего , так что планировщик может решить, какую сопрограмму запустить следующей.

Хотя совместные потоки не позволяют использовать несколько ядер, они все же имеют некоторые преимущества:

  • операции ввода-вывода позволяют избежать блокировки всей среды выполнения, так что можно реализовать достаточно производительные приложения, если узким местом является ввод-вывод;
  • Пользовательские интерфейсы

  • , естественно, являются многопоточной конструкцией, и они могут быть реализованы в этой модели, как показывает сам слушатель;
  • , наконец, некоторые задачи, естественно, проще писать с использованием многопоточных конструкций.

Для случаев, когда нужно использовать несколько ядер, Factor предлагает возможность порождать другие процессы и обмениваться данными между ними с использованием каналов , как мы увидим в следующем разделе.

Темы в Факторах созданы из цитаты и имени, с порожденным словом . Давайте воспользуемся этим для печати первых нескольких строк «Звездных войн» по одной в секунду, причем каждая строка печатается внутри своего собственного потока. Во-первых, давайте запишем эти строки внутри динамической переменной:


 СИМВОЛ: звездные войны
"Давным-давно, в далекой-далекой галактике...
Это период гражданской войны. Бунтарь
космические корабли, наносящие удар из скрытого
базу, одержали первую победу
против злой Галактической Империи.
В ходе боя повстанческим шпионам удалось
украсть секретные планы Империи
совершенное оружие, ЗВЕЗДА СМЕРТИ,
бронированная космическая станция с достаточным
способность уничтожить целую планету.
Преследуемый зловещими агентами Империи,
Принцесса Лея мчится домой на своем борту
звездолет, хранитель украденных планов
что может спасти свой народ и восстановить
свободу галактике. .."
"\n" разделенный набор звездных войн

Мы создадим 18 потоков, каждый из которых будет печатать строку. Операция, которую должен выполнить поток, составляет


 звездных войн получили пятый тираж

Обратите внимание, что динамические переменные являются общими для потоков, поэтому каждый из них имеет доступ к звездным войнам. Это нормально, так как он доступен только для чтения, но применяются обычные предостережения относительно общей памяти в многопоточных настройках.

Определим слово для рабочей нагрузки потока

 : print-a-line ( i -- ) star-wars get ?nth print ;

Если мы дадим i-му потоку имя "i", наш пример составит

 18 [0,б) [
  [ [ распечатать строку ] карри ]
  би спавн
] каждый

Обратите внимание на использование curry для отправки i в котировку, которая печатает i-ю строку. Это почти то, что мы хотим, но это работает слишком быстро. Нам нужно усыпить нить на некоторое время. Итак, мы очищаем стек, который теперь содержит множество объектов потока, и ищем в справке слово sleep .

Получается, что sleep делает именно то, что нам нужно, но на вход принимает объект длительность . Мы можем создать продолжительность i секунд с... хорошо i секунд . Итак, мы определяем

 : ожидание и печать ( i -- ) dup секунд сон печать строки ;


 18 [0,б) [
  [ [ ждать и печатать ] карри ]
  би спавн
] каждый

Вместо spawn мы также можем использовать в потоке , который использует фиктивное имя потока и отбрасывает возвращенный поток, упрощая вышеприведенное до

 18 [0,б) [
  [ ждать и печатать ] карри в треде
] каждый

Этого достаточно для нашей простой цели. В серьезных приложениях объявления будут работать долго. Чтобы заставить их сотрудничать, можно использовать слово yield , чтобы сигнализировать о том, что поток выполнил единицу работы, и другие потоки могут получить управление. Вы также можете взглянуть на другие слова, чтобы остановить , приостановить или возобновить потоков.

Серверы и печь

Очень распространенный случай использования более одного потока — при написании серверных приложений. При написании сетевых приложений принято запускать поток для каждого входящего соединения (помните, что это зеленые потоки, поэтому они намного легче, чем потоки ОС).

Чтобы упростить это, Factor имеет слово spawn-server , которое работает так же, как spawn , но вдобавок неоднократно порождает цитату, пока не вернет f . Это все еще очень низкоуровневое слово: на самом деле нужно делать гораздо больше: прослушивать TCP-соединения на заданном порту, обрабатывать лимиты соединений и так далее.

Словарь io.servers позволяет писать и настраивать TCP-серверы. Сервер создается со словом , для которого в качестве параметра требуется кодировка. Затем его слоты можно настроить для настройки ведения журнала, ограничений на количество подключений, портов и т. д. Наиболее важным слотом для заполнения является обработчик , который содержит котировку, которая выполняется для каждого входящего соединения. Вы можете увидеть очень простой пример сервера с

 "resource:extra/time-server/time-server.factor" редактировать файл

Мы еще больше поднимем уровень абстракции и покажем, как запустить простой HTTP-сервер. Во-первых, USE: http.server .

HTTP-приложение создано из ответчика . Ответчик — это, по сути, функция от пути и HTTP-запроса до HTTP-ответа, но, более конкретно, это все, что реализует метод call-responder* . Ответы являются экземплярами кортежа response , поэтому обычно генерируются вызовом и настроить несколько слотов. Давайте напишем простой эхо-ответчик:

 TUPLE: эхо-ответчик ;
: <эхо-ответчик> ( -- ответчик ) эхо-ответчик новый ;
M: эхо-ответчик*
    200 >>код
    "Документ следует" >>сообщение
    "текст/обычный" >> тип содержимого
    поменять местами concat >>тело ;


обычно объединяются для формирования более сложных ответчиков для реализации маршрутизации и других функций. В нашем упрощенном примере мы будем использовать только этот ответчик и установим его глобально с помощью

  main-responder set-global

После этого вы можете запустить сервер с 8080 httpd . Затем вы можете посетить http://localhost:8080/hello/%20/from/%20/factor в своем браузере, чтобы увидеть своего первого ответчика в действии. Затем вы можете остановить сервер с помощью stop-server .

Теперь, если бы это было все, что Factor предлагает для написания веб-приложений, это все равно было бы довольно низким уровнем. На самом деле веб-приложения обычно пишутся с использованием веб-фреймворка под названием 9.0559 Печь .

Furnace позволяет нам, среди прочего, писать более сложные действия, используя язык шаблонов. На самом деле, по умолчанию поставляются два языка шаблонов, и мы будем использовать Chloe . Furnace позволяет нам использовать действия страницы create из шаблонов Chloe, а для создания ответчика нам нужно будет добавить маршрутизацию.

Сначала рассмотрим простой пример маршрутизации. Для этого мы создаем специальный тип ответчика, называемый диспетчер , который отправляет запросы на основе параметров пути. Давайте создадим простой диспетчер, который будет выбирать между нашим эхо-ответчиком и ответчиком по умолчанию, используемым для обслуживания статических файлов.

 диспетчер новый диспетчер
   "echo" дополнительный ответчик
  "/home/andrea"  "home" ответ на добавление
  основной ответчик set-global

Конечно, замените путь /home/andrea на любую папку, которая вам нравится. Если вы снова запустите сервер с 8080 httpd , вы сможете увидеть как наш простой эхо-ответчик (под /echo ), так и содержимое ваших файлов (под /home ). Обратите внимание, что список каталогов по умолчанию отключен, вы можете получить доступ только к содержимому файлов.

Теперь, когда вы знаете, как выполнять маршрутизацию, мы можем написать действия страницы в Chloe. Все начинает усложняться, поэтому мы формируем словарь с помощью "hello-печь" скаффолд-работа . Сделайте так:

 ! Copyright (C) 2014 Андреа Ферретти.
! См. http://factorcode.org/license.txt для лицензии BSD.
ИСПОЛЬЗОВАНИЕ: аксессуары печи.действия http http.server
  http.server.dispatchers http.server.static последовательности ядра ;
IN: привет-печь
TUPLE: эхо-ответчик ;
: <эхо-ответчик> ( -- ответчик ) эхо-ответчик новый ;
M: эхо-ответчик*
    200 >>код
    "Документ следует" >>сообщение
    "текст/обычный" >> тип содержимого
    поменять местами concat >>тело ;
TUPLE: привет-диспетчер < диспетчер ;
: <пример-ответчик> ( -- ответчик )
  привет-диспетчер новый-диспетчер
     "echo" дополнительный ответчик
    "/home/andrea"  "home" ответ на добавление
    <действие страницы>
      { привет-диспетчер "привет" } >>шаблон
    "Хлоя" добавить ответчик;

Большинство вещей такие же, как мы сделали в слушателе. Единственная разница в том, что мы добавили в диспетчере третьего респондента под номером chloe . Этот ответчик создается с действием страницы. Действие страницы имеет много слотов — скажем, для объявления поведения получения результата формы — но мы задаем только его шаблон. Это пара с классом диспетчера и относительным путем к файлу шаблона.

Для того, чтобы все это работало, создайте файл work/hello-furnace/greetings.xml с содержимым вроде



Привет от Хлои

Перезагрузите словарь hello-furnace и main-responder set-global . Вы должны увидеть результаты своих усилий по адресу http://localhost:8080/chloe . Обратите внимание, что нет необходимости перезапускать сервер, мы можем динамически менять основной ответчик.

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

Процессы и каналы

Как я уже сказал, Factor является однопоточным с точки зрения ОС. Если мы хотим использовать несколько ядер, нам нужен способ запуска процессов Factor и взаимодействия между ними. Factor реализует две разные модели параллелизма при передаче сообщений: акторную модель, основанную на идее асинхронной отправки сообщений между потоками, и модель CSP, основанную на использовании каналов .

В качестве разминки мы сделаем простой пример взаимодействия между потоками в одном процессе.

 ОТ: concurrency.messaging => отправить получить ;

Мы можем запустить поток, который будет получать сообщение и многократно его печатать:

 : печатать-повторно ( -- ) получать . печатать-повторно ;
[ печать-неоднократно ] "принтер" спавн

Поток, цитата которого начинается с , получает и рекурсивно вызывает себя, ведет себя как актор в Erlang или Akka. Тогда мы можем использовать отправить для отправки сообщений на него. Попробуйте "hello" вместо send , а затем "threading" вместо send .

Каналы — это немного разные абстракции, используемые, например, в Go и в Clojure core.async. Они разделяют отправителя и получателя и обычно используются синхронно. Например, одна сторона может получить из канала до того, как какая-то другая сторона отправит что-то в него. Это просто означает, что принимающая сторона передает управление планировщику, который ожидает отправки сообщения, прежде чем снова передать управление получателю. Эта функция иногда упрощает синхронизацию многопоточных приложений.

Опять же, сначала мы используем канал для связи между потоками одного и того же процесса. Как и ожидалось, USE: каналы . Вы можете создать канал с , писать в него с по и читать из него с с . Обратите внимание, что обе операции блокируются: от до будут блокироваться до тех пор, пока значение не будет прочитано в другом потоке, а из будут блокироваться до тех пор, пока значение не будет доступно.

Мы создаем канал и даем ему имя с

 набор каналов

Потом пишем в него в отдельном потоке, чтобы не блокировать UI

 [ "привет" ch добраться до ] в теме

Затем мы можем прочитать значение в пользовательском интерфейсе с помощью


 ч получить от

Мы также можем инвертировать порядок:

 [ ch получить от . ] в потоке
"привет" ch добраться до

Это прекрасно работает, так как мы сначала установили считыватель.

Теперь самое интересное: мы запустим второй экземпляр Factor и будем общаться через отправку сообщений. Factor прозрачно поддерживает отправку сообщений по сети, сериализуя значения с помощью сериализовать словарный запас.

Запустите еще один экземпляр Factor и запустите на нем узел-сервер. Мы будем использовать слово , которое создает IPv4-адрес из хоста и порта, и конструктор


 ИСПОЛЬЗОВАНИЕ: concurrency. distributed
f 9000  <узел-сервер> начальный-сервер

Здесь мы использовали f в качестве хоста, который просто означает локальный хост. Мы также запустим поток, который ведет текущий подсчет полученных им чисел.

 ОТ: concurrency.messaging => отправить получить ;
: добавить ( x -- y ) получить + дублировать . добавлять ;
[ 0 добавить ] спавн "гадюка"

Как только мы запустили сервер, мы можем сделать поток доступным с помощью register-remote-thread :

 имя дубликата >> регистр-удаленный-поток

Теперь переходим к другому экземпляру Factor. Здесь мы получим ссылку на удаленный поток и начнем отправлять ему числа. Адрес потока — это просто адрес его сервера и имя, под которым мы зарегистрировали поток, поэтому мы получаем ссылку на наш поток-сумматор с

 f 9000  "сумматор" <удаленный-поток>

Теперь мы повторно импортируем и отправляем просто для уверенности (импортировано слово с таким же именем в io. sockets , которое мы импортировали)

 ОТ: concurrency.messaging => отправить получить ;

и мы можем начать отправлять на него номера. Попробуйте 3 вместо отправки , а затем 8 вместо отправки - вы должны увидеть промежуточную сумму, напечатанную в другом экземпляре Factor.

Что насчет каналов? Возвращаемся на наш сервер и запускаем там канал, как и выше. Однако на этот раз мы публикуем его, чтобы сделать его доступным удаленно:

 ИСПОЛЬЗОВАНИЕ: каналы channels.remote ;
<канал> дублировать публикацию

Взамен вы получаете идентификатор, который можно использовать для удаленного общения. Например, я только что получил 72581372615274718877978895122231284308489678564344087

03359628058956 (да, они действительно хотят быть уверены, что это уникально!).

Будем ждать на этом канале, тем самым заблокируем UI:

 своп из .

В другом экземпляре Factor мы используем идентификатор, чтобы получить ссылку на удаленный канал и записать в него

 f 9000  72581372615274718877978895122231284308489678564344087

03359628058956 <удаленный-канал> "Привет, каналы"

В экземпляре сервера сообщение должно быть напечатано.

Удаленные каналы и потоки полезны для реализации распределенных приложений и эффективного использования многоядерных серверов. Конечно, остается вопрос, как запускать рабочие узлы в первую очередь. Здесь мы сделали это вручную - если набор узлов фиксированный, то это вообще вариант.

В противном случае можно использовать словарь io.launcher для запуска других экземпляров Factor программным путем.

Куда пойти отсюда?

Мы многое рассмотрели, и я надеюсь, что теперь у вас есть ощущение, подходит ли вам Фактор. Теперь вы можете работать с документацией и, надеюсь, внести свой вклад в Factor.

Позвольте мне закончить несколько советов:

  • когда вы начинаете писать Factor, очень легко справляться с перетасовкой стека. Хорошо изучите комбинаторы и не бойтесь выбросить свои первые примеры;
  • никакое определение не слишком короткое: цельтесь в одну линию;
  • справочная система и инспектор — ваши лучшие друзья.

Справедливости ради нужно отметить и некоторые недостатки Factor:

  • во-первых, сообщество очень маленькое. То, что они сделали, впечатляет, но не надейтесь найти много информации в Интернете;
  • конкатенативная модель очень мощная, но ее очень трудно понять правильно;
  • Factor не хватает потоков: хотя распределенные процессы компенсируют это, они несут некоторые затраты на сериализацию;
  • , наконец, у Factor в настоящее время нет менеджера пакетов, и это, вероятно, мешает вкладу.

Мы должны сбалансировать последнее наблюдение с удобством наличия всего исходного дерева Factor, доступного в образе, что, безусловно, облегчает изучение библиотек. Позвольте мне предложить несколько словарей, на которые вы, возможно, захотите взглянуть:

  • во-первых, я мало говорил об ошибках и исключениях. Узнайте больше с помощью «ошибки» ;
  • макросы словарь реализует форму метапрограммирования времени компиляции, менее общую, чем синтаксический анализ слов, но все же довольно удобную;
  • словарь моделей позволяет реализовать форму программирования потока данных с использованием объектов с наблюдаемыми слотами;
  • словарь match реализует форму сопоставления с образцом;
  • словарь монад реализует монады в стиле Haskell.

Я думаю, что эти словари являются свидетельством силы и выразительности Factor. Удачного взлома!

 ИСПОЛЬЗОВАНИЕ: images.http
"http://factorcode.org/logo.png" http-изображение.

Изучите основы выражений для связывания анимации в Adobe After Effects

Руководство пользователя


  1. Руководство пользователя After Effects
  2. Бета-версии
    1. Обзор программы бета-тестирования
    2. Домашняя бета-версия After Effects
    3. Функции в бета-версии
      1. Панель свойств (бета-версия)
      2. Выбираемые слои подложки дорожки (бета-версия)
      3. Собственное кодирование H.264 (бета-версия)
  3. Начало работы
    1. Начало работы с After Effects
    2. Что нового в After Effects
    3. Примечания к выпуску | После Эффекты
    4. Системные требования After Effects
    5. Сочетания клавиш в After Effects
    6. Поддерживаемые форматы файлов | После Эффекты
    7. Рекомендации по оборудованию
    8. After Effects для Apple Silicon
    9. Планирование и настройка
    10. Настройка и установка
  4. Рабочие области
    1. Общие элементы пользовательского интерфейса
    2. Знакомство с интерфейсом After Effects
    3. Рабочие процессы
    4. Рабочие пространства, панели и средства просмотра
  5. Проекты и композиции
    1. Проекты
    2. Основы композиции
    3. Предварительная компоновка, вложение и предварительный рендеринг
    4. Просмотр подробной информации о производительности с помощью Composition Profiler
    5. Модуль визуализации композиции CINEMA 4D
  6. Импорт отснятого материала
    1. Подготовка и импорт неподвижных изображений
    2. Импорт из After Effects и Adobe Premiere Pro
    3. Импорт и интерпретация видео и аудио
    4. Подготовка и импорт файлов 3D-изображений
    5. Импорт и интерпретация элементов видеоряда
    6. Работа с элементами видеоряда
    7. Обнаружение точек редактирования с помощью обнаружения редактирования сцены
    8. Метаданные XMP
  7. Текст и графика
    1. Текст
      1. Форматирование символов и панель символов
      2. Текстовые эффекты
      3. Создание и редактирование текстовых слоев
      4. Форматирование абзацев и панели «Абзац»
      5. Вытягивание слоев текста и фигур
      6. Анимация текста
      7. Примеры и ресурсы для текстовой анимации
      8. Живые текстовые шаблоны
    2. Анимационная графика
      1. Работа с шаблонами анимационного дизайна в After Effects
      2. Использование выражений для создания раскрывающихся списков в шаблонах анимационного дизайна
      3. Работа с основными свойствами для создания шаблонов анимационного дизайна
      4. Замена изображений и видео в шаблонах анимационного дизайна и основных свойствах
  8. Рисование, рисование и контуры
    1. Обзор слоев фигур, контуров и векторной графики
    2. Инструменты рисования: Кисть, Штамп и Ластик
    3. Штрихи в форме конуса
    4. Атрибуты фигуры, операции рисования и операции пути для слоев формы
    5. Используйте эффект формы Offset Paths для изменения формы
    6. Создание фигур
    7. Создание масок
    8. Удаляйте объекты из видео с помощью панели «Заливка с учетом содержимого»
    9. Кисть для ротоскопии и Refine Matte
  9. Слои, маркеры и камера
    1. Выбор и расположение слоев
    2. Режимы наложения и стили слоя
    3. 3D-слои
    4. Свойства слоя
    5. Создание слоев
    6. Управление слоями
    7. Маркеры слоев и маркеры композиции
    8. Камеры, источники света и достопримечательности
  10. Анимация, ключевые кадры, отслеживание движения и кеинг
    1. Анимация
      1. Основы анимации
      2. Анимация с помощью инструментов Puppet
      3. Управление и анимация контуров и масок фигур
      4. Анимация фигур Sketch и Capture с помощью After Effects
      5. Различные инструменты для анимации
      6. Работа с управляемой данными анимацией
    2. Ключевой кадр
      1. Интерполяция ключевого кадра
      2. Установка, выбор и удаление ключевых кадров
      3. Редактирование, перемещение и копирование ключевых кадров
    3. Отслеживание движения
      1. Отслеживание и стабилизация движения
      2. Отслеживание лица
      3. Отслеживание маски
      4. Артикул маски
      5. Скорость
      6. Растяжение времени и перераспределение времени
      7. Блоки временного кода и отображения времени
    4. Ключ
      1. Ключ
      2. Ключевые эффекты
  11. Прозрачность и композитинг
    1. Обзор композитинга и прозрачности и ресурсы
    2. Альфа-каналы и маски
  12. Настройка цвета
    1. Основы цвета
    2. Управление цветом
    3. Эффекты цветокоррекции
  13. Предустановки эффектов и анимации
    1. Обзор предустановок эффектов и анимации
    2. Список эффектов
    3. Эффекты имитации
    4. Эффекты стилизации
    5. Звуковые эффекты
    6. Эффекты искажения
    7. Перспективные эффекты
    8. Канальные эффекты
    9. Создание эффектов
    10. Эффекты перехода
    11. Эффект ремонта рольставней
    12. Эффекты размытия и резкости
    13. Эффекты 3D-канала
    14. Вспомогательные эффекты
    15. Матовые эффекты
    16. Эффекты шума и зернистости
    17. Эффект Upscale с сохранением деталей
    18. Устаревшие эффекты
  14. Выражения и автоматизация
    1. Expression
      1. Основы работы с Expression
      2. Понимание языка выражений
      3. Использование элементов управления выражением
      4. Различия в синтаксисе между модулями выражений JavaScript и Legacy ExtendScript
      5. Редактирование выражений
      6. Ошибки выражения
      7. Использование редактора выражений
      8. Использование выражений для редактирования свойств текста и доступа к ним
      9. Ссылка на язык выражений
      10. Примеры выражений
    2. Автоматика
      1. Автоматика
      2. Скрипты
  15. Иммерсивное видео, виртуальная реальность и 3D
    1. Создание среды виртуальной реальности в After Effects
    2. Применение иммерсивных видеоэффектов
    3. Инструменты композитинга для видео VR/360
    4. Отслеживание движения 3D-камеры
    5. Работа в пространстве 3D-дизайна
    6. 3D-трансформеры
    7. Делайте больше с 3D-анимацией
    8. Предварительный просмотр изменений в 3D-проектах в режиме реального времени с помощью Real-Time Engine
    9. Добавьте адаптивный дизайн к вашей графике 
  16. Просмотры и предварительные просмотры
    1. Предварительный просмотр
    2. Предварительный просмотр видео с помощью Mercury Transmit
    3. Изменение и использование представлений
  17. Визуализация и экспорт
    1. Основы визуализации и экспорта
    2. Экспорт проекта After Effects как проекта Adobe Premiere Pro
    3. Преобразование фильмов
    4. Многокадровый рендеринг
    5. Автоматизированный рендеринг и сетевой рендеринг
    6. Рендеринг и экспорт неподвижных изображений и последовательностей неподвижных изображений
    7. Использование кодека GoPro CineForm в After Effects
  18. Работа с другими приложениями
    1. Dynamic Link и After Effects
    2. Работа с After Effects и другими приложениями
    3. Настройки синхронизации в After Effects
    4. Библиотеки Creative Cloud в After Effects
    5. Плагины
    6. CINEMA 4D и Cineware
  19. Совместная работа: Frame. io и групповые проекты
    1. Совместная работа в Premiere Pro и After Effects
    2. Frame.io
      1. Установить и активировать Frame.io
      2. Использование Frame.io с Premiere Pro и After Effects
      3. Часто задаваемые вопросы
    3. Групповые проекты
      1. Начало работы с командными проектами
      2. Создать командный проект
      3. Сотрудничайте с командными проектами
  20. Память, хранение, производительность
    1. Память и хранение
    2. Как After Effects решает проблемы с нехваткой памяти при предварительном просмотре    
    3. Повышение производительности
    4. Настройки
    5. Требования к графическому процессору и драйверу графического процессора для After Effects

Узнайте об основах создания выражений и работы с ними.

Если вы хотите создать и связать сложные анимации, но хотите избежать создания десятков или сотен ключевых кадров вручную, попробуйте использовать выражения. Выражение — это небольшой фрагмент кода JavaScript, который можно вставлять в анимированные свойства в проектах After Effects и который оценивается как одно значение для одного свойства слоя в определенный момент времени.

В отличие от скрипта, который говорит приложению что-то сделать, выражение указывает свойству что-то делать. Например, у вас есть мяч, который движется по экрану слева направо, но вы также хотите, чтобы этот мяч покачивался. Вместо того, чтобы анимировать свойство Position с помощью ключевых кадров, вы можете применить к нему выражение покачивания.

Язык выражений основан на стандартном языке JavaScript, но вам не нужно знать JavaScript, чтобы начать работу с выражениями. Вы можете создавать выражения, используя кирку или копируя простые примеры и изменяя их в соответствии с вашими потребностями. Если вы хотите узнать об этом больше, см. раздел Понимание языка выражений.

Вот простой пример цикла с выражениями:

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

  1. Создайте композицию и выберите «Слой» > «Создать» > «Сплошной», чтобы создать сплошной слой.

  2. На панели «Таймлайн» выберите слой и нажмите S  на клавиатуре, чтобы открыть свойство масштаба. Отсюда начинается ваше путешествие с выражениями.

  3. Создадим выражение. На панели временной шкалы нажмите Alt+щелчок (Win) или Opt+щелкните (Mac) секундомер рядом с Положением, чтобы добавить выражение к свойству. After Effects присваивает выражения по умолчанию всем свойствам, которые вы можете изменить позже.

  4. Обратите внимание на изменения в пользовательском интерфейсе, произошедшие после создания выражения. Во-первых, значение свойства Масштаб (отображаемое как 100 100) изменяется с синего на красный. Красный цвет указывает на то, что значение имеет активное выражение.

  5. Увидите, что слева от секундомера появилась закрутка, щелкните ее, чтобы открыть. Используйте его, чтобы раскрыть само выражение.

    • Первая кнопка выглядит как знак равенства ("=") и включает и выключает выражение. Он отображается синим цветом, когда выражение включено.
    • Вторая кнопка включает отображение значения выражения во времени в редакторе диаграмм.
    • Третья кнопка с маленькой спиралью — это кирка, которую вы можете использовать для построения выражений.
    • Четвертая кнопка открывает меню языка выражений, которое можно использовать для построения выражений.
  6. Наконец, справа от четырех кнопок вы можете просмотреть выражение по умолчанию transform.position. Если вы хотите изменить выражение, щелкните текст выражения на временной шкале, чтобы активировать поле редактора выражения. Оно работает так же, как любое текстовое поле; копировать, вставлять, выбирать или перетаскивать текст. Нажатие ввода создает новую строку, и вы можете изменить ее размер. Нажмите на нее и введите нужное выражение, например, wiggle(3,50). Дополнительные сведения см. в разделе Редактирование выражений.

Выражения и ключевые кадры

После добавления выражения к свойству можно продолжать добавлять или редактировать ключевые кадры для этого свойства. Выражение может принимать значение свойства, определенное его ключевыми кадрами, и использовать его в качестве входных данных для создания новых измененных значений. Например, выражение value+90 для свойства Rotation слоя добавляет 90 градусов к значению свойства Rotation в дополнение к движению по ключевым кадрам:

Некоторые методы, такие как покачивания, работают непосредственно с существующим значением свойства. . (См. Атрибуты и методы свойств (справочник по выражениям).) 

Выражение wiggle(10, 10) для свойства Position слоя сохраняет движение слоя по ключевым кадрам и заставляет его немного покачиваться.

Значения свойства, содержащего выражение, отображаются красным или розовым шрифтом.

Хороший способ начать работу с выражениями — создать простое выражение с помощью кирки, а затем настроить поведение выражения с помощью простых математических операций, таких как перечисленные в следующей таблице:






Выполните противоположное исходному, например, против часовой стрелки, а не по часовой стрелке.

Например, вы можете удвоить результат, набрав *2 в конце выражения; или вы можете уменьшить результат вдвое, набрав /2 в конце выражения.

Разрабатывая выражения для удобного редактирования, вы можете комбинировать эти простые операции и многое другое. Например, вы можете добавить /360*100 в конец выражения, чтобы изменить его диапазон с 0–360 на 0–100. Это изменение было бы полезно, если бы вы хотели преобразовать значения циферблата на 360 градусов в ползунок, измеряемый в процентах.


Дополнительные примеры см. в разделе Примеры выражений.

Редактировать выражение вручную

  1. Войдите в режим редактирования текста, щелкнув в поле выражения.

    При входе в режим редактирования текста весь
    выражение выбрано. Чтобы добавить к выражению, щелкните внутри
    выражение для размещения точки вставки; в противном случае вы замените
    все выражение.

  2. Введите и отредактируйте текст в поле выражения, необязательно
    с помощью меню языка выражений.

  3. Чтобы выйти из режима редактирования текста и активировать выражение,
    выполните одно из следующих действий:

Редактор выражений на панели «Таймлайн»

Вы можете настроить внешний вид выражений в Редакторе выражений, расположенном на панели «Таймлайн», используя настройки «Сценарии и выражения». Чтобы открыть его, выберите After Effects > «Установки» > «Сценарии и выражения» (Mac) или «Приложение» > «Установки» > . Выражения (Победа). Дополнительные сведения см. в разделе Использование редактора выражений.

Посмотрите следующее видео, чтобы начать изучение выражений.

Теперь, когда вы поняли некоторые понятия, лежащие в основе выражений, приходите в сообщество, чтобы получить примеры из реальной жизни и поделиться своей работой.

Добавить комментарий

Ваш адрес email не будет опубликован.