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

Содержание

Как читать этикетки на продуктах и почему это важно

В магазине мы часто обращаем внимание только на броские фразы на лицевой стороне упаковки, вес продукта и цену. А все, что написано мелким шрифтом, не читаем, потому что это долго и сложно.

Вика Вишнякова

нутрициолог

Профиль автора

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

Зачем читать продуктовые этикетки

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

Как образ жизни снижает риск преждевременной смерти — статья в The New England Journal of Medicine

Статья Американской ассоциации сердца

ВОЗ о трансжирах

Например, о трансжирах не пишут на лицевой стороне упаковки, найти их можно только в составе. Эти вещества повышают риск инсультов и инфарктов, а ВОЗ призывает полностью запретить их производство. Если прочитать этикетку, то продукт с трансжирами просто не попадет к вам в корзину.

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

Потребление сахара на душу населения — Росстат

Факты о сахаре — статья в NHS

Чтобы сэкономить. Раскрученный продукт почти всегда стоит дороже невзрачного аналога, и только состав помогает понять, что внутри упаковки одно и то же. А еще чтение этикеток защищает от ненужных трат. Например, икра лососевая «царская» или «особая» может оказаться рыбным бульоном с загустителем. Производитель честно пишет об этом, но мелкими буквами и в самом неочевидном месте упаковки.

Чтение этикеток помогает устоять перед импульсивными покупками. Например, фраза «укрепляет иммунитет» на хлопьях может мотивировать купить, даже если рядом есть аналог в три раза дешевле. Если прочитать состав, то выяснится, что укреплять иммунитет тут нечем. Производитель накрутил цену за красивую надпись.

/cherry-picker/

Как экономить на продуктах до 35%

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

Как читать продуктовую этикетку

На этикетке может быть много информации, но не вся она важна. Ниже — пункты, на которые стоит обращать внимание.

Советую в первую очередь смотреть на наименование, состав и срок годности. Если проигнорировать эту информацию, можно купить потенциально вредный продукт. Далее смотрим на критерии, которые помогут выбрать среди аналогов: пищевую ценность, информацию об упаковке и массу.

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

Наименование

Состав

Срок годности

Пищевая ценность

Информация об упаковке

Масса

Упаковка с любым продуктом обычно содержит эти шесть пунктов: 1 — наименование, 2 — состав, 3 — срок годности, 4 — пищевая ценность, 5 — информация об упаковке, 6 — масса. Исключением могут стать бакалея или фрукты с овощами и орехами, продаваемые на развес

Шаг 1

Наименование продукта

Важно не путать название товара и наименование продукта. Обычно название товара используют в маркетинговых целях — оно не всегда отражает состав и идею товара. Например, жевательный мармелад может оказаться биологически активной добавкой к пище. А котлеты «классические домашние» — мясосодержащим продуктом категории Г с долей мяса 20—40%.

Пищевая продукция в части ее маркировки — технический регламент Таможенного союза

ГОСТ Р 52675-2006. Полуфабрикаты мясные и мясосодержащие

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

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

Лицевая сторона сока намекает, что перед нами если не сок, то хотя бы фруктовый нектар На деле это просто водичка с сахаром и ароматизаторами, а доля сока в составе едва ли не гомеопатическая

Шаг 2

Состав

Если после наименования продукта вы не передумали его покупать, то обратите внимание на состав. Он помогает понять, что на самом деле вы съедите или выпьете.

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

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

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

/healthy-food/

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

Не все слова в составе могут быть понятны — это нормально. Поэтому чем короче состав, тем меньше шансов съесть то, что вы не планировали. А еще продукт с коротким составом требует меньше времени на прочтение, это удобно.

В составе этого ржаного хлеба всего пять ингредиентов. Разобраться в них просто А в составе этого ржаного хлеба — аж 26 ингредиентов! Банки с консервированной фасолью. Слева сахар идет на третьем месте, справа — на седьмом. Вероятно, в банке справа сахара будет меньше

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

ТР ТС 029/2012 «Требования безопасности пищевых добавок, ароматизаторов и технологических вспомогательных средств»

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

Загустители — вещества, которые делают продукт вязким. Например, это желатин, пектин, крахмал.

Подробнее о пищевых добавках — Американское управление по санитарному надзору за качеством пищевых продуктов и медикаментов

Эмульгаторы — вещества, которые помогают смешивать несмешивающиеся жидкости и не давать продукту расслаиваться. Пример — яичный желток.

Стабилизаторы — вещества, предназначенные для поддержания однородной структуры продукта. Без них майонез или джем не доедет до нас в привычной консистенции.

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

Польза и вред ароматизаторов— статья флейвориста Сергея Белкова в журнале «Популярная механика»

Натуральный или идентичный натуральному — разделение условное и различается от страны к стране. Например, ваниль — это натуральный ароматизатор, а ванилин — идентичный натуральному, потому что его синтезируют в лаборатории. Бывают еще искусственные ароматизаторы — эти вещества придают продуктам аромат, источника которого нет в природе. Например, мороженое со вкусом жвачки или «Кока-колы».

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

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

Глутамат натрия — усилитель вкуса белковой пищи. Он безопасен, но имеет плохую репутацию из-за продуктов, в которые чаще всего добавлялся: полуфабрикатов, фастфуда, колбасных изделий. Добавляя глутамат натрия, производитель усиливает «мясной» вкус.

Вопросы и ответы о глутамате натрия — Американское управление по санитарному надзору за качеством пищевых продуктов и медикаментов

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

Пальмовое масло и сердце — статья в PubMed

Трансжиры — это разновидность жирных кислот с измененной молекулярной структурой. ВОЗ призывает исключить промышленные трансжиры из рациона, потому что они повышают риск атеросклероза и других сердечно-сосудистых заболеваний. В составе продуктов мы можем встретить их под разными названиями: гидрогенизированные или частично гидрогенизированные жиры, растительный жир, кондитерский жир, кулинарный жир, маргарин, стеарин.

Чтобы проверить безопасность и регулировать все пищевые добавки, создали классификацию в формате «Е — трехзначный код».

Полный перечень добавок «Е» — статья Ассоциации пищевых добавок и ингредиентов

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

Поэтому избегать любых продуктов только из-за «Е» в составе не нужно.

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

Самые частые продукты-аллергены — Американское управление по санитарному надзору за качеством пищевых продуктов и медикаментов

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

Шаг 3

Срок годности и условия хранения

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

ГОСТ Р 51074-2003. Продукты пищевые. Информация для потребителя. Общие требования

«После вскрытия упаковки хранить в прохладном темном месте» — это условия хранения. Если условия хранения для вскрытого продукта другие, их отдельно указывают на упаковке.

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

ст. 5 закона «О защите прав потребителей»

Санпин 2.3.2.1324-03. Гигиенические требования к срокам годности и условиям хранения пищевых продуктов

Иногда на товаре пишут срок хранения после открытия упаковки или разморозки продукта. Например, «годен 6 месяцев, после открытия хранить в течение трех суток». Тогда срок годности истекает через трое суток с момента открытия.

В большинстве случаев чем меньше обработан продукт, тем быстрее он портится. Длительный срок хранения часто предполагает наличие консервантов и ультраобработку. При ультраобработке производитель убирает из продукта вещества, на которые могут претендовать живые микроорганизмы: клетчатку, живые пробиотические культуры, ненасыщенные жирные кислоты. Это не значит, что такие продукты есть нельзя. Но если рядом есть альтернативы с коротким сроком хранения, то отдавайте им предпочтение. Так выше шансы съесть больше полезных веществ при одном и том же объеме продукта.

Опасность представляет регулярное и чрезмерное употребление ультраобработанных продуктов. Четыре и более порций таких продуктов в день на регулярной основе повышают риски смертности от всех причин на 62%. Это показало 15-летнее испанское исследование с 20 тысячами участников.

Сосредоточим внимание на ультраобработанных продуктах — Канадское желудочно-кишечное сообщество

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

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

Наименование, состав и срок годности — главные критерии, которые определяют, есть ли у продукта шанс попасть к нам в корзину. Если любой из этих трех критериев вас не устроил — ищите аналог. Он всегда есть, просто может лежать на соседней полке или в соседнем магазине.

/moloko/

Как покупать молочные продукты

Остальные критерии тоже важны, но только если вы выбираете из нескольких похожих товаров и решаете, какой именно из них взять.

Как быть здоровым и богатым

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

Шаг 4

Пищевая ценность

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

В США и Европе требования в маркировке продуктов другие: там указывают количество соли, разных видов жиров, клетчатки и сахара. Отечественные производители могут сделать то же самое добровольно.

Соль — ингредиент, норму потребления которого легко незаметно превысить и создать таким образом дополнительные риски для здоровья. Ее чрезмерное употребление приводит к повышению кровяного давления, увеличивает риск инсультов и инфарктов. Когда на этикетке указано количество соли, легче соблюдать рекомендуемые 5 г в день.

Сокращение потребления соли — Всемирная организация здравоохранения

Как маркируют вещества, которые стоит ограничить в рационе — подробнее о маркировке «Светофор»PDF, 9,46 МБ

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

Так выглядят этикетки на товарах из США, Европы, Австралии. Без такой разбивки покупатель не знает, сколько сахара, соли и насыщенных жиров он на самом деле съедает в течение дня В этом бургере много насыщенных жиров, умеренное количество соли и почти нет сахара

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

Еще важно помнить, что чаще всего пищевая ценность и калорийность указывается на вес 100 г. Пачка M&M’s весом 240 г — это 1200 ккал, что соответствует половине суточной нормы калорий для взрослого мужчины.

Среднее количество калорий в день — сайт Министерства здравоохранения США

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

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

Шаг 5

Масса или вес

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

Шаг 6

Материал упаковки

Эта информация может пригодиться, если вы сортируете мусор и сдаете упаковку в переработку. Найдите на упаковке цифру в треугольнике — это код переработки, который обозначает материал упаковки. В пунктах приема вторсырья баки пронумерованы такими же треугольниками, чтобы понять, куда какой материал класть. Наличие кода переработки на упаковке еще не означает, что таре точно можно подарить вторую жизнь. Например, в России не перерабатывают пластик с кодами 3 и 7, а с кодом 6 принимают единицы компаний.

Я забочусь об окружающей среде, поэтому покупаю товары без упаковки или в такой, которую можно переработать. Например, овощи на подложке удобны, потому что уже расфасованы и не нужно их отдельно взвешивать. Однако материал подложки — пластик с кодом 6, его в моем городе почти нигде не принимают. Поэтому я беру овощи поштучно и взвешиваю в своем мешке, хоть это и дольше.

/ecology-and-the-city/

Как вести экологичный образ жизни в провинции

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

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

Шаг 7

Дополнительные надписи

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

«Без глютена». Важная надпись для тех, кто страдает целиакией или аллергией на глютен. Это касается примерно 1% населения.

Целиакия — статья в UpToDate

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

Торт не станет более полезным, если наклеить на него этикетку «без глютена»

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

Лактоза — компонент любого молока. В грудном молоке она тоже присутствует, обеспечивая младенцев энергией. У некоторых людей встречается непереносимость лактозы: если они выпьют больше стакана молока, у них появится дискомфорт в животе.

Лактазная недостаточность: современные методы диагностики и лечения

В мире процент страдающих лактазной недостаточности меняется от 3% на севере Европы до 90% в Юго-Восточной Азии. В России таких людей 16—17%. Если вы не страдаете непереносимостью лактозы, то покупка безлактозного товара не улучшит здоровье.

Может создаться иллюзия, что лактоза — это что-то опасное, из разряда трансжиров. Но это не так

«Без сахара» и «без добавленного сахара». Эта надпись означает, что сахар как ингредиент не входит в состав продукта. Однако это не гарантирует, что в продукте нет иных сахаров, которые желательно тоже уменьшить в рационе.

Руководство ВОЗ по потреблению сахаров взрослыми и детьми

В продукте с надписью «без добавления сахара» может использоваться, например, фруктовый сок или концентрат, сироп, мед или фруктоза. Согласно ВОЗ, они относятся к свободным сахарам, как и обычный рафинад или сахар-песок. Избегать таких продуктов не стоит, важно просто учитывать их в общем дневном балансе свободных сахаров.

61 название сахара

Безопасное для здоровья количество свободных сахаров — 6—9 чайных ложек в день

Иногда «без сахара» — действительно без сахара Такие надписи помогают выбрать нужный продукт из 20 похожих вариантов
На лицевой стороне этой упаковки написано «без сахара» Однако в составе — концентрат сока. Он, как и обычный сахар, относится к свободным сахарам — ВОЗ рекомендует ограничивать их в рационе
Здесь на лицевой стороне упаковки тоже есть яркая надпись «без сахара», однако в составе есть фруктоза Фруктоза — тот же самый сахар с точки зрения безопасности для здоровья
Иногда «без сахара» — действительно без сахара Такие надписи помогают выбрать нужный продукт из 20 похожих вариантов На лицевой стороне этой упаковки написано «без сахара» Однако в составе — концентрат сока. Он, как и обычный сахар, относится к свободным сахарам — ВОЗ рекомендует ограничивать их в рационе Здесь на лицевой стороне упаковки тоже есть яркая надпись «без сахара», однако в составе есть фруктоза Фруктоза — тот же самый сахар с точки зрения безопасности для здоровья

«Без ГМО». ГМО — это организмы, ДНК которых изменили люди. Мы не останемся голодными из-за нашествия насекомых или засухи, потому что с помощью генной инженерии появились устойчивые сорта растений.

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

Часто задаваемые вопросы о генетически модифицированных продуктах — статья на сайте ВОЗ

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

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

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

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

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

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

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

«Био», «с пробиотиками». Такие надписи означают, что в продукт добавили пробиотические микроорганизмы. Продукт с такой надписью не обязательно будет полезнее соседнего. Чтобы пробиотики несли пользу, они должны пройти кислую среду желудка, а потом выжить и размножиться в кишечнике. Сколько из заявленных производителем микроорганизмов в итоге сумеет это сделать — неизвестно.

ГОСТ 32923-2014. Продукты кисломолочные, обогащенные пробиотическими микроорганизмами

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

«Фитнес», «натуральный», «с витаминами», «полезный», «улучшает иммунитет». Такие надписи — обычный маркетинг. Даже если какой-то продукт с похожей надписью вызывает у вас больше доверия — все равно пробегите глазами по составу. Так больше шансов, что вы купите то, что вам нужно, а не то, что захотел продать производитель.

Международная научная ассоциация по про- и пребиотикам предупреждает, что не все пробиотики на самом деле пробиотики Отвечают ли продукты с надписями про пробиотки на упаковке критериям научного сообщества — неизвестно «Живые» и «помогающие укреплять иммунитет» продукты не обязательно полезнее своих «мертвых» соседей по магазинной полке, над этикеткой которых маркетологи трудились не столь тщательно
Такие надписи говорят о возможной заботе об окружающей среде, но никак не связаны со здоровьем человека Надпись «фитнес» — обычный маркетинг

Запомнить

  1. Чтобы находить информацию за считаные секунды, нужна практика. Старайтесь изучать этикетки при каждом походе в магазин.
  2. Перед покупкой пробегитесь глазами по составу. Если что-то смутило, ищите аналог по соседству. Калории и пищевую ценность имеет смысл сравнивать у двух аналогичных товаров, но состав важнее.
  3. Непонятные слова в составе — не обязательно зло. Однозначно стоит избегать трансжиров, а не глютена.
  4. Отберите «любимчиков» с нужным составом и ценой в каждой пищевой группе. В случае, когда нет времени выбирать и сравнивать, у вас под рукой будет проверенный вариант.

Семантический анализ текста онлайн, seo анализ текста, подсчет символов

Семантический анализ текста Адвего для SEO онлайн — профессиональный инструмент для оценки качества текстов, seo оптимизации статей и поиска ключевых слов в тексте. Проверьте количество символов, тошноту и водность, плотность ключевых слов и фраз онлайн, семантическое ядро текста бесплатно!

Язык: по умолчанию — русский
Выберите языкAfrikaansAmharic — አማርኛAnother language — другой языкArabic — العربيةArmenian — ՀայերենAzerbaijani — AzərbaycancaBelarusian — БеларускіBengali — বাংলাBrazilian Portuguese — Português do BrasilBretonBulgarian — БългарскиCatalan — CatalàChichewaChinese — 中国CroatianCzech — ČeštinaDanish — DanskDutch — HollandskEnglishEsperantoEstonianFaroese — FøroysktFinnish — suomalainenFrench — FrançaisFrisian — FryskGalician — Galego (minimos)Germany — DeutschGreekGujarati — ગુજરાતીHebrew — עבריתHiligaynonHindi — हिन्दीHungarianIcelandicIndonesian — Bahasa IndonesiaInterlinguaIrish — GaeilgeItalian — ItalianoJapanese — 日本のKashubian — KaszëbscziKinyarwandaKorean — 한국의Kurdi — KurdîLatinLatvianLithuanian — lietuviųLow Saxon — PlattdüütschMacedonianMalagasyMalayMalayalam — മലയാളംMalteseManx GaelicMaoriMarathi — मराठीMongolian — МонголNorwegian BokmalNorwegian NynorskOriya — ଓଡ଼ିଆPersian — فارسیPolish — PolskiPortuguese — PortuguêsPunjabi — ਪੰਜਾਬੀQuechua — Runasimi (qheshwa)Romanian — RomânăRussian — РусскийSardinianScottish Gaelic — GàidhligSerbian — СрпскиSetswanaSlovak — SlovenskýSlovenianSpanish — EspañolSwahili — KiswahiliSwedishTagalog — TagalogTamil — தமிழ்Telugu — తెలుగుTetumTurkish — TürkTurkmenUkrainian — УкраїнськаUpper Sorbian — hornjoserbsceUrdu — اردوUzbek — ЎзбекчаVietnamese — tiếng ViệtWalloon — walonWelshYiddish — ייִדישZulu

Текст: обязательнодлина текста, символов: 0

Напишите текст для анализа и нажмите кнопку «Проверить»
Максимальная длина текста — 100 000 символов.

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

Соответственно, если в тексте будет мало ключевых слов, но много «воды» — стоп-слов, вставных слов, шаблонных фраз, качество статьи будет низким.

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

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

SEO анализ текста Адвего определяет:

  • плотность ключевых слов, процент ключевых фраз;
  • частотность слов;
  • количество стоп-слов;
  • объем текста: количество символов с пробелами и без пробелов;
  • количество слов: уникальных, значимых, всего;
  • водность, процент воды;
  • тошноту текста, классическую и академическую;
  • количество грамматических ошибок.

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

Также семантический анализ показывает все стоп-слова и грамматические ошибки.

Пример отчета проверки семантического SEO анализа текста онлайн

Как рассчитывается тошнота текста

Классическая тошнота определяется по самому частотному слову — как квадратный корень из количества его вхождений. Например, слово «текст» встречается на этой странице 16 раз, классическая тошнота будет равна 4.

Важно! Максимально допустимое значение классической тошноты зависит от объема текста — для 20 000 знаков тошнота, равная 5, будет нормальной, а для 1000 знаков — слишком высокой.

Академическая тошнота определяется как отношение самых частотных и значимых слов по специальной формуле. Нормальное значение — в пределах 5-15%.

По тошноте текста можно судить о натуральности текста и его SEO-оптимизации под поисковые запросы. Высокий показатель тошноты онлайн для поисковиков является плохим знаком.

Как рассчитывается водность текста

Процент воды в Адвего определяется как отношение незначимых слов к общему количеству слов. То есть чем больше в статье значимых слов, тем меньше в итоге «воды».

Конечно, невозможно написать сео текст совсем без воды, нормальный показатель — 55%-75%.

Чтобы уменьшить процент водности, необходимо почистить текст от широко распространенных фраз и терминов, вставных слов: «в современном мире», «так сказать», «всем известно» и т. п. Также повышает качество текста употребление специализированных терминов и профессиональной лексики.

«Ограниченная операция Кремля воспринята на Западе как полумера»

Архитектор «рейганомики» Пол Крэг Робертс солидаризируется с российской патриотической общественностью, возмущающейся добровольными ограничениями в проведении СВО. Он изначально предупреждал, что такое самоограничение приведет только к эскалации военных действий. И вот теперь США открыто заявляют о намерении передать украинской армии самое современное и опасное оружие. Робертс оговаривается, что он не агент Кремля, как считают многие, просто не хочет, чтобы мир пришел к глобальному ядерному конфликту.

Я правильно предсказал, что российские полумеры приведут к расширению боевых действий Фото: © Виктор Антонюк, РИА «Новости»

«Запад не допустит, чтобы вмешательство было ограниченным»

Я ненавижу слышать фразу: «Я же вам говорил». И вот я сам использую эти слова.

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

Эта дипломатическая стратегия, как и стратегия России в отношении Украины, полностью провалилась.

Катастрофическая стратегия Кремля в отношении Украины началась, когда Кремль уделил больше внимания Олимпиаде в Сочи, чем свержению Вашингтоном украинского правительства. Ошибки Кремля ускорились, когда Кремль отклонил просьбу Донбасса о воссоединении с Россией, как это произошло с бывшей российской провинцией Крым.

Кто такой Пол Робертс

Пол Крэг Робертс (Paul Craig Roberts) — доктор экономических наук, заместитель министра финансов США по экономической политике в администрации Рональда Рейгана. Работал редактором и обозревателем газеты The Wall Street Journal, журнала Businessweek и информационного агентства Scripps Howard News Service. В свое время был автором постоянной колонки в газете The Washington Times. Автор многочисленных книг, посвященных крупнейшим проблемам современности.

Это привело к тому, что русские Донбасса, ранее входившие в состав России, подверглись преследованиям со стороны украинских нацистских группировок, обстрелам гражданских районов и частичной оккупации украинскими войсками с 2014 по февраль 2022 года, когда российская армия начала очищать Донбасс от украинских войск, чтобы предотвратить подготовленное украинское вторжение в Республики Донбасса. Прождав 8 лет, прежде чем начать действовать, Кремль теперь столкнулся с большой, обученной и оснащенной Западом армией плюс с фанатичными нацистскими полками.

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

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

Кремль предупредил Запад о вмешательстве в операцию, заявив, что если США и НАТО вмешаются, то Россия будет рассматривать эти страны как «комбатантов». Но Запад вмешался, сначала медленно и осторожно, чтобы прощупать почву, а затем все более и более агрессивно, поскольку то, что Запад первоначально ожидал, что конфликт продлится максимум неделю, продолжается уже седьмой месяц, а Кремль снова говорит о переговорах с Зеленским, и российское наступление, по-видимому, приостановлено. Далекий от того, чтобы относиться к странам НАТО как к воюющим сторонам, Кремль по-прежнему снабжает Европу энергией в той мере, в какой Европа позволяет это делать России.

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

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

Правильность моего анализа теперь была подтверждена сообщением в «The Hill», вашингтонском издании, которое читают инсайдеры. Сообщение озаглавлено: «Почему США становятся все более наглыми со своей поддержкой Украины».

Вот вступительное предложение сообщения и некоторые выдержки из него:

«Администрация Байдена вооружает Украину оружием, которое может нанести серьезный ущерб российским силам, и, в отличие от начала конфликта, официальные лица США, похоже, не обеспокоены реакцией Москвы».

«Со временем администрация признала, что они могут предоставлять украинцам более крупное, боеспособное, дальнобойное и тяжелое оружие, а русские никак не реагируют», — сказал «The Hill» бывший посол США на Украине Уильям Тейлор.

«Русские вроде как блефовали и неистовствовали, но не велись на провокации. И на раннем этапе в администрации была озабоченность по этому поводу — в какой-то степени она есть и сейчас, — но страх спровоцировать русских уменьшился», — добавил Тейлор, который сейчас работает в американском Институте мира (U.S. Institute of Peace)».

«Сначала мы были немного осторожнее … не зная, обнаружит ли Путин линии снабжения и конвои и нападет ли на них, не будучи уверенными, что он пойдет на эскалацию, а также не будучи уверенными, сможет ли Украина использовать то, что мы им дали, или продержаться долго против России», — сказал Майкл О’Хэнлон, военный аналитик из вашингтонского аналитического центра Брукингского института (Brookings Institution)».

«С июня США неуклонно увеличивают поставки в страну [Украину] высокомобильных артиллерийских ракетных систем, а американские военнослужащие партиями обучили украинские войска их использовать».

Забегая вперед, следует отметить, что многочисленные сообщения указывают на то, что США планируют в ближайшее время отправить высокоточные артиллерийские боеприпасы «Excalibur» — оружие, которое может бить на расстояние до 70 километров и поможет украинцам нацеливаться на окопанные российские позиции и командные пункты.

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

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

Как я уже говорил, ограниченная операция Кремля была воспринята на Западе как полумера, которая предоставила Западу возможность расширить боевые действия. Теперь, с приближением зимы, конфликт расширяется за счет поставок мощного оружия большой дальности, способного атаковать Донбасс, Крым и другие части России из Западной Украины.

Как я и говорил, в этом случае, затягивая конфликт с помощью своей тактики «медленных шагов», чтобы свести к минимуму жертвы среди гражданского населения, что является благородным намерением, Россия дала Западу возможность охарактеризовать российские действия как выдыхающиеся из-за расходования боеприпасов и потерь на поле боя. Картина произвела тот эффект, которого я ожидал, — сделала Запад более уверенным в своей роли комбатанта. Вот выдержки из сообщения «The Hill», подтверждающие еще одну часть уравнения: последние разведданные указывают на то, что Россия испытывает на себе жало введенных Западом санкций и вооруженных сил, мощь которых уменьшается по мере продолжения боевых действий.

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

Столкнувшись с потерями на поле боя, Путин в прошлом месяце попытался увеличить боевой состав России более чем на 130. 000 военнослужащих, отменив верхний возрастной ценз для новобранцев и поощряя судимых вступать в армию.

Официальные лица США считают, что эти усилия «вряд ли увенчаются успехом».

«В совокупности эти разведданные рисуют картину страны [России], изо всех сил пытающейся сохранить свои собственные институты, не вспоминая уже о том, чтобы бить по западным странам, помогающим Украине.

«Я думаю, что инстинкты людей в департаментах и агентствах, особенно в министерстве обороны и разведывательном сообществе [США], я думаю, что их инстинкты заключаются в том, чтобы быть более дальновидными и более агрессивными», — сказал один бывший высокопоставленный правительственный чиновник.

«Я думаю, у нас с нашей стороны гораздо больше возможностей предпринять действия, которые помогут Украине, не опасаясь неоправданно того, как отреагирует Путин», — добавил он».

Можно предположить, что Кремль допустил все эти ошибки, потому что демонстрацией своей военной доблести в молниеносном завоевании Украины не хотел еще больше напугать Европу, чтобы страны континента вступали в НАТО. Но именно половинчатые меры России придали Финляндии и Швеции уверенности во вступлении в НАТО, поскольку от членства в НАТО они для себя не видят никакой угрозы. Сокрушительный удар России по Украине заставил бы всю Европу пересмотреть вопрос о членстве в НАТО, поскольку ни одна европейская страна не захотела бы столкнуться с перспективой военного конфликта с Россией. Вместо этого Кремль «создал» такого премьер-министра Великобритании, который готов втянуть Россию в ядерную войну, и такую НАТО, которая намерена продолжать украинский конфликт.

Невнимательный или враждебно настроенный читатель может заключить из моей статьи, что я сторонник военного успеха России. Но я сторонник минимизации риска ядерной войны. Стивен Коэн и я — те двое, которые с самого начала видели, как вмешательство Вашингтона на Украине со свержением правительства наметило курс, который может закончиться ядерным Армагеддоном. Коэна поносили его собственные левые либералы, а меня объявили «обманутым/агентом Путина».

Оскорбления, которым мы подвергались, доказывали нашу правоту. Западный мир слеп к потенциальным последствиям своих провокаций в отношении России, а Кремль слеп к потенциальным последствиям своей терпимости к провокациям. Как мы видим, ни одна из сторон еще не пришла к этому осознанию. Сообщение «The Hill» демонстрирует правильность моего анализа ситуации и моего прогноза о том, что результатом будет расширение войны и большая вероятность просчетов, которые могут привести к ядерной войне.

Пол Крэг Робертс

Перевод Сергея Духанова

«Свободная пресса», 7.09.2022

Мастерство «Говорить» — разбор стилей авторов StopGame

А давайте с вами поговорим о нашем любимом SG, товарищи!

Здоровский сайт, скажу я вам, — я здесь даже награду еженедельного блога разок получил, поняв, что, судя по всему, обладаю хоть каким-то собственным стилем. Ну, а раз уж это так: давайте поговорим о тех, кто этот стиль определяет. Примером послужит наш дорогой авторский состав SG, так как путь к получению собственного стиля зачастую лежит через изучение чужих работ.

В этот раз я снабжу блог видео- версией, так как озвучка, пародии и прочая — это моя переводческая стезя, к тому же хочется проверить правильность своего понимания стиля авторов, через проверку соответствия их звучанию. Окей, это звучит немного более сложно, чем должно́, но вы поймете все чуть позже, если, конечно, ещё не 😀

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

 

Аудио- версия

О чём пойдёт речь

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

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

Очень большую часть харизмы любого человека, так или иначе доносящего мысль словами, составляет именно грамотно написанный текст: не сухой пересказ, которому большинство из нас учили в школах, не попытка донести мысль максимально лаконично, нет, — привнести себя на бумагу. Это настоящий текстовый фристайл, когда вы можете всосать внимание читателя в текст и не выпускать его из вашей мысли. И вот этот навык — очень интересен, сложен и многогранен. Здесь и зарождается ваш собственный стиль.

И вот теперь, когда я посвятил пару абзацев текста в попытках разжевать, что я понимаю под «харизмой» и «стилем» автора, — мы, наконец, можем перейти к самому весёлому, почему вы, вероятнее всего, и кликнули на этот блог: разбор стилей авторов на СГ! Начнём, естесна, с главре-… Черт, пока я готовил этот материал Кунгуров уволил себя с этого поста… Ну тем более символично будет начать с него.

//небольшой пост-скриптум: я не буду делать тут разбор ВСЕХ ведущих на SG, только части, ну и разнообразия ради возьму ещё одного ютубера, у которого хорошие отношения с SG.

Ведущие

Дмитрий Кунгуров

Дмитрий Кунгуров, сын маминой подруги, ведущий канала 16на9 и просто хороший человек. Редко я его слышу в рамках СГ, к сожалению, но второй, а отныне основной, его канал выручает мою сегодняшнюю попытку разобрать его стиль.

Так уж получилось, что этот автор, как он и рассказывал в подкасте «Инвайт» (здесь будет ссылочка) с Леонидом Давыдовым — обладает весьма необычным голосом, который я могу описать как явно не дикторский по причине ни то высоты тона, ни то лёгкой хрипотцы при начитке текста, ни то из-за не слишком опущенной диафрагмы… Лично меня голос Кунгурова просто покорил, когда я его впервые услышал — он очень живой, человечный и эмоциональный, но при этом звучит в достаточной степени умудрённо и внушающе — его приятно слушать и доверять сказанному, уважать мнение этого, несомненно разбирающегося в теме, человека.

А вот теперь поговорим о разных приёмах, которые он использует. Для начала, это, само собой, интонационные паузы и обороты, хорошо характеризующие его, как автора: что я хочу сказать, ну, смотрите, слушайте, вот какая штука. Скорее он звучит как научпопер, разъясняющий суть высказанной проблемы, что… Объективно говоря, не неожиданность, когда речь идёт об эссеисте, однако я бы сказал, что ближайший ориентир в виде «ЧБУ» звучит гораздо более медитативно, отчего зайдёт меньшему кругу лиц. В обзорах фильмов на 16на9, кстати, в виде фишки по началу присутствовали шуточки адресованные закадру, однако я бы сказал, что ничего, кроме неловкости, они особо не вызывали, хотя и проясняли некоторые тезисы и служили задаче направить мышление зрителя в нужное русло, ну или заинтриговать. Также Дмитрий пользуется интонационными усмешками в местах, где это может быть полезно.

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

Что ж, используя все эти знания, давайте я попробую использовать какой-нибудь из своих сценариев, возьму оттуда часть, и перепишу так, словно сценарий писал Дмитрий. Итак, что тут у нас… А давайте реюзнём мой сценарий с сайта, почему нет?

«Я… Не уверен, насколько часто и по каким причинам такое происходит, но уверен вы сталкивались с ощущением, о котором я сейчас говорю. Просто со мной это случилось, и я правда не знаю, как к этому относиться: я прошел The Stanley Parable, которая взорвала мне мозг своей продуманностью и необычной игровой концепцией, из-за которой выходит, что вся игра — головоломка в попытке обхитрить, сломать все то, что сделали создатели, но это оказывается попросту невозможным: авторы продумали все наперед.

Когда я впервые запустил Superliminal, то меня преследовало тоже самое ощущение. Головоломка здесь, правда, состоит скорее в попытке осознать собственные мыслительные барьеры, заложенные в нас эволюционным путем. Но есть и другие сходства: посмотрите на меню. На шрифт. Посмотрите на кнопки и как тут все выстроено. Посмотрите на визуальный стиль!»

А теперь переделываем:

«Полагаю многие из вас, когда впервые запускали SuperLiminal, могли ощутить на себе какое-то знакомое ощущение, словно дежа-вю, но… Чем оно продиктовано? Неужто мы уже видели подобное раннее? А я вам отвечу: ещё как видели, ещё как похожее, но только вот связи между этими проектами на порядок меньше, чем кажется на первый взгляд.

Ну, смотрите: вот цветовая гамма, вот главное меню, вот локации. Вы видите тоже что и я, не так ли? SuperLiminal и The Stanley Parable я не могу назвать иначе, чем братьями близнецами, но только есть один нюанс: и та и другая игры — поражают мозг своей продуманностью и необычной игровой концепцией. По сути игрок находится в вечном сражении с механиками игры, в надежде её сломать, обойти, пройти уровень иначе — головоломка в попытке обхитрить, сломать все то, что сделали создатели, но сделать это практически невозможно, так как авторы продумали все наперед.

Меня зовут Дмитрий Кунгуров, и сказать мне больше нечего.»

…, но из энциклопедического интереса, важнейший бит ты всё-таки пропустил: у меня гораздо, гораздо выше динамика нарратива. Я за 30 секунд успеваю 10 фактов сообщить обычно, а два предложения подряд одно и то же не происходит никогда.

Дмитрий Кунгуров о моей пародии

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

Дмитрий Бурдуков

Так, раз уж мы так с места в карьер начали говорить о Дмитриях, то давайте продолжим: Флинн всея стопгейма и один из самых эмоционально окрашенных ведущих — monsieur Бурдуков!

В целом Дима крайне самобытный ведущий с не менее узнаваемым стилем и подачей — это максимальная экспрессия во всём сказанном, жонглирование эмоциями и постоянный диалог со зрителем, мол «давайте, угадайте, поняли, поняли о чём я?» — с максимально ярким насыщением этих выражений, будто он действительно ждёт от вас ответ, но затем происходит снижение накала, и Дмитрий сам спокойно отвечает на вопрос, словно поняв, что никто ему так и не ответит. Текст у этого ведущего — не академический, следующий заветам жанра, а наоборот — максимально живой и раскрепощенный.

Я бы охарактеризовал интонирование Бурдукова как волну, которая, постоянно накатывает и уходит, что, по сути, является правильным способом удержать внимание — повышение эмоционального накала всё сильнее, а затем вновь переход к спокойствию. Контрастные американские горки, в общем. По сути это та же кривая сложности из геймдизайна.

Собственно, здесь мы провернём нечто иное, чем с Кунгуровым, теперь я возьму только первоначальную тему своего сценария в виде «Файтингов», и перепишу его в стиле Флинна:

«Файтинги. Офигенная вещь, скажу я вам! Скиллозависимый и сложный геймплей, где всё зависит от тебя. Великолепное ощущение от победы и прогрессии. Умение строить длинные цепочки действий, отталкиваясь от действий противника и своих возможностей, что в среде любителей файтингов, и не только, называется mindgame.»

А теперь как бы этот текст написал Бурдуков:

«Так, ну что у нас там, новый Мортал Комбат обзавёлся дополнением AfterMath? Это ли не повод сделать новый спидран в деталях! „Но Бурдуков, это дополнение вышло 2 года назад“, скажут некоторые зрители, на что я отвечу: да я просто заспидранил само время и перенёсся в 2022 год прямиком из 2020, отвяньте!

Но да что-то я отвлёкся: на ваших экранах спидран в деталях, у микрофона Дмитрий Бурдуков, а остановок не будет!»

Иван Лоев

Ну, а теперь немного о легендарных ведущих — перед вами ИВААААААН ЛОООЕЕЕЕЕВ (простите, будем считать это за отсылку). Мастерство Лоева в принципе будет трудно оценить по достоинству, пускай он и не является моим любимым автором. Этот человек — сам по себе дела (л/ет) самые классические тексты с академической выверенностью, последовательностью движения мысли. Никаких лишних заумных идиом и прочей графомании — всё очень плавно, мягко, точно и по делу, но с легким привкусом водянистости, идентичный натуральному экстракту Войны и Мира.

Должен сказать, что сейчас, когда я для этого материала переслушиваю историю серии «Fallout», то всё сильнее замечаю, что я большую часть интонирования позаимствовал именно от Лоева, так как в своих видео я… Да, действительно слышу эти размеренные паузы и абсолютно спокойное звучание, что характерно… Ну да ладно, я отвлёкся.

Кстати именно характерные отвлечения от тем видео, пространные рассуждения, прерываемые самим Лоевым посредством выражений, а-ля «что-то я отвлёкся» с последующим протяжным «Иии всё-таки: „. Также для Лоева крайне характерны вводные слова и конструкции, что добавляет и размеренности и удивительной живости сценариям Лоева, вроде „однако, несмотря на то что“ и прочая.

Звучание Лоева крайне комплексно, и пожалуй лучшее слово, которым я могу его описать не вдаваясь в подробности: рассуждение. Иван Лоев именно что думает и рассуждает в своём сценарии на заданную тему, и даже если он не приходит к конкретному ответу — за движением его мысли всегда крайне интересно наблюдать.

Сейчас попробую взять какой-нибудь свой текст коротенький и отредактировать его в стиле Лоева. Чтобы такое заюзать… Есть у меня тут недоделаная статья по творчеству музыканта «Mujuice», пожалуй вырезкой оттуда и воспользуюсь:

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

Однако спустя некоторое время моих стараний, я все же начал находить идеи, подтексты и скрытые от простого обывателя смыслы, в которых, зачастую, оказывается значительно больше смысла, чем в стандартном прочтении произведения. Отдельное спасибо за это хочу сказать каналам 16на9 и ЧБУ, которые натолкнули меня на понимание, что искусство имеет гораздо больше граней, чем кажется.»

Что ж, это и так довольно близко, но теперь моя задача сделать это ещё более похоже на Лоева:

«Незадолго до начала моей карьеры на ютубе, когда я только лишь начинал готовился к сдаче экзамена по литературе — мне стало крайне интересно искать всяческие скрытые смыслы и… подтексты, которые закладывали авторы в тех или иных своих произведениях. Однако лично моей проблемой был тот факт, что эти смыслы, зачастую, улавливать у меня вообще не получалось: хоть символизм, хоть сложные игры слов — ничто из этого не могло пробиться в мою голову.

И всё же, спустя долгие пару лет моих стараний, мне удалось начать находить идеи, подтексты и скрытые от простого обывателя смыслы, в которых, как правило, оказывается значительно больше смысла, чем при стандартном прочтении произведений. Отдельное спасибо за это хотелось бы сказать каналам 16на9 и ЧБУ, которые натолкнули меня на понимание, что искусство имеет гораздо больше граней, чем порой кажется. »

Как-то по ощущениям как будто ничего нового для себя не узнал. Не то, чтобы хочу в этом автора обвинить, но вот странное ощущение имеется.
Зато возник вопрос. Вот упоминалась ИСка Fallout, которой сто лет в обед. Но вот мне кажется, что меня нынешнего она характеризует слабо. Я вот давеча сам её пролистывал и прям очень регулярно в моей голове звучал колокольчик «А сейчас бы я сделал/сказал не так!» Не потому что, опять же, плохо делал раньше, а потому что сейчас стараюсь делать по-другому, ставить другие акценты и так далее.

Иван Лоев о материале

Антон Паули

Ну что, время немного подрастормошить наше чуток заскучавшее повествование таким заметным и весьма колоритным персонажем, как Антон Паули. Один из моих однозначных фаворитов среди всех ведущих SG просто из-за довольно необычного голоса, невероятно динамичной подачи и обилии дегродских (и не очень) шуток, что, в моём случае, комплимент, как фаната Деград-отряда и Дениса Карамышева в частности. Да о чём можно говорить, когда пара его лучших роликов (от него ролики выходят крайне не часто, отчего мне крайне грустно — Антох, делай больше, пожалуйста, нам тебя в видеоформате часто не хватает) — фактически эссе на глубокие психологические темы — это ж прям такой НаучПоп от StopGame выходит!

//опа, пока я готовил этот материал — Паули тут новый видос закинул, и это вновь не какие-то пустые рассуждения, а реально интересная история из мира игрожура, поданная как детектив… хотя, думаю, вы, как и я, не удивлены. А ещё там 40 минут материала, ага.

Теперь примемся за разбор стиля и звучания данного ведущего. В целом и то и другое хорошо характеризуется его контентом — вдумчивый, слегка юморной, но без претензии на излишнюю «интеллектуальность». Любые шутки могут сопровождаться легкой усмешкой, но в целом его тон и интонирование повествовательно-разъяснительное — отличная характеристика стиля повествования Антона Паули, как по мне.

Ну и не стоит забывать про меметичные вставки и цитаты из видеоигр или кино. Да и монтаж тоже у Паули, как правило, один из лютейших на СГ.

Что ж, попробуем собрать что-нибудь похожее на его текст!

За основу беру… Вот этот текстик:

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

Собираем заново:

«Задача любого хорошего художественного перевода — передать эмоции не теряя смысла. Если смысл теряется или вы добавляете отсебятину, то можете сразу пойти нахер. Если вы переводите комедию и теряете шутку, то тоже идете нахер. Способов так-то огромное множество: найти полностью соответствующую шутку/идиому, найти альтернативу схожую по смыслу: вот вам сказали… Перевести название фильма „TeneT“ Кристофера Нолана, но слово ДовоД в вашем понимании вообще не отражает сути! Тогда используем „РепеР“: главный герой чёрный, так что всё сходится. Да камон, даже перевод промтом на безрыбье вполне себе войдёт РАКОМ, но скорее всего, как вы уже поняли, вам всё равно придётся пойти нахер.»

Денис Карамышев

Ну вот мы и переходим к магистру деградирующего искусства, лучшему и худшему критику русских локализаций всея Ютуба в одном, не умещающемся в 4к монитор, лице — Денису Карамышеву! От этого харизматичного пухляша я понабрал большую часть приемов своей озвучки, за что данному персонажу крайне благодарен.

Кстати, полагаю, Денис, в свою очередь, тоже благодарит одного персонажа, а именно одного из самых запарных и живых контентмейкеров англоязычного сегмента — The Russian Badger. Хотя Денис этого и не скрывает, собственно говоря.

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

Тут возьмем… А знаете, почему это Денису можно для комедийного эффекта говорить, что он ленивый, а мне нет? Считаю это несправедливым! Так что в этот раз я просто воспользуюсь своим недавно выполненным заказом для медиагруппы ЦСКА (никаких срачей, я вообще в футболе не разбираюсь, делал это в рамках профессиональной деятельности, спасибо). Как там было… Trigger Warning!

//здесь всё завязано на видео- версии

Булку Жрать

Бонус: Всеволод Уваров (Булджать)

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

В целом стиль звучания и написания сценариев Булджатя, как по мне, действительно на весьма высоком уровне. Чего стоит его перформанс-шутка о Махатме Ганди:

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

Стоит еще пожалуй упомянуть, насколько Булджать любит эксперименты с форматами, а потому стиль звучания, да и сценария, может меняться от ролика к ролику, но оставаться одинаковым в пределах условной рубрики. То есть размеренный и спокойный тон, которым вещает Всеволод в ММО-историях звучит совершенно иначе, чем нарочито гиперболизированный и эмоциональный Булджать из «Самых Лучших Обзоров», вроде Rage 2 или Call Of Duty Vanguard.

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

Итак, берем вот этот фрагмент моего сценария:

«В итоге, спустя время, я все же собрался, и начал играть заново. Я стал зачищать весь белый сад целиком, оказавшись на новой локации — также пошел выполнять все квесты подряд, начал собирать снаряжение Грифона, искал рецепты бомб и масел, побеждал боссов играя по тактике, заготавливая зелья, начал строить билд, и вот я понял. Эта игра сложнее чем игры, в которые я играл. Не в плане сражений, нет, боевка тут для меня хоть и похожа на Dark Souls, но более казуальна, с, при этом, гораздо более красивыми анимациями.

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

Пе-е-еределываем:

«Ну, делать нечего, и спустя какое-то время я заставил себя вернуться в игру. Вновь принялся гонять по Белому Саду выполняя все квесты подряд, нашел какую-то церквушку с призраками и чертежами сета змеи, затем отправился в Велен, собрал сет Грифона, искал рецепты бомб, масел, искал информацию о боссах в бестиарии и тут я просто залип. Ну как залип… Я наиграл под 200 часов, осознавая, что это одна из самых комплексных игр, в которые я играл! После какого-нибудь четвертого фоллаута, где собирай — не собирай билд, к уровню 20-му не будет никого, кто смог бы что-то тебе противопоставить, — здесь действительно нужно знать, что ты делаешь, ищешь, и чем пользуешься.

Нет, ну вы посмотрите на этот прекрасный бесшовный открытый мир с, наконец-то интересными квестами, а не подай-принеси из последних Ассасинов и прочих! Тут ты бегаешь по карте, ищешь сеты, составляешь логические схемы о том, как можно грамотно воспользоваться сочетаниями навыков, сетов и элексиров с зельями, какое оружие для этого понадобится, хочешь ли ты быть бойцом ближнего боя или колдуном. И поскольку этих вариантов немного, то их здесь, черт подери, проработали, а не как в какой-нибудь Assassin’s Creed Valhalla, где чем бы ты ни дрался — ничего кроме другой анимации это не даст!»

Подводим итоги

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

Я не знаю, создавал ли кто-то из ведущих SG свой стиль осознанно и 100% самостоятельно, так как я не знаю, кем для этого нужно быть. Я считаю, что стиль может появиться только из прослушивания множества авторов, их стиля и звучания, которые вы способны неумышленно соединить и создать нечто новое. В данном случае — это не копирка, а абсолютно обычный процесс преобразования личного опыта в свой инструмент. Ведь даже ваша походка и стиль одежды — следствие множества факторов, влияния на вас вашего окружения и ваших интересов.

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

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

Ну и раз уж я выкладываю этот материал после ухода Димы Кунгурова с поста главреда, то я считаю, что имею полное право посвятить данный материал (самый мой большой из тех, что увидел свет) именно ему. Спасибо, что сделал StopGame great again.

KADGIIR


Теги

stopgame дмитрий кунгуров дмитрий бурдуков флинн иван лоев антон паули денис карамышев булджать kadgiir рассуждение авторский состав голос дикторство озвучка сценарий стиль текста тексты главред пиво

Лучшие комментарии

Первая полоса

Самые интересные релизы сентября

Степан Песков 31 Новость

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

Лина Скорич 23 Обзор

The Tomorrow Children: Phoenix Edition: Обзор

Алексей Лихачев 4 Ретрозор

Ретрозор: The Movies, Gex: Enter the Gecko, Animaniacs

24 Обзор

Metal: Hellsinger: Обзор

Алексей Лихачев 11 Новость

СМИ: сотрудники Ubisoft не хотят работать над Assassin’s Creed про Японию из-за руководителя проекта

Лина Скорич 11 Новость

Новая «Зельда», RE Village на Switch и тьма JRPG — что показали на Nintendo Direct

Руслан Присекин 13 Новость

В Enlisted скоро добавят тихоокеанскую кампанию

Андрей Маковеев 1

Поттер поведёт «Челси» в Гриффиндор.

Заманили тренера, которого все любят 08.09.2022 читать блог на SOCCER.RU

Англичане видели в Грэме наставника для сборной.

Жаль «Брайтон», а проблема «Челси» не в тренере

За трансфер тренера Поттера заплатили почти 16 млн фунтов. Боэли оперативно нашел главного тренера, хотя отставка предыдущего стала неожиданностью для самого немца. Томас не считал, что поражение от «Динамо» Загреб настолько важно. Оно не было первопричиной. Боэли опирался при решениях на мнение Бехдада Эгбали – инвестора «Челси», человека из Лос-Анджелеса, который в группе, купившей клуб, считается редким знатоком футбола.

Но смотреть матчи Лиги чемпионов и управлять большим клубом – разные вещи. Новые боссы хотели, чтобы Тухель стал их другом, добавили в личный чат, просили держать в курсе событий. Томас закрылся, просил не убирать Чеха, раз Грановская уходит. И его не услышали. Пытались заманить спортивного директора, но после общения с дуэтом владельцев свободные специалисты отказались. В том числе, соавтор «Ливерпуля». К слову, не игнорируйте уход Эдвардса, когда говорите о проблемах Клоппа.

Для «Челси» хорошо, что Поттер понял, куда идет. Кроме тренерского штаба, забирает из «Брайтона» специалиста по найму персонала. «Чайки» вряд ли будут такими же успешными без Грэма, который подстраивался под соперников, тасовал тактические схемы, радовал мастодонтов, вроде Гвардиолы. Хосеп похвалил Поттера и заявил, что игру «чаек» всегда интересно анализировать. Большой комплимент от тактического гика. Желаем «Брайтону» не промахнуться с новым главным тренером.

А Поттеру пророчим испытание. Дело не только в работе со звездами, нужны тактические правки. Показательно, что Тухель крутился вокруг решений, но сбился на самый банальный метод развития команды – вместо продуманной тактики требовал трансферы. Получил не всех, кого просил, ушел первым.

Тухель жаловался на медлительность и «сытость»

Экономисты шутят, что мир без бедных невозможен. Откуда взять мотивацию, если все сытые? Тухель стимулы в новом сезоне не отыскал. С этим пунктом, подтвержденным словами немца, угадали накануне. «Челси» не продумал, как развиваться с медалью Лиги чемпионов в кармане. Следующим шагом по логике должна быть борьба за «золото» в АПЛ, но не получилось. Качество игры не такое, как у «Манчестер Сити».

Что должно насторожить фанатов «Челси»? У Тухеля в первых пятидесяти матчах в клубе и в последних пятидесяти – отработал ровно сто игр, практически идентичные показатели. Выводил из анабиоза последних недель с Лэмпардом в том же темпе, как завершил работу с Томасом. Откуда взял – туда положил, проект точно незавершен. Но разница в исходных данных вчера усугубилась. В отличие от тен Хага или Артеты, которые набирали состав под себя, у Поттера багаж Тухеля.

С другой стороны, Грэм не привык перебирать кадрами. Кулибали, Фофана, Стерлинг и Обамеянг – звезды. И Кукурелью наставник прекрасно знает, именно у него испанец заиграл. У «Челси» хватает людей для «3-4-3». Канте ждут в середине сентября, Ковачич вернулся пару недель назад, набирает форму. Тухель оставил «Челси» без чувства голода, так важного для легкости мышления и заостренного желания побеждать.

У Поттера много интересных тактических заданий

Форма Менди завела Кепу в основу. Грэму нужно выбрать первого номера. Многое зависит от предпочтений по игре голкипера ногами. Также не работала атакующая фаза. Не может один Стерлинг на себе все тянуть. Поттеру пора правильно расположить Маунта, Хаверца, Обамеянга и Стерлинга. Непростая задача, если не играть в два центральных защитника. Джеймс в центре – плохая опция, но и Лофтус-Чик временно бегал справа.

«Брайтон» Поттера подстраивался под соперников, «Челси» тоже так умеет. Тухель не требовал играть строго первым номером, копировать стиль двух главных фаворитов сезона. Размен ударами им подходил, матч против «Тоттенхэма» получился веселым. А из-за грустного события — смерти королевы Елизаветы II, могут перенести тур АПЛ. Тогда Поттер получил пару дополнительных дней с командой, важное для него совпадение.

Нужно общаться с игроками, объяснить прессинг. Тухель не донес идеи, зависимость от Ковачича и Канте без них стала очевидной. Когда два хавбека на пике формы, а Жоржиньо в лучшем расположении духа, то результаты другие. Дело не в самой реализации, а скорее в создании откровенного малого количества качественных шансов. В АПЛ «Челси» соседствует с МЮ по xG, занимает десятое место в АПЛ, сильно уступая тому же «Брайтону».

Вернер и Лукаку у Тухеля не заиграли. Атака держалась на пасах Маунта, а Мэйсон на старте нового сезона в плохой форме. Будь Боэли и Эгбали опытнее в футболе, могли оставить Томаса, дать именно ему время все исправить. Но не исключено, что американцы рассчитывают, что с англичанином Поттером поладить будет проще. У «Челси» исторически подход к тренерам резкий. Раздают огромные компенсации, двигаются дальше.

«Челси» привык к частой смене главных тренеров

Опыт переосмысления игры по ходу сезона у клуба большой. Конте взял середняка в таблице, а сделал чемпионом. За много лет до этого Ди Маттео пришел после Виллаш-Боаша – выиграл Лигу чемпионов. Успех Тухеля – новый пример. Лэмпарда уволили, поскольку не нравится прессинг, результаты и общее впечатление от футбола. И получили сенсационного победителя Лиги чемпионов. Прошлой весной в плей-офф турнира «Челси» тоже играл неплохо.

В установках клуба переключаться между режимами. Поттер – новый вектор. Грэму нужно напомнить «Челси» о достоинствах факультета Хогвартса с талисманом львом. Гриффиндор для храбрых, честных и благородных. Канте, Аспиликуэта, Силва, Кулибали, Маунт, Джеймс и Кукурелья могут соответствовать описанию, если тактическая гибкость Поттера подойдет команде лучше, чем перепады холерика Тухеля. Томас – крутой тренер, но не подарок в работе.

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

Памятник на Большой Морской в Петербурге признан вещественным доказательством в сентябре 2022 года — 13 сентября 2022

13 сентября 2022, 11:41

3 комментарияФото: «Фонтанка.ру»

Поделиться

Как стало известно «Фонтанке», особняк Салтыковой на Большой Морской, 51, признан вещественным доказательством в уголовном деле о сносе памятников в Петербурге. Это значит, что на объекте вообще нельзя проводить никакие работы. Того же от рабочих требует суд, наложивший обеспечительные меры. Эксперты утверждают, что из-за этого запрета повреждения могут грозить теперь не только аварийным постройкам, но и «здоровой» части здания, а также соседним домам. Глава компании ищет содействия в Смольном.

Череда событий вокруг объекта культурного наследия особняка Салтыковой, который привлек внимание Следственного комитета, началась с нападения на журналиста и градозащитника Олега Мухина. 16 августа он вышел к дому с пикетом против начала демонтажа дворовых флигелей здания. Председатель СК России Александр Бастрыкин лично отдавал распоряжения: возбудить уголовное дело о насилии над Мухиным и еще одно — о сносе памятника. А после прибыл на объект, где побеседовал с инвестором — владельцем «Северной земельной компании» Виктором Тырышкиным. Фирма занимается приспособлением особняка под гостиницу по соглашению со Смольным. Все, что известно о ситуации, читайте в материале «Фонтанки».

Ходатайство о запрете демонтажа было подано в рамках иска градозащитников о признании незаконными разрешения на строительство и разрешения на проведение работ по сохранению этого здания, выданных Комитетом по государственному контролю, использованию и охране памятников истории и культуры (КГИОП). Истцы просят суд признать незаконными разрешения и обязать комитет их отменить. Заседание суда назначено на 14 сентября. 25 августа Куйбышевский суд Петербурга запретил ООО «Северная земельная компания» и другим компаниям и физическим лицам совершать любые действия по сносу зданий на Большой Морской улице, д. 51, лит. А.

Согласно проекту, инвестор должен сохранить исторический фасад лицевого корпуса, внутреннюю планировку этой части здания, восстановить лепнину, камины, лестницы, паркет и другие исторические детали интерьера. Три дворовых флигеля, которые признаны аварийными, планировали разобрать, чтобы воссоздать их в тех габаритах, в которых они были ранее. Высотные отметки — единственное, что входило в их предмет охраны. В сохранившихся исторических материалах нет никакой информации о каких-либо богатых интерьерах этих флигелей, которые в старину выполняли скорее хозяйственные функции. Либо роскошной отделки не было изначально, либо она была окончательно утрачена в советское время, точно неизвестно. Работы начались в апреле и в середине августа были прекращены.

Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»

Поделиться

Помимо судебного запрета на работы фирма и ее подрядчик ООО «Реставрационная компания «Союз» получили уведомление от петербургского управления Следственного комитета о том, что объект признан вещественным доказательством по уголовному делу об уничтожении или повреждении памятников (УК РФ статья 243) и на нем запрещено проводить любые работы. Можно сделать вывод, что нельзя даже проводить мониторинг состояния здания.

Строителей это поставило в тупик, поскольку никому не известно, сколько будет длиться следствие, а памятник все это время будет стоять в полуразобранном состоянии. Они утверждают, что это, наоборот, будет способствовать его повреждению, и, насколько известно, «Фонтанке» КГИОП эту точку зрения в целом разделяет.

До визита Бастрыкина верхние этажи дворовых флигелей частично разобрали. Корреспондент «Фонтанки» побывал на стройплощадке и увидел все своими глазами. Там, где у нижних этажей был потолок, местами зияют дыры, через которые в дождь льется вода. На балках много грибка и гнили. При разборе здания рабочие убедились, что внутри было лишь около 10% целых, пригодных к дальнейшему использованию кирпичей. Остальные проверку на прочность не прошли.

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

«Демонтажные работы вообще нельзя обрывать на полуслове, в этом основная беда. Задача хотя бы убрать то, что реально валится, хотя бы до какого-то логического этапа закончить демонтаж, потому что на сегодня мы можем получить неконтролируемое обрушение. Здесь вокруг четыре здания, некоторые из них жилые, они могут пострадать от этого, все что угодно может случиться», — сообщил замгендиректора ООО «Реставрационная компания «Союз» Алексей Житомирский.

«Конечно, любое аварийное здание какое-то время может стоять. Дворовый корпус несколько раз признавался аварийным, он мог в любой момент обвалиться, и слава богу, что никто не пострадал. Говорить, что он точно не простоит еще 10 лет? Может быть, простоит. Однако, даже если есть минимальная вероятность утраты, нужно делать все, чтобы сохранить», — продолжает он.

12 сентября гендиректор «Северной земельной компании» Антон Плютов обратился с письмом в КИО, Комстрой и Комитет по инвестициям (имеется в распоряжении «Фонтанки»). В нем он напомнил, что между фирмой и КИО заключено соглашение о приспособлении дома на Большой Морской под современное использование, и привел краткую хронологию конфликта.

Следственный комитет 24 августа возбудил уголовное дело и признал в связи с этим особняк вещественным доказательством. Через два дня замгенпрокурора РФ отменил постановление о возбуждении дела, но продолжают действовать обеспечительные меры Куйбышевского райсуда. Поэтому компания не может вывезти мусор, обеспечить безопасность на стройплощадке, поскольку работы на аварийном корпусе были резко прерваны, вести мониторинг объекта и окружающей застройки, а также проводить другие работы.

«Комплекс работ по сохранению объекта культурного наследия не предусматривает возможности длительных приостановок работ. Вынужденный простой в выполнении работ может привести к разрушению и/или гибели предметов охраны объекта культурного наследия», — отмечает в письме Плютов. По его словам, проектная документация, в том числе проект организации демонтажа, получила положительное заключение государственной историко-культурной экспертизы КГИОП и Центра государственной экспертизы. Теперь компания рискует по независящим от нее причинам выбиться из графика реализации инвестпроекта. Она просит Смольный проанализировать ситуацию и оказать содействие «в целях должного исполнения обязательств».

Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка. ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»

Поделиться

Что касается лицевого флигеля, если он останется стоять как сейчас, его состояние могут ухудшить осадки и заморозки, отмечает Алексей Житомирский. Логика простая: кирпичи впитывают влагу, она замерзает, затем оттаивает, и эти процессы постепенно разрушают материал. Поэтому до наступления зимы компания планировала подключить главный корпус к отоплению. Тогда с осени можно было бы начать восстановление внутренних интерьеров.

«Потом, во-первых, будет намного сложнее реставрировать. Во-вторых, если здание промерзнет насквозь, то любые работы, — отделочные и прочие, даже по усилению, — можно будет проводить, когда оно полностью просушится, потому что, когда происходит промерзание, намокает еще и кирпичная кладка. Если зиму здание простоит без отопления, в том состоянии, как сейчас, то продолжить работы можно будет условно к концу лета. Тогда получается, мы теряем год. По составу работ тоже что-то изменится. Не может после промерзания стен все сохраниться в том же состоянии», — говорит Житомирский.

Внутри предполагаются масштабные работы. Предстоит вернуть внутреннему убранству здания облик конца XIX века: отремонтировать сохранившиеся и восстановить утраченные камины, отреставрировать наборный паркет из не менее чем 10 пород дерева. Он годами прятался под слоем советского паркета-елки, который, с одной стороны, скрывал красоту, с другой — помог ее сохранить.

Вся эта роскошь десятки лет задыхалась под несколькими слоями масляных красок (в прямом смысле, потому что краска не дает материалам «дышать», они накапливают влагу, которая разрушает их). Во время обследований оказалось, что лепнина на стенах и потолках была позолоченной. Орнаментам и атлантам вернут родной цвет, а лестнице — блеск искусственного мрамора.

Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка. ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»Фото: «Фонтанка.ру»

Поделиться

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

Внешний сдержанный облик особняка резко контрастировал с богатым внутренним убранством помещений, насыщенным золоченой лепкой, декоративной скульптурой и живописью. В бельэтаже главного корпуса вдоль лицевого фасада располагалась анфилада из парадных залов, роскошно отделанных в стиле рококо: Большая столовая, Гостиная, Зеркальный зал, Большой кабинет.

После Салтыковой особняк поменял нескольких владельцев. После революции, в 1920-х годах, помещения в нем занимал Ленинградский трест кожевенной промышленности, перед Великой Отечественной войной — тресты «Дубитель» и «Главкожзаменитель». В 1954 году лицевой корпус был надстроен третьим этажом и стилизован под исторический фасад. Чуть позднее надстроили один этаж западного и северного флигелей. Здание не используется почти два десятка лет. До 2005 года внутри работал Военный комиссариат Центрального района.

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

Практика показывает, что от статуса вещдока так просто не избавиться. Наиболее известный пример — случай с аквапарком «Вотервиль», где в 2012 году произошёл несчастный случай. В рамках уголовного дела СК пошёл на беспрецедентное решение изъять аквапарк в качестве вещдока. В 2014 году и это дело было прекращено, но аквапарк это не спасло. Теперь на его месте построят гостиницу.

Евгения Горбунова, «Фонтанка.ру»

Фото: «Фонтанка.ру»

По теме

  • Гвардия умирает, но не сдается. Манежа Финляндского полка на Васильевском больше нет

    08 апреля 2022, 16:58

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

    01 июня 2022, 15:47

  • Найти и оценить. Из советской архитектуры города просеивают культурное наследие

    12 апреля 2022, 10:12

  • Посмотрите «до» и «после». Кого назвали жертвами в уголовном деле против работников КГИОП

    01 июня 2022, 18:54

  • Как вызвать Мефистофеля. Поверженному демону с Петроградской стороны надо попасть в смету капремонта

    19 августа 2022, 11:00

Евгения Горбунова

УДИВЛЕНИЕ0

ПЕЧАЛЬ1

Комментарии 3

читать все комментариидобавить комментарий
ПРИСОЕДИНИТЬСЯ

Самые яркие фото и видео дня — в наших группах в социальных сетях

  • ВКонтакте
  • Телеграм
  • Яндекс. Дзен

Увидели опечатку? Выделите фрагмент и нажмите Ctrl+Enter

Новости СМИ2

сообщить новость

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

  • Группа вконтакте

Новости компаний

Комментарии

3

Новости компаний

Первая очередь премиального квартала Modum введена в эксплуатацию

Девелопер Arsenal объявил о вводе в эксплуатацию первой очереди квартала Modum, который находится в Приморском районе города. Очередь состоит из двух корпусов, где суммарно 795 квартир. В квартале представлен большой выбор планировок для действительно взыскательных покупателей — квартиры с саунами, личными террасами; высокие потолки до 3,3 метра; ванные комнаты с окном, видовые квартиры, большие кухни-гостиные, мастер-спальни с большими гардеробными. Соседство в каждом доме будет приятным, ведь здесь всего от 2 до 4-х квартир на этаже. Есть…

Ход строительства апарт-отелей сети Avenir

Kirovsky Avenir — треть апартаментов готовы, Moskovsky Avenir — выполняется чистовая отделка. Kirovsky Avenir: четыре этажа из двенадцати — полностью готовы В апарт-отеле Kirovsky Avenir на завершающую стадию выходит финишная отделка апартаментов. Завершены все работы на 3, 4, 5 и 6 этажах. Идет внутренняя приемка апартаментов — последний этап проверки перед вводом в эксплуатацию и началом передачи ключей. На 7, 8, 9 и 10 этажах завершается чистовая отделка, начинается монтаж входных дверей. На 11 и 12 этажах выполняется укладка ламината в…

В жилом комплексе Terra в Приморском районе Санкт-Петербурга остались в продаже последние 42 лота

Это просторные двух- и трехкомнатные квартиры, расположенные во втором и третьем корпусах жилого комплекса. Второй корпус был сдан в эксплуатацию в декабре прошлого года. Сдача третьего корпуса запланирована в сентябре. В продаже есть лоты с великолепным видом на Пионерский сад, с окном в ванной комнате, с мастер-спальней с индивидуальным санузлом и гардеробной, а также квартиры с просторной кухней-гостиной. Во втором корпусе представлена уникальная квартира с террасой, где можно обустроить зимний сад. Стоимость лотов начинается от 10,9 млн…

ТОП 5

1

«Это катастрофа». Почему этой осенью в лесах Ленобласти нет грибов

80 443

312

На камеры попало, как пенсионер несет в квартиру в Петербурге желанную установку. Он еще не знает, что она обойдется ему в 1,5 млн

74 964

183

«Окна задрожали». Ростовчане рассказывают о «громком взрыве»

71 168

584

Сенатор Климов ответил, нужна ли России мобилизация

65 064

625

«Что-то взлетело с грохотом». Очевидцы рассказали о месте, откуда ростовчане слышали «громкий взрыв»

54 231

12

Новости компаний

Учебник по фактору

от 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 для подтверждения. Вы увидите, что стек, изначально пустой, теперь выглядит как

.
 5
 

Вы можете ввести более одного числа, разделенного пробелами, например 7 3 1 , и получить

 5
7
3
1
 

(интерфейс показывает вершину стека внизу). Что насчет операций? Если вы напишете + , вы запустите функцию + , которая извлекает два самых верхних элемента и подталкивает их сумму, оставляя нам

 5
7
4
 

Вы можете поместить дополнительные входы в одну строку, например, - * оставит в стеке единственное число 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.0033 [1,b] , который предполагает, что диапазон начинается с 1 , и ожидает, что в стеке будет только значение в верхней части диапазона. Если вы напишете в слушателе [1,b] , Factor предложит вам выбор, потому что слово [1,b] не импортируется по умолчанию. Factor может предложить вам импортировать словарь math.ranges , поэтому выберите этот вариант и продолжайте.

Теперь в вашем стеке должна быть довольно непрозрачная структура, похожая на

.
 Т{диапазон f 1 10 1 }
 

Это связано с тем, что наши функции диапазона ленивы и создают диапазон только тогда, когда мы пытаемся его использовать. Чтобы подтвердить, что мы действительно создали список чисел от 1 до 10 , мы преобразуем ленивый ответ в стеке в массив, используя слово >array . Введите это слово, и ваш стек теперь должен выглядеть как

.
 { 1 2 3 4 5 6 7 8 9 10 }
 

что многообещающе!

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

Попробуйте написать 1 [ * ] уменьшить и посмотрите на результат: это действительно факториал 10 . Теперь reduce обычно принимает три аргумента: последовательность (а у нас была одна в стеке), начальное значение (это 1 кладем в стек рядом) и бинарную операцию. Это, безусловно, должны быть *, но как насчет квадратных скобок вокруг *?

Если бы мы написали просто * , Factor попытался бы применить умножение к двум самым верхним элементам в стеке, чего мы не хотели. Что нам нужно, так это способ поместить слово в стек, не применяя его. Придерживаясь нашей текстовой метафоры, этот механизм называется цитатой . Чтобы процитировать одно или несколько слов, просто окружите их цифрой 9.0033 [ и ] (оставляя пробелы!). То, что вы получаете, похоже на анонимную функцию в других языках.

Давайте введем слово , сбросим в слушатель, чтобы очистить стек, и попробуем записать то, что мы уже сделали, в одной строке: 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.0034 в квадратный корень из n и посмотреть, является ли оно делителем n . В этом случае n используется в двух местах: как верхняя граница последовательности и как число для проверки на делимость.

Слово bi применяет две разные кавычки к одному элементу в стеке над ними, и это именно то, что нам нужно. Например, 5 [ 2 * ] [ 3 + ] bi дает

 10
8
 

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.0033 рекурсивный . Это позволит нам иметь встроенное определение короткого слова, где бы оно ни использовалось, вместо вызова функции.

Попробуйте наше новое слово [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* и bi@ , прочитав о них в интерактивной справке и попробовав их в слушателе.

Словари

Пришло время начать писать свои функции в файлах и научиться импортировать их в прослушиватель. 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.0033 несколько? .

Вернувшись к нашей задаче, вы могли заметить, что слова [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? функция.

Тесты написаны с использованием слова unit-test , которое ожидает две цитаты: первая содержит ожидаемые результаты, а вторая содержит слова, которые нужно выполнить, чтобы получить этот результат. Добавьте эти строки в 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... } . В частности, вы видите здесь директивы $значения и $описание , но существуют и другие, такие как $ошибки , $примеры и $см. также .

Обратите внимание, что тип вывода ? считается логическим. Измените первые строки, чтобы они выглядели как

.
 ИСПОЛЬЗОВАНИЕ: 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 называются слотами .

Определим класс для фильмов:

 КОРТЕЖ: название фильма режиссер актеры ;
 

Это также генерирует сеттеры >>название , >>директор и >>актеры и геттеры название>> , директор>> и актеры>> . Например, мы можем создать новый фильм с

 фильм новый "Престиж" >>название
  «Кристофер Нолан» >>режиссер
  { "Хью Джекман" "Кристиан Бэйл" "Скарлетт Йоханссон" } >>актеры
 

Мы также можем сократить это до

.
 "Престиж" "Кристофер Нолан"
{ "Хью Джекман" "Кристиан Бэйл" "Скарлетт Йоханссон" }
фильм боа
 

Слово boa означает «по порядку аргументов» и представляет собой конструктор, который заполняет слоты кортежа элементами стека по порядку. киноудав называется удав-конструктор , каламбур от Удава-констриктора. Принято определять наиболее распространенный конструктор с именем , который в нашем случае может быть просто

.
 :  (название режиссер актеры -- фильм ) movie boa ;
 

На самом деле конструкторы удавов встречаются довольно часто, поэтому приведенную выше строку можно сократить до

.
 C: <фильм> фильм
 

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

Функциональные люди будут обеспокоены изменчивостью кортежей. На самом деле слоты могут быть объявлены доступными только для чтения с помощью {имя слота только для чтения} . В этом случае сеттер поля не будет сгенерирован, и значение должно быть установлено в начале с помощью конструктора удава. Другие допустимые модификаторы слотов: 9.0033 начальный: — для объявления значения по умолчанию — и слово класса, например целое число , для ограничения значений, которые можно вставлять.

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

 КУРТКА: лента
  { строка клавиатуры только для чтения }
  { гитарная струна только для чтения }
  { басовая струна только для чтения }
  { барабанная струна только для чтения } ;
: <группа> ( клавишные гитара бас барабаны -- группа ) группа удав ;
 

вместе с одним экземпляром

 "Ричард Райт" "Дэвид Гилмор" "Роджер Уотерс" "Ник Мейсон" <группа>
 

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

 GENERIC: звездочка (элемент -- звездочка)
 

Как видите, он объявлен с помощью слова разбора GENERIC: и объявляет свои эффекты стека, но прямо сейчас не имеет реализации, поэтому нет необходимости в закрывающем ; . Общие слова используются для выполнения динамической диспетчеризации. Мы можем определить реализации для различных классов, используя слово М:

 M: кинозвезды актеры>> первый ;
M: бэнд звездный бас>> ;
 

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

Встроенные классы и классы кортежей — это не все, что есть в объектной системе: с помощью операций над множествами, таких как UNION: и INTERSECTION: , можно определить больше классов. Другой способ определить класс — это миксин .

Миксины определяются с помощью слова MIXIN: , и существующие классы могут быть добавлены к миксину, написавшему

.
 INSTANCE: миксин класса
 

Методы, определенные в миксине, будут доступны для всех классов, принадлежащих миксину. Если вы знакомы с классами типов Haskell, вы узнаете сходство, хотя Haskell требует во время компиляции, чтобы экземпляры классов типов реализовывали определенные функции, в то время как в Factor это неофициально указано в документации.

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

Это позволяет обрабатывать все последовательности в Factor с помощью общего набора слов, отличаясь при этом реализацией и сводя к минимуму повторение кода (поскольку требуется только несколько примитивов, а другие операции определены для 9).0033 последовательность класс). Наиболее распространенные операции, которые вы будете использовать с последовательностями, — это map , filter и reduce , но есть и другие операции — как вы можете видеть с помощью «sequences» help .

Изучение инструментов

Большая часть производительности Factor связана с глубокой интеграцией языка и библиотек с инструментами вокруг них, которые воплощены в слушателе. Многие функции слушателя можно использовать программно, и наоборот. Вы видели несколько примеров этого:

  • по справке можно перемещаться онлайн, но вы также можете вызвать ее с помощью help и распечатать элементы справки с помощью print-content ;
  • ярлык F2 или слова обновить и обновить-все можно использовать для обновления словарей с диска при продолжении работы в прослушивателе;
  • слово edit обеспечивает интеграцию с редактором, но вы также можете щелкнуть по имени файла на страницах справки, чтобы открыть словарь.

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

 : вкл ( х -- у ) 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-as вместо map . Поскольку целевая коллекция не является строкой, мы не использовали map , который сохраняет тип, но map-as , которые принимают в качестве дополнительного аргумента экземпляр целевой коллекции — здесь { } . Наша окончательная версия сглаживает массив пар с concat и, наконец, превращает его в битовый массив:

 СИНТАКСИС: DNA{ "}" синтаксический анализ-токены concat
  [ 1string dna>bits ] { } map-as
  concat > суффикс битового массива! ;
 

Если вы попробуете это с ДНК { a ccg t a g } , вы должны получить

 `?{ ф ф т т т т ф т т ф ф ф ф т }`
 

Давайте сделаем еще один очень простой пример, украденный у Джона Бенедиктссона, который касается инфиксного синтаксиса для диапазонов. До сих пор мы использовали [a,b] для создания диапазона. Мы можем сделать синтаксис более удобным для людей из других языков, используя ... в качестве инфиксного слова.

Мы можем использовать scan-object , чтобы запросить у синтаксического анализатора следующий проанализированный объект, и unclip-last , чтобы получить верхний элемент из вектора-аккумулятора. Таким образом, мы можем определить . .. просто с

 СИНТАКСИС: ... удалить суффикс [a,b] последнего сканируемого объекта! ;
 

Вы можете попробовать это с 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 * / ] bi@ ;
 

Вы можете проверить, что это определение работает с чем-то вроде 2 -16 30solveq , которое должно выводить как 3. 0 , так и 5.0 . Помимо написания в стиле RPN, наша первая версия solveq выглядит точно так же, как на языке с локальными переменными. Для второго определения мы применяем как + и - операций для -b и дельты, используя комбинатор 2bi , а затем разделите оба результата на 2a, используя bi@ .

Также есть поддержка местных в кавычках - с использованием [| - и методы - с использованием M:: - и также можно создать область, в которой можно связать локальные переменные вне определений, используя [пусть . Конечно, все они на самом деле скомпилированы в конкатенативный код с некоторой перетасовкой стека. Я рекомендую вам просмотреть примеры этих слов, но имейте в виду, что их использование на практике гораздо менее заметно, чем можно было бы ожидать — около 1% собственной кодовой базы Factor.

Другой более распространенный случай возникает, когда вам нужно специализировать цитату по некоторым значениям, но они не появляются в нужном месте. Помните, что вы можете частично применить котировку, используя curry . Но это предполагает, что значение, которое вы применяете, должно быть самым левым в цитате; в других случаях вам нужно перетасовать стек. Слово с — это своего рода частичное приложение с дыркой. Он также содержит цитату, но использует третий элемент в стеке вместо второго. Кроме того, полученная каррированная цитата будет применена к элементу, вставившем ее на вторую позицию.

Пример из документации, вероятно, говорит больше, чем приведенное выше предложение: попробуйте написать 1 { 1 2 3 } [ / ] с картой .

Позвольте мне снова взять премьер? , но на этот раз напишите его без вспомогательных слов:

 : премьер? ( n -- ? ) [ sqrt 2 поменять местами [a,b] ] [ [ поменять местами делитель? ] карри ] би любой? нет ;
 

Используя с вместо curry , это упрощается до

 : премьер? ( n -- ? ) 2 над sqrt [a,b] [ делитель? ] с любого? нет ;
 

Если вы не представляете, что происходит, вы можете рассмотреть словарь fry . Он определяет жареных котировок ; это котировки, в которых есть дыры, отмеченные _ , которые заполнены значениями из стека.

Первая цитата переписывается проще как

 [ '[ 2 _ sqrt [a,b] ] вызов ]
 

Здесь мы используем жареную цитату — начиная с '[ — для внедрения элемента на вершине стека во вторую позицию, а затем используем позвоните по номеру , чтобы оценить полученное предложение. Вторая цитата становится просто

 [ '[ _ поменять местами делитель? ] ]
 

, то есть альтернативное определение Prime? это

 : премьер? ( n -- ? ) [ '[ 2 _ sqrt [a,b] ] call ] [ '[ _ поменять местами делитель? ] ] би любой? нет ;
 

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

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

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

 СИМВОЛ: любимый язык
 

Затем можно использовать слово set для привязки переменной и get для получения ее значений, например

 Набор любимых языков "Фактор"
любимый язык получить
 

Области являются вложенными, и новые области могут быть созданы с помощью слова with-scope . Попробуйте например

 : на JVM ( -- ) [
  Набор любимых языков "Скала"
  любимый язык получить . 
] с областью действия ;
 

Если вы запустите на JVM вы получите "Скала" напечатано, но все же после выполнения любимый-язык получите возврат "Фактор" .

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

Вход/Выход

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

Factor реализует эффективные средства асинхронного ввода-вывода, аналогичные NIO на JVM или системе ввода-вывода Node. js. Это означает, что операции ввода и вывода выполняются в фоновом режиме, оставляя задачу переднего плана свободной для выполнения работы, пока диск вращается или сеть буферизует пакеты. Фактор в настоящее время является однопоточным, но асинхронность позволяет ему быть достаточно производительным для приложений, которые связаны с вводом-выводом.

Все слова ввода/вывода Factor сосредоточены в потоках . Потоки — это ленивые последовательности, которые можно читать или записывать, типичными примерами являются файлы, сетевые порты или стандартный ввод и вывод. Factor содержит пару динамических переменных, называемых input-stream и output-stream , которые используются большинством слов ввода/вывода. Эти переменные можно восстановить локально, используя with-input-stream , with-output-stream и with-streams 9.0034 . Когда вы находитесь в прослушивателе, потоки по умолчанию записывают и читают в прослушивателе, но как только вы развертываете свое приложение как исполняемый файл, они обычно привязываются к стандартному вводу и выводу вашей консоли.

Слова и (или ) могут использоваться для создания потока чтения или записи в файл, учитывая его путь и кодировку. Собрав все вместе, мы делаем простой пример слова, которое читает каждую строку файла, закодированного в 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 ] каждая ;
 

Если файл небольшой, можно также использовать file-contents для чтения всего содержимого файла в одной строке. Factor определяет гораздо больше слов для ввода/вывода, которые охватывают гораздо больше случаев, таких как двоичные файлы или сокеты.

Мы заканчиваем этот раздел исследованием некоторых слов для обхода файловой системы. Наша цель — очень минимальная реализация команды ls .

Слово directory-entries перечисляет содержимое каталога, предоставляя список элементов кортежа, каждый из которых имеет слоты имя и тип . Вы можете увидеть это, попробовав "/home" записи каталога [имя>>] map . Если вы проверите записи каталога, то увидите, что это тип либо +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.0034 слово. Если вы напишете "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 делает именно то, что нам нужно, но принимает на вход объект duration . Мы можем создать продолжительность 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.0127 Печь .

Furnace позволяет нам, среди прочего, писать более сложные действия, используя язык шаблонов. На самом деле, по умолчанию поставляются два языка шаблонов, и мы будем использовать Chloe . Furnace позволяет нам использовать действия create page из шаблонов Chloe, а для создания ответчика нам нужно будет добавить маршрутизацию.

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

 диспетчер новый диспетчер
   "echo" дополнительный ответчик
  "/home/andrea"  "home" ответ на добавление
  основной ответчик set-global
 

Конечно, замените путь /home/andrea на любую папку, которая вам нравится. Если вы снова запустите сервер с 8080 httpd , вы сможете увидеть как наш простой эхо-ответчик (под /echo ), так и содержимое ваших файлов (под /home ). Обратите внимание, что список каталогов по умолчанию отключен, вы можете получить доступ только к содержимому файлов.

Теперь, когда вы знаете, как выполнять маршрутизацию, мы можем написать действия страницы в Chloe. Ситуация начинает усложняться, поэтому мы формируем словарь с помощью "привет-печь" скаффолд-работа . Сделайте так:

 ! 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 ;
<канал> дублировать публикацию
 

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

2312843084896785643440870335

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

    Будем ждать на этом канале, тем самым заблокируем UI:

     своп из .
     

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

     f 9000  725813726152747188779788

    2312843084896785643440870335

      58956 <удаленный-канал> "Привет, каналы"

    В экземпляре сервера сообщение должно быть напечатано.

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

    В противном случае можно использовать словарь io.launcher для запуска других экземпляров Factor программным путем.

    Куда пойти отсюда?

    Мы многое рассмотрели, и я надеюсь, что теперь у вас есть ощущение, подходит ли вам Фактор. Теперь вы можете работать с документацией и, надеюсь, внести свой вклад в Factor.

    Позвольте мне закончить несколько советов:

    • когда вы начинаете писать Factor, это очень легко справляться с перетасовкой стека. Хорошо изучите комбинаторы и не бойтесь выбросить свои первые примеры;
    • никакое определение не слишком короткое: цельтесь в одну линию;
    • справочная система и инспектор - ваши лучшие друзья.

    Справедливости ради нужно отметить и некоторые недостатки Factor:

    • Во-первых, сообщество очень маленькое. То, что они сделали, впечатляет, но не надейтесь найти много информации в Интернете;
    • конкатенативная модель очень мощная, но ее очень трудно понять правильно;
    • Factor не хватает потоков: хотя распределенные процессы компенсируют это, они несут некоторые затраты на сериализацию;
    • , наконец, у Factor в настоящее время нет менеджера пакетов, и это, вероятно, мешает вкладу.

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

    • во-первых, я мало говорил об ошибках и исключениях. Узнайте больше с помощью «ошибки» ;
    • макросов словарь реализует форму метапрограммирования времени компиляции, менее общую, чем синтаксический анализ слов, но все же довольно удобную;
    • словарь моделей позволяет реализовать форму программирования потока данных с использованием объектов с наблюдаемыми слотами;
    • словарь match реализует форму сопоставления с образцом;
    • словарь монад реализует монады в стиле Haskell.

    Я думаю, что эти словари являются свидетельством силы и выразительности Factor. Удачного взлома!

     ИСПОЛЬЗОВАНИЕ: images.http
    "http://factorcode.org/logo.png" http-изображение.
     

    COCACOLA: биннинг метагеномных контигов с использованием компоновки последовательности, считывания CoverAge, выравнивания СО и считывания парных концов LinkAge | Биоинформатика

    Реферат

    Мотивация

    Появление технологий секвенирования следующего поколения позволяет исследователям секвенировать сложные микробные сообщества непосредственно из окружающей среды. Поскольку сборка обычно производит только фрагменты генома, также известные как контиги, вместо всего генома, крайне важно сгруппировать их в операционные таксономические единицы (OTU) для дальнейшего таксономического профилирования и последующего функционального анализа. Кластеризация OTU также называется биннингом. Мы представляем COCACOLA, общую структуру, которая автоматически объединяет контиги в OTU на основе состава последовательностей и охвата нескольких образцов.

    Результаты

    Эффективность COCACOLA продемонстрирована как в смоделированных, так и в реальных наборах данных по сравнению с современными подходами к биннингу, такими как CONCOCT, GroopM, MaxBin и MetaBAT. Превосходная производительность COCACOLA зависит от двух аспектов. Один использует расстояние L 1 вместо евклидова расстояния для лучшей таксономической идентификации во время инициализации. Что еще более важно, COCACOLA использует преимущества как жесткой, так и мягкой кластеризации за счет регуляризации разреженности. Кроме того, инфраструктура COCACOLA легко включает индивидуальные знания для обеспечения точности бинирования. В нашем исследовании мы изучили два типа дополнительных знаний: совместное выравнивание с референсными геномами и сцепление контигов, обеспечиваемое считываниями с парными концами, а также совокупность обоих. Мы обнаружили, что как информация о совместном выравнивании, так и информация о связи еще больше улучшают биннинг в большинстве случаев. COCACOLA масштабируется и работает быстрее, чем CONCOCT, GroopM, MaxBin и MetaBAT.

    Наличие и внедрение

    Программное обеспечение доступно по адресу https://github.com/younglululu/COCACOLA.

    Дополнительная информация

    Дополнительные данные доступны по адресу Биоинформатика онлайн.

    1 Введение

    Метагеномные исследования направлены на изучение микробных сообществ непосредственно из образцов окружающей среды без культивирования видов-членов (Riesenfeld et al. , 2004). Технологии секвенирования следующего поколения позволяют биологам извлекать геномные данные с беспрецедентно высоким разрешением и достаточной глубиной секвенирования, предлагая понимание сложных микробных сообществ, даже включая виды с низкой численностью (Albertsen 9).0029 и др. , 2013). Для дальнейшего изучения таксономической структуры микробных образцов собранные фрагменты последовательности, также известные как контиги, необходимо сгруппировать в операционные таксономические единицы (OTU), которые в конечном итоге представляют геномы или значительные части геномов. Кластеризация OTU также называется биннингом (или геномным биннингом), что служит ключевым шагом к таксономическому профилированию и последующему функциональному анализу. Таким образом, точное бинирование контигов является существенной проблемой в метагеномных исследованиях.

    Несмотря на обширные исследования, точное бинирование контигов остается сложной задачей по нескольким основным причинам, включая химерные сборки из-за повторяющихся участков последовательности внутри или между геномами, ошибки секвенирования или артефакты, вариации уровня штамма в пределах одного и того же вида и т. д. (Alneberg et и др. , 2014; Mande и др. , 2012) Доступные в настоящее время методы биннинга можно в целом разделить на подходы классификации и кластеризации. Подходы к классификации «зависят от таксономии», то есть для отнесения контигов или прочтений к значимым таксонам необходимы справочные базы данных. Классификация основана либо на гомологии из-за идентичности последовательностей, либо на геномных сигнатурах, таких как образцы состава олигонуклеотидов и таксономические клады. Методы на основе гомологии включают MEGAN (Huson и др. , 2007), который присваивает чтения низшему общему таксономическому предку. Примеры методов на основе геномных сигнатур включают PhyloPythia (McHardy et al. , 2007) и Kraken (Wood and Salzberg, 2014), которые представляют собой классификаторы на основе композиции и наивный байесовский классификатор (Rosen et al. , 2011). подход, специфичный для клады. Кроме того, доступны гибридные методы, учитывающие стратегии как выравнивания, так и композиции, такие как PhymmBL (Brady and Salzberg, 2009).) и СФИНКС (Мохаммед и др. , 2011).

    Для сравнения, подходы к кластеризации «независимы от таксономии», то есть не требуются дополнительные справочные базы данных или таксономическая информация. Эти подходы требуют измерения подобия по содержанию GC, составу тетрамера (Albertsen et al. , 2013; Chatterji et al. , 2008; Yang et al. , 2010) или интерполированным марковским моделям (Kelley and Salzberg, 2010), к профилю охвата контигов (Baran and Halperin, 2012; Wu and Ye, 2011).

    Недавно было разработано несколько методов группировки контигов с использованием профилей охвата контигов в нескольких метагеномных образцах (Albertsen et al. , 2013; Alneberg et al. , 2014; Carr et al. , 2013). ; Imelfort и др. , 2014; Kang и др. , 2015; Nielsen и др. , 2014; Wu и др. , 2015). Здесь покрытие контига определяется как доля прочтений, сопоставленных с контигом в выборке. Идея состоит в том, что если два контига происходят из одного и того же генома, их профили покрытия в нескольких образцах должны сильно коррелировать. Эти методы могут быть дополнительно улучшены путем интеграции профилей покрытия с композицией тетрамеров последовательностей контигов (Alneberg и др. , 2014; Имельфорт и др. , 2014; Канг и др. , 2015). Среди этих методов GroopM (Imelfort et al. , 2014 г.) имеет преимущество в его визуализированном и интерактивном конвейере. С одной стороны, он гибкий, позволяя пользователям объединять и разделять бины под вмешательством эксперта. С другой стороны, при отсутствии вмешательства экспертов результаты автоматического группирования GroopM не столь удовлетворительны, как CONCOCT (Alneberg et al. , 2014). КОНКОКТ (Альнеберг и др. , 2014) использует смешанную модель Гаусса (GMM) для группировки контигов в ячейки. Кроме того, CONCOCT предоставляет механизм для автоматического определения оптимального числа OTU путем выбора вариационной байесовской модели (Corduneanu and Bishop, 2001). MetaBAT (Kang et al. , 2015) вычисляет интегрированное расстояние для парных контигов, а затем итеративно группирует контиги в кластеры с помощью модифицированного алгоритма K-medoids. А MaxBin (Wu et al. , 2015) сравнивает распределения расстояний между и внутри одних и тех же геномов.

    В этой статье мы представляем COCACOLA, общую структуру для группирования контигов, включающую компоновку последовательности, CoverAge, выравнивание CO и считывание парных концов LinkAge для нескольких образцов. По умолчанию COCACOLA использует состав последовательностей и охват нескольких образцов для бинирования. По сравнению с недавними подходами, такими как CONCOCT, GroopM, MaxBin и MetaBAT, COCACOLA работает лучше по трем аспектам. Во-первых, COCACOLA демонстрирует превосходство в отношении точности, полноты и скорректированного индекса Рэнда (ARI). Во-вторых, COCACOLA показывает лучшую надежность в случае различного количества образцов. COCACOLA масштабируется и работает быстрее, чем CONCOCT, GroopM, MaxBin и MetaBAT.

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

    2 Материалы и методы

    2.

    1 Формулировка задачи

    Микробное сообщество состоит из набора OTU с разным уровнем численности, и наша цель состоит в том, чтобы поместить контиги в геномные ячейки OTU, из которых они были первоначально получены. Ожидается, что OTU будут распутаны на основе контигов, включающих либо дискриминационную распространенность, либо несходство между последовательностями с точки зрения l -мерный состав. Обоснование объединения контигов в OTU основано на основном предположении, что контиги, происходящие из одной и той же OTU, имеют схожую относительную численность, а также состав последовательностей.

    Формально мы кодируем численность и состав k -й OTU с помощью (M+V) размерного вектора признаков, W·k, k=1,2,⋯,K⁠, где M – это число образцов, V — количество различных l -меров, а K — общее количество OTU. В частности, Wmk представляет обилие к -й ОТЕ в м -й пробе, m=1,2,⋯,M⁠ соответственно. А WM+v,k обозначает относительную частотную композицию l -mer k -ой OTU, v=1,2,⋯,V⁠. Точно так же вектор признаков n -го контига обозначается как X·n⁠. Пусть Hkn – индикаторная функция, описывающая принадлежность n -го контига к k -ому OTU, т. е. Hkn=1 означает, что n -ый контиг исходит из k -го OTU, а Hkn=0 в противном случае. Следовательно, X·n можно представить в виде:

    X·n= h2nW·1+ h3nW·2+⋯+HknW·K,  n=1,2,⋯,N

    (1)

    , где N — количество контигов. Уравнение (1) можно дополнительно записать в матричной форме:

    X≈WH     s.t. W≥0,   H∈{0,1}K×N,‖H·n‖0=1

    (2)

    , где W=(W·1,W·2,⋯,W·K) (M+V)×K неотрицательная матрица, в которой каждый столбец кодирует вектор признаков соответствующей OTU. И H=( H·1,H·2,⋯,H·N) представляет собой двоичную матрицу размера K×N, в которой каждый столбец кодирует индикаторную функцию соответствующего контига. ‖H·n‖0=∑k=1K Hkn=1 обеспечивает n -th contig принадлежит исключительно только одному конкретному OTU.

    Матрицы W и H получаются путем минимизации некоторой целевой функции. В этой статье мы используем норму Фробениуса, обычно известную как сумма квадратов ошибок:

    arg⁡min⁡W,H≥0‖X−WH‖F2   s.t. H∈{0,1}K×N,‖H·n‖0=1

    (3)

    Обратите внимание, что уравнение (3) является NP-трудным по формулировке как задача целочисленного программирования с экспоненциальным числом допустимых решений (Цзян и др. , 2014). Обычная процедура для решения уравнения (3) ослабляет бинарное ограничение H с числовыми значениями. Следовательно, уравнение (3) переформулируется как следующая задача минимизации: W,H≥0

    (4)

    где H служит матрицей коэффициентов вместо матрицы индикатора. В сценарии уравнения (4), W·k⁠, вектор признаков k -й OTU представляет собой центр тяжести k -го кластера. При этом каждый контиг X·n аппроксимируется взвешенной смесью кластеров, где веса закодированы в H·n⁠. Другими словами, ослабление бинарного ограничения переводит интерпретацию с жесткой кластеризации на мягкую кластеризацию, где жесткая кластеризация означает, что контиг может быть назначен только одному OTU, а мягкая кластеризация позволяет назначать контиг нескольким OTU. Было замечено, что при наложении разреженности на каждый столбец из H может быть облегчено жесткое кластерное поведение (Kim and Park, 2008). Следовательно, уравнение (4) дополнительно модифицируется с помощью формы разреженной неотрицательной матричной факторизации (Kim and Park, 2008):

    arg⁡min⁡W,H≥0‖X−WH‖F2+α∑n=1N‖ H·n‖12

    (5)

    где ‖·‖1 означает L 1 -норм. Из-за неотрицательности H , ‖H·n‖1 обозначает сумму столбцов n -го вектора-столбца H . Параметр α>0 управляет компромиссом между точностью аппроксимации и разреженностью Н . А именно, большее значение α подразумевает большую разреженность, а меньшее значение обеспечивает лучшую точность аппроксимации.

    2.2 Матричное представление контигов

    Подобно CONCOCT (Alneberg et al. , 2014), каждый контиг длиной более 1000 п.н. V размерная тетрамерная композиция. Покрытие обозначает среднее количество картированных прочтений на пару оснований из каждого из M различных образцов. В то время как состав тетрамера обозначает частоту тетрамера самого контига плюс его обратный комплемент. Благодаря палиндромным тетрамерам V  =   136.

    Приняв обозначение CONCOCT (Alneberg et al. , 2014), покрытие всех контигов N представлено матрица Y , где N - количество интересующих контигов, а Y нм указывает охват n -го контига из m -го образца. В то время как тетрамерный состав контигов N представлен матрицей N  ×  V Z , где Z nv указывает количество v , обнаруженное в тетрамере 2 n -й контиг. Перед нормализацией к каждой записи матрицы покрытия Y и матрицы композиции Z 9 добавляется псевдосчетчик.0030 соответственно. Что касается покрытия, добавляется небольшое значение, то есть Y′nm=Ynm+100/Ln⁠, аналогично одному чтению, выровненному по каждому контигу, как и ранее, где L n — длина n -й контиг. Что касается состава, то просто добавляется один счет, то есть Z′nv=Znv+1⁠.

    Матрица покрытия Y сначала нормализуется по столбцам (т.0029 M образцов) для получения профиля покрытия p . Построчная нормализация направлена ​​на смягчение неоднородности эффективности секвенирования среди контигов.

    Y′′nm=Y′nm∑n=1NY′nm         pnm=Y′′nm∑m=1MY′′nm

    (6)

    Композиционная матрица Z нормирована по строкам для каждой (т. е. нормализация по количеству тетрамеров M ) для получения профиля состава q :

    qnv=Z′nv∑v=1VZ′nv

    (7)

    Матрица признаков контигов обозначается как X= [p q]T⁠, как комбинация профиля покрытия p и составной профиль q . Чтобы быть конкретным, X представляет собой неотрицательную матрицу (M + V) × N, каждый столбец которой представляет вектор признаков определенного контига.

    2.3 Включение дополнительных знаний в биннинг

    Мы рассматриваем два типа дополнительных знаний, которые могут повысить точность биннинга (Basu et al. , 2008). Одним из вариантов является связывание парных чтений. В частности, большое количество каналов, соединяющих два контига, предполагает высокую вероятность того, что они принадлежат одному OTU. Поскольку связь может быть ошибочной из-за существования химерных последовательностей, мы сохраняем связи, о которых сообщается в нескольких образцах. Другой вариант — совместное выравнивание по референсным геномам. То есть два контига, сопоставленные с одним и тем же эталонным геномом, подтверждают принадлежность к одной и той же OTU.

    Мы кодируем дополнительные знания с помощью ненаправленной сети в виде матрицы неотрицательных весов A , где Ann' определяет уровень достоверности, который, как мы полагаем, n -й контиг и n'-й контиг кластеризуются вместе. На основе вышеупомянутой матрицы A вводится элемент регуляризации сети для измерения когерентности бинирования (Cai и др. , 2011):

    Rg=12∑n,n′=1N‖H·n−H ·n′‖2Ann′=Tr(HLHT)

    (8)

    , где Tr(·) указывает след матрицы, сумму элементов по диагонали. D обозначает диагональную матрицу, элементами которой являются суммы столбцов (или суммы строк в силу симметрии) A , т. е. Dnn=∑n′=1NNn′⁠. Матрица Лапласа (Chung, 1997) определяется как L=D-A⁠. По соглашению вместо этого мы используем нормализованную матрицу Лапласа, то есть L=D-1/2LD-1/2=I-D-1/2AD-1/2≜I-A⁠. Включив регуляризацию сети в уравнение (8), целевая функция в уравнении (5) изменится на следующую форму:

    arg⁡min⁡W,H≥0‖X−WH‖F2+α∑n=1N‖H·n‖12+β Tr(HLHT)

    (9)

    где параметр β>0 управляет компромисс веры между неконтролируемым биннингом и дополнительным знанием. А именно, большое β указывает на сильную уверенность в дополнительных знаниях. И наоборот, маленькие β придают данным больший вес.

    Для одновременного использования нескольких дополнительных источников знаний комбинированная матрица Лапласа строится как средневзвешенное значение отдельных матриц Лапласа L¯=(∑dαdLd)/(∑dαd), где каждый положительный вес равен α d отражает вклад соответствующей информации. Для простоты веса рассматриваются в статье одинаково.

    2.

    4 Оптимизация путем чередования неотрицательных наименьших квадратов

    Среди комплексных алгоритмов для решения уравнения (9) наиболее широко используется метод мультипликативного обновления (Lee and Seung, 1999). Несмотря на простоту реализации, медленная сходимость вызывает большие опасения. В этой статье используется более эффективный алгоритм с доказуемой сходимостью, называемый чередующимся неотрицательным методом наименьших квадратов (ANLS) (Ким и Парк, 2008). ANLS итеративно обрабатывает две неотрицательные подзадачи наименьших квадратов в уравнении (10) до сходимости. Алгоритм ANLS кратко описан в алгоритме 1.9.0003

    H ←arg⁡min⁡H≥0‖X−WH‖F2+α∑n=1N‖H·n‖12+β Tr(HLHT)

    (10a)

    W ←arg⁡min⁡W≥ 0‖XT−HTWT‖F2

    (10b)

    Алгоритм 1

    Оптимизация с помощью ANLS

    Вход: матрица признаков X∈R(M+V)×N⁠, исходная базисная матрица W∈R(M+ V)×K и матрица коэффициентов H∈RK×N⁠, порог допуска ε , максимальный порог итерации T

    1: повторение

    2:  Получение оптимального H уравнения (109a) путем фиксации0029 W

    3:  Obtain optimal W of Equation (10b) by fixing H

    4: until A particular stopping criterion involving ε is satisfied or iteration number exceeds T

    Output : W , H

    Решаем уравнение (10а) по блочному спуску по координатам, то есть делим уравнение (10а) на N подзадач и минимизируем целевую функцию по каждой подзадаче за раз, при этом оставляя остальные фиксированными:

    arg⁡min⁡H·n≥0‖X·n−WH·n‖22+α‖H·n‖12+β H·nTLH·n, n=1,⋯,N

    =arg⁡min ⁡H·n≥0‖X·n−WH·n‖22+α‖H·n‖12+β H·nT(H·n−2∑n′=1NNn′H·n′old)

    = arg⁡min⁡H·n≥0‖X·n−WH·n‖22+α‖H·n‖12+β ‖H·n−∑n′=1NNn′H·n′old‖22 

    ( 11)

    , где матрица H old обозначает значение H , полученное на предыдущей итерации. Следуя правилу обновления Якоби, мы объединяем N подзадач в уравнении (11) в матричную форму:

    arg⁡min⁡H≥0‖(X01×NβHoldA)−(Wαe1×KβIK)H‖F2

    (12)

    , где 01×N — N размерный вектор-строка всех 0, e1×K — K размерный вектор-строка всех 1.

    2.5 Инициализация

    W и H

    Обратите внимание, что нам нужно инициализировать W и H в качестве исходных данных не только для алгоритма 1. повышает точность решения, но также способствует быстрой сходимости к лучшим локальным минимумам (Langville и др. , 2006 г.). Мы инициализируем W и H с помощью кластеризации K-средних, а именно, W устанавливается как центр тяжести K-средних X , где каждый столбец W·k соответствует вектору признаков k - й центроид. Между тем, H устанавливается как индикаторная матрица, кодирующая назначение кластера.

    Измерение расстояния имеет решающее значение для успеха биннинга. В идеале правильное измерение расстояния демонстрирует более различимую таксономическую разницу. Традиционный подход K-средних использует евклидово расстояние в качестве измерения по умолчанию для количественной оценки близости. Однако, что касается профиля покрытия, Су и др. (2012) показывает, что расстояние L 1 дает более разумные результаты бинирования, чем евклидовы и основанные на корреляции расстояния. Что касается композиционного профиля, то расстояние L 1 также демонстрирует превосходство над евклидовым и косинусным расстояниями (Liao et al. , 2014). Поэтому наш метод использует кластеризацию K-средних с расстоянием L 1 . Как только достигнута предварительная кластеризация K-средних, мы удаляем подозрительные кластеры с небольшим количеством контигов, используя восходящий L-метод (Salvador and Chan, 2004). Сравнение производительности по отношению к L 1 и Евклидово расстояние приведены в дополнительном материале.

    2.6 Настройка параметров

    У нас есть два параметра (α,β), которые необходимо настроить в нашем алгоритме. Традиционная стратегия, подобная перекрестной проверке, требует поиска в двумерной сетке значений-кандидатов, что невозможно с точки зрения вычислений в случае больших наборов данных. Вместо этого мы сначала ищем хорошее маргинальное значение α , фиксируя β =   0. После этого выполняется одномерный поиск в диапазоне кандидатов β , сохраняя α фиксированными.

    В нашей реализации, когда β   =  0, α аппроксимируется регрессией соответствующих множителей Лагранжа из N задач с ограничениями arg⁡min⁡H·n≥0‖X−WH·n‖F2 с ограничение (‖H·n‖1−1)2=0⁠, где n=1,⋯,N⁠. Полученное α обозначается α∗⁠. Затем мы запускаем алгоритм для каждого кандидата β и фиксированного α=α∗⁠, что приводит к соответствующим результатам биннинга с различным номером кластера. Обратите внимание, что традиционные внутренние индексы достоверности кластера применимы только на основе сценария с фиксированным номером кластера (Wwiie 9).0029 и др. , 2015), такие как сумма квадратов ошибок и индекс Дэвиса-Булдина (Davies and Bouldin, 1979). Чтобы быть конкретным, индексы имеют тенденцию к монотонному увеличению или уменьшению по мере увеличения номера кластера (Liu et al. , 2013). Мы устраняем влияние монотонности, принимая индекс минимизации TSS (Tang-Sun-Sun) (Tang et al. , 2005), то есть мы выбираем кандидата β с минимальным значением TSS, записанным как β∗⁠. Тогда мы можем решить уравнение (9) с использованием (α∗,β∗) в качестве выбранных параметров регуляризации.

    2.7 Постобработка

    Результирующий биннинг, полученный с помощью Алгоритма 1, может содержать кластеры, тесно перемешанные друг с другом. Поэтому мы определяем разделимую проводимость как эффективное измерение для диагностики близости связи парных кластеров, чтобы определить, следует ли их объединять. А именно, мы рассматриваем каждый кластер как имеющий сферическую сферу с центром в его центроиде. Чтобы быть устойчивым к выбросам, радиус выбирается как третий квартиль среди внутрикластерных расстояний. сепарабельная проводимость между c 1 -м кластером и c 2 -м кластером, sep(c1,c2)⁠, определяется как количество контигов из c

    1 1 -ое скопление также входит в сферический охват c 2 -го скопления, разделенного меньшим размером скопления на два. Интуитивно понятно, что разделяемая проводимость использует перекрытие между двумя кластерами. Процедура постобработки работает следующим образом: мы продолжаем выбирать пару кластеров с максимальным числом разделим проводимость и объединяем их до тех пор, пока она не превысит определенный порог. В этом исследовании порог установлен равным 1.

    2.8 Наборы данных

    Alneberg et al. (2014) смоделировал набор данных «вид» и другой набор данных «штамм». Оба смоделированных набора данных были созданы на основе образцов 16S рРНК, полученных в рамках Проекта микробиома человека (HMP) (Consortium et al. , 2012). Профили относительной численности различных видов/штаммов для моделирования также были основаны на образцах HMP.

    Смоделированный набор данных о «видах» состоял из 101 различных видов в 96 образцах. Он был направлен на проверку способности CONCOCT объединять контиги в сложные популяции (Alneberg et al. , 2014). Виды были аппроксимированы OTU из HMP с различиями в последовательностях >3%. Каждый вид гарантированно присутствовал не менее чем в 20 образцах. В общей сложности 37 628 контигов остаются для биннинга после совместной сборки и фильтрации.

    Смоделированный набор данных «штамм» предназначен для проверки способности CONCOCT группировать контиги на разных уровнях таксономического разрешения (Alneberg и др. , 2014). Чтобы быть более конкретным, смоделированный набор данных о «штаммах» состоял из 20 различных видов или штаммов одного и того же вида в 64 образцах, включая пять разных штаммов Escherichia coli , пять разных видов Bacteroides , пять разных видов разных Clostridium . родов и пять различных кишечных бактерий. Компании CONCOCT было сложно разделить пять различных штаммов E.coli (Alneberg и др. , 2014). Всего для биннинга после совместной сборки и фильтрации остается 9417 контигов.

    В дополнение к двум смоделированным наборам данных мы используем исследование временных рядов 11 образцов фекального микробиома недоношенного ребенка (Sharon et al. , 2013), обозначенное как набор данных «Sharon». Поскольку истинные виды, к которым принадлежат контиги, неизвестны, мы присваиваем метки классов, аннотируя контиги с помощью скрипта TAXAassign (Ijaz and Quince, 2013). В результате 2614 из 5579 контигов однозначно помечены для оценки на видовом уровне. Еще один реальный набор данных включает 264 семпла из консорциума MetaHIT (Qin и др. , 2010) (SRA:ERP000108), тот же набор данных, который используется в MetaBAT (Kang et al. , 2015), обозначенный как набор данных «MetaHIT». В целом 17 136 из 192 673 совместно собранных контигов однозначно помечены на уровне видов для оценки.

    2.9 Критерии оценки

    Мы используем стандартные меры, включая точность, полноту и ARI, для оценки результатов кластеризации. Их определения даны в дополнительном материале.

    3 Результаты

    Учитывая одни и те же входные данные, т. е. состав последовательности и охват нескольких образцов, мы показываем эффективность COCACOLA на смоделированных наборах данных «видов» и «штаммов» в сравнении с тремя современными, методологически различными методами. для биннинга контигов: CONCOCT (Alneberg и др. , 2014), GroopM (Imelfort и др. , 2014), MaxBin (Wu и др. , 2015) и MetaBAT (Kang и др. , 2015). Сравнение не включает Canopy (Nielsen et al. , 2014), который основан на объединении групп генов, а не объединении контигов. Кроме того, мы исследуем улучшение производительности COCACOLA после включения двух дополнительных знаний, совместного выравнивания с эталонными геномами и связи между контигами, обеспечиваемыми считываниями с парными концами, а также совокупностью обоих. Результаты показывают, что обе информации способствуют повышению производительности в большинстве случаев. Наконец, мы сообщаем о производительности COCACOLA на двух реальных наборах данных.

    3.1 Производительность на смоделированных наборах данных

    Несмотря на то, что и COCACOLA, и CONCOCT способны автоматически определять номер OTU, для начала требуется первоначальная оценка номера OTU K . Поскольку номер OTU обычно неизвестен, мы изучаем эффективность бинирования по отношению к значению K , выбранному эмпирически. Всесторонние исследования производительности биннинга для различных K приведены в дополнительном материале.

    Мы заметили, что кластеризация K-средних имеет тенденцию генерировать пустые кластеры при больших K . Наша стратегия состоит в том, чтобы увеличивать K до тех пор, пока не останется более K/2 пустых кластеров, и мы выбираем соответствующие K в качестве входных данных. На данном этапе мы больше акцентируем внимание на избыточности номера OTU, чем на точности. Таким образом, мы получаем K  =  192 и K  =  48 в качестве входных данных для смоделированного набора данных «виды» и «штаммы» соответственно.

    Для смоделированного набора данных «виды» на рис. 1(a) COCACOLA сравнивается с CONCOCT, GroopM, MaxBin и MetaBAT с точки зрения точности, полноты и ARI. Точность COCACOLA составляет 0,9.978, предполагая, что почти все контиги внутри каждого кластера происходят от одного и того же вида. Для сравнения, точность CONCOCT, GroopM, MaxBin и MetaBAT составляет 0,9343, 0,9324, 0,9973 и 0,9958 соответственно. Отзыв, полученный COCACOLA, составляет 0,9993, что означает, что почти все контиги, происходящие от одного и того же вида, сгруппированы в одни и те же кластеры. Напротив, отзыв CONCOCT, GroopM, MaxBin и MetaBAT составляет 0,996, 0,881, 0,9973 и 0,9174 соответственно. Что касается ARI, COCACOLA достигает 0,997, в то время как CONCOCT, GroopM, MaxBin и MetaBAT получают 0,9296, 0,7922, 0,9961 и 0,9308 соответственно.

    Рис. 1.

    Открыть в новой вкладкеСкачать слайд

    Производительность COCACOLA, CONCOCT, GroopM, MaxBin и MetaBAT как на смоделированных наборах данных ( a и b ), так и на реальных наборах данных ( c и ) (Цветная версия этой фигуры доступна по адресу Bioinformatics онлайн.)

    Для смоделированного набора данных «штамм» результаты показаны на рисунке 1 (b). Точность, полнота и ARI COCACOLA достигают 0,9.766, 0,9747 и 0,9512 соответственно. Для сравнения, CONCOCT, GroopM, MaxBin и MetaBAT достигают 0,8733, 0,9525, 0,8151 и 0,8730 с точки зрения точности, 0,9552, 0,7805, 0,9167 и 0,8009 с точки зрения полноты, 0,8809, 0,7529, 0,757 и 0,5858 с точки зрения ARI соответственно.

    Мы пришли к выводу, что COCACOLA хорошо справляется с построением видов из очень сложных образцов окружающей среды. Кроме того, COCACOLA хорошо справляется с изменениями уровня деформации, которые не могут быть полностью устранены из-за ограничений сборки (Alneberg 9).0029 и др. , 2014).

    3.2 Влияние включения дополнительных знаний на биннинг

    Мы исследуем улучшение производительности COCACOLA после включения двух дополнительных знаний, предложенных в разделе «Методы», в частности, совместного выравнивания с референсными геномами и связи между контигами, обеспечиваемыми парными - конец читает. Более того, мы изучаем ансамбль того и другого. Сравнение проводится между результатом биннинга COCACOLA, включающим дополнительные знания, и результатом без него. Сравнение основано на подвыборках смоделированного набора данных о «видах». Мы выбираем подвыборки размером от 10 до 90, с 10 в качестве приращения. Чтобы избежать дублирования вклада конкретной выборки, мы выбираем подвыборки без перекрытия. Следовательно, количество подвыборок равно 9, 4, 3, 2, 1, 1, 1, 1, 1 соответственно. Поскольку вклад дополнительных знаний почти уменьшается, когда размер выборки превышает K  =  30, поэтому мы сосредоточимся на 16 случаях от K  =  10 до K  =  30. матрица симметричных весов Ann′=1, если contig n и contig n' выровнены по одному и тому же виду с помощью скрипта TAXAassign (Ijaz and Quince, 2013). Как показано на рисунке 2(a–c), точность заметно улучшилась в 7 случаях и снизилась в 3 случаях, отзыв заметно улучшился в 11 случаях и немного снизился в 1 случае, ARI заметно улучшился в 10 случаях и снизился. незначительно в 2 случаях.

    Рис. 2.

    Открыть в новой вкладкеСкачать слайд

    Оценка влияния включения двух дополнительных знаний (раздел 2.3) на подвыборки смоделированного набора данных о «видах». Первый вариант — это информация о совместном выравнивании с эталонными геномами, обозначенная ( а в ). Второй вариант — это соединение парных считываний, обозначенное ( d f ). Ансамбль обоих изображается как ( g - i )

    С точки зрения сцепления мы разрабатываем симметричную взвешенную матрицу Ann' как количество выборок, поддерживающих сцепление, соединяющее контиг n и контиг n ⁠. Как показано на рисунке 2 (d–f), точность заметно улучшилась в семи случаях и снизилась в двух случаях, отзыв заметно улучшился в семи случаях и немного уменьшился в четырех случаях, ARI заметно улучшился в пяти случаях и уменьшился. в трех случаях.

    С точки зрения ансамбля совместного выравнивания и сцепления, как показано на рисунке 2(g-i), точность заметно улучшилась в 10 случаях и уменьшилась в 3 случаях, отзыв заметно улучшился в 13 случаях и ни в одном случае снижается, ОРЗ заметно улучшился в 11 случаях и уменьшился в 1 случае.

    У нас есть следующие выводы: (i) Когда имеется достаточное количество образцов, вклад дополнительных знаний уменьшается. (ii) Дополнительные знания, такие как информация о согласовании и увязке, в большинстве случаев способствуют повышению общей эффективности. (iii) Ансамбль обеих данных работает более стабильно, чем индивидуальная информация.

    3.3 Производительность на реальных наборах данных

    Применение COCACOLA к набору данных «Sharon» (рис. 1(c)), при первоначальном выборе K   =  30, точность, полнота и ARI достигают 0,9889, 0,9759 ​​и 0,9670 соответственно. Для сравнения, CONCOCT, GroopM, MaxBin и MetaBAT достигают 0,9801, 0,9820, 0,7077 и 0,9705 с точки зрения точности, 0,9606, 0,9147, 0,9767 и 0,8344 с точки зрения полноты, 0,9600, 0,9126, 0,5639 и 0,8634 с точки зрения ARI соответственно. COCACOLA идентифицирует шесть OTU, соответствующих шести зарегистрированным геномам. Для сравнения, CONCOCT, GroopM, MaxBin и MetaBAT идентифицируют 14, 24, 5 и 11 OTU соответственно.

    Далее мы исследуем улучшение производительности COCACOLA после включения дополнительных знаний. Мы используем информацию о связях только потому, что использовать скрипт TAXAassign (Ijaz and Quince, 2013) как для выравнивания, так и для маркировки — циклично. COCACOLA по-прежнему идентифицирует шесть OTU с точностью, отзывом и ARI, достигающими 0,9923, 0,9797 и 0,9743, что немного превосходит случай без дополнительных знаний.

    Применение COCACOLA к набору данных «MetaHIT» (рис. 1(d)), при первоначальном выборе K  =  100 точность, полнота и ARI достигают 0,9082, 0,8272 и 0,7717 соответственно. Для сравнения, CONCOCT, GroopM, MaxBin и MetaBAT достигают 0,8933, 0,5247, 0,6655 и 0,5738 с точки зрения точности, 0,7901, 0,6843, 0,8228 и 0,7397 с точки зрения полноты, 0,7518, 0,3757, 0,5866 и 0,1088 с точки зрения ARI соответственно.

    Далее мы исследуем улучшение производительности COCACOLA после включения информации о связях. Производительность немного улучшилась по сравнению с 0,9с 082 до 0,9084 по точности, с 0,8272 до 0,8350 по полноте и с 0,7717 до 0,7844 по ARI соответственно.

    3.4 Время работы COCACOLA, CONCOCT, GroopM, MaxBin и MetaBAT

    COCACOLA использует тот же конвейер синтаксического анализа данных, что и CONCOCT, и отличается только этапом группирования, тогда как GroopM использует собственный рабочий процесс. Разумно сравнить время работы биннинга непосредственно между COCACOLA и CONCOCT. Чтобы представить GroopM в контексте, мы учитываем этапы, связанные с биннингом, и поэтому исключаем этап анализа данных. Что касается MaxBin и MetaBAT, мы просто предварительно вычисляем информацию об изобилии и глубине. MaxBin включает параметр многопоточности, который задается как количество ядер. Все пять методов выполняются на вычислительной платформе с 12 ядрами и 60 ГБ ОЗУ, предоставляемой кластером высокопроизводительных вычислений USC. Сравнение проводится как на смоделированных наборах данных, так и на реальных наборах данных (таблица 1). Мы пришли к выводу, что COCACOLA работает быстрее, чем CONCOCT, GroopM, MaxBin и MetaBAT.

    Таблица 1.

    Время работы COCACOLA, CONCOCT, GroopM, MaxBin и MetaBAT

    Набор данных .
    Набор данных . КОКАКОЛА
    .
    КОНКОКТ
    .
    ГрупМ
    .
    МаксБин
    .
    MetaBAT
    .
    Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение .
    ‘species’  1m41.50s  1×  17m14.71s  10.2×  1h57m28s  69.4×  49m48.52s  29. 4×  4m16.14s  2.5× 
    'strain'  10.94s  1×  1m10.99s  6.5×  17m00.46s  93.3× 9m54.80s  54.4×  2m31.52s  13.9× 
    'Sharon'  13.22s  1×  25.11s  1.9×  4m45.85s  21.6× 1 мин 36,09 с 7.3×  24.66s  1.9× 
    'MetaHIT'  2m39.12s  1×  20m20.90s  7.7×  12m47.68s  4.8×  2h30m52s  КОКАКОЛА
    .
    КОНКОКТ
    .
    ГрупМ
    .
    МаксБин
    .
    MetaBAT
    .
    Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение .
    'species'  1m41.50s  1×  17m14.71s  10.2×  1h57m28s  69.4×  49m48.52s  29.4×  4m16.14s  2.5× 
    'strain'  10.94s  1×  1m10.99s  6.5×  17m00.46s  93.3×  9m54.80s  54.4×  2m31.52s  13.9× 
    'Sharon'  13.22s  1×  25.11s  1.9×  4m45.85s  21.6×  1m36.09s  7.3× 24. 66s  1.9× 
    'MetaHIT'  2m39.12s  1×  20m20.90s  7.7×  12m47.68s  4.8×  2h30m52s  53.1×  7 мин 25,07 с 2,8×

    Открыть в новой вкладке

    Таблица 1.

    Время работы COCACOLA, CONCOCT, GroopM, MaxBin и MetaBAT

    Набор данных . КОКАКОЛА
    .
    КОНКОКТ
    .
    ГрупМ
    .
    МаксБин
    .
    MetaBAT
    .
    Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение .
    «виды» 1 м 41,50 с 17m14.71s  10.2×  1h57m28s  69.4×  49m48.52s  29.4×  4m16.14s  2.5× 
    'strain'  10.94s  1×  1m10.99s  6.5×  17m00.46s  93.3×  9m54.80s  54.4×  2m31.52s  13.9× 
    'Sharon'  13.22s  25.11s  1.9×  4m45.85s  21.6×  1m36.09s  7.3×  24.66s  1.9× 
    'MetaHIT'  2m39.12s  1×  20m20.90s  7.7×  12m47.68s  4.8×  2h30m52s  53. 1×  7m25.07s  2.8× 

    Dataset . КОКАКОЛА
    .
    КОНКОКТ
    .
    ГрупМ
    .
    МаксБин
    .
    MetaBAT
    .
    Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение . Время . Ускорение .
    'species'  1m41.50s  1×  17m14.71s  10.2×  1h57m28s  69.4×  49m48.52s  29.4×  4m16.14s  2,5×
    «деформация» 10,94 с 1 м 10,99 с 6,5× 17m00. 46s  93.3×  9m54.80s  54.4×  2m31.52s  13.9× 
    'Sharon'  13.22s  1×  25.11s  1.9× 4m45.85s  21.6×  1m36.09s  7.3×  24.66s  1.9× 
    'MetaHIT'  2m39.12s  1×  20m20.90s  7.7 × 12 м 47,68 с 4,8× 2 ч 30 м 52 с 53,1× 7 мин 25,07 с 2,8× 902 7 009 2 8 4 9 9 9 2 4 9 Открыть в новой вкладке

    4 Обсуждение

    В этой статье мы разрабатываем общую структуру для группировки метагеномных контигов, используя состав последовательностей и охват нескольких образцов. Наш подход COCACOLA превосходит современные подходы к биннингу CONCOCT (Alneberg et al. , 2014), GroopM (Imelfort и др. , 2014), MaxBin (Wu и др. , 2015) и MetaBAT (Kang и др. , 2015) как на смоделированных, так и на реальных наборах данных.

    Превосходные характеристики COCACOLA зависят от нескольких аспектов. Во-первых, инициализация играет важную роль в точности бинирования. Во-вторых, COCACOLA использует расстояние L 1 вместо евклидова расстояния для лучшей таксономической идентификации. В-третьих, COCACOLA использует преимущества как жесткой, так и мягкой кластеризации. В частности, мягкая кластеризация (такая как GMM, используемая CONCOCT) позволяет вероятностно назначать контиг нескольким OTU, следовательно, в целом дает более надежные результаты по сравнению с жесткой кластеризацией (такой как разбиение Хафа, используемое в GroopM). Однако в сложных образцах окружающей среды с вариациями уровня деформации соответствующие OTU тесно переплетаются. Тогда как мягкая кластеризация, в свою очередь, еще больше смешивает OTU и, таким образом, ухудшает производительность кластеризации. COCACOLA обеспечивает лучший компромисс между жесткой и мягкой кластеризацией, используя разреженность.

    Однако мы заметили, что объединение метагеномных контигов остается сложной задачей, когда количество образцов невелико, независимо от использования COCACOLA, CONCOCT, GroopM, MaxBin или MetaBAT. При небольшом количестве метагеномных образцов взаимосвязь между контигами не может быть точно выведена на основе взаимосвязи между профилями численности. Таким образом, будущие исследования должны изучить, как повторно взвесить вклад профилей численности и профилей состава в неконтролируемых (Cai и др. , 2010) или частично контролируемый (Zhao and Liu, 2007) сценарий. Более того, недавние исследования показывают, что евклидово или L 1 расстояние между частотами l -mer не работает так же хорошо, как альтернативные измерения несходства, такие как d2* и d2(shepp) (Wan et al. , 2010). при сравнении последовательности генома. Однако использование таких измерений связано с вычислительными трудностями, что требует дальнейшего изучения.

    Платформа COCACOLA легко объединяет индивидуальные знания для обеспечения точности бинирования. В нашем исследовании мы исследовали два типа знаний, в частности, совместное выравнивание с эталонными геномами и сцепление контигов, обеспечиваемое считываниями с парными концами. Несмотря на то, что вклад дополнительных знаний уменьшается при наличии достаточного количества выборок, они играют важную роль в результатах бинирования, когда количество выборок невелико. В будущих исследованиях мы намерены изучить более индивидуальные предварительные знания. один из вариантов — использование филогенетической информации в таксономической аннотации (Purdom, 2011). Другой вариант основан на идентификации функциональной аннотации контигов, включая открытые рамки считывания, которые, вероятно, кодируют белки (Ye and Tang, 2009).), или группы генов совместного изобилия (Nielsen et al. , 2014) и т. д. Мы также исследовали ансамбль знаний как о совместном выравнивании, так и о сцеплении, и он показывает более стабильную работу, чем индивидуальная информация. В будущих исследованиях мы стремимся найти оптимальные веса (Tsuda et al. , 2005) вместо одинаковых весов.

    Благодарности

    Авторы благодарят анонимных рецензентов за полезные комментарии к этой работе. Исследование частично поддерживается NSF DMS-1518001 и OCE 1136818.

    Конфликт интересов : не объявлено.

    Ссылки

    Albertsen

    M.

    и др. (

    2013

    )

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

    .

    Нац. Биотехнолог

    .,

    31

    ,

    533

    538

    .

    Альнеберг

    J.

    и др. (

    2014

    )

    Бинирование метагеномных контигов по покрытию и составу

    .

    Нац. Методы

    ,

    11

    ,

    1144

    1146

    .

    Баран

    Ю.

    ,

    Гальперин

    Э.

    (

    2012

    )

    Совместный анализ нескольких метагеномных образцов

    .

    Вычисл. PLoS. Биол

    .,

    8

    ,

    е1002373.

    Басу

    С.

    и др. (

    2008

    ).

    Ограниченная кластеризация: достижения в области алгоритмов, теории и приложений

    .

    Серия Data Mining and Knowledge Discovery. Chapman & Hall/CRC Press, Бока-Ратон, Флорида, США

    .

    Брейди

    А.

    ,

    Зальцберг

    С.Л.

    (

    2009

    )

    Phymm и PhymmBL: метагеномная филогенетическая классификация с интерполированными марковскими моделями

    .

    Нац. Методы

    ,

    6

    ,

    673

    676

    .

    Cai

    D.

    и др. (

    2010

    ). Неконтролируемый выбор признаков для мультикластерных данных. В: Материалы 16-й Международной конференции ACM SIGKDD по обнаружению знаний и интеллектуальному анализу данных, Вашингтон, округ Колумбия, США, стр. 333–342.

    Cai

    D.

    и др. (

    2011

    )

    Факторизация регуляризованной неотрицательной матрицы графа для представления данных

    .

    IEEE Trans. Анальный узор. Мах. Интел

    .,

    33

    ,

    1548

    1560

    .

    Карр

    Р.

    и др. (

    2013

    )

    Реконструкция геномного содержимого таксонов микробиома с помощью дробовой метагеномной деконволюции

    .

    Вычисл. PLoS. Биол

    . ,

    9

    ,

    е1003292.

    Чаттерджи

    С.

    и др. (

    2008

    )

    Компостная корзина: основанный на составе ДНК алгоритм для сбора экологического дробовика читает

    .

    Рез. вычисл. Мол. Биол

    .,

    17

    28

    .

    Чанг

    Ф.Р.

    (

    1997

    ).

    Теория спектральных графов

    , Vol.

    92

    .

    Американское математическое общество

    .

    Консорциум

    HMP

    . и другие. (

    2012

    )

    Структура, функции и разнообразие микробиома здорового человека

    .

    Природа

    ,

    486

    ,

    207

    214

    .

    Кордуняну

    А.

    ,

    Бишоп

    К.М.

    (

    2001

    )

    Выбор вариационной байесовской модели для распределения смесей

    . В:

    Искусственный интеллект и статистика 2001

    ,

    Ки-Уэст, Флорида, США

    , стр.

    27

    34

    .

    Дэвис

    Д.Л.

    ,

    Боулдин

    Д.В.

    (

    1979

    )

    Мера разделения кластеров

    .

    IEEE Trans. Анальный узор. Мах. Интел

    .,

    1

    ,

    224

    227

    .

    Huson

    D.H.

    и др. (

    2007

    )

    МЕГАН анализ метагеномных данных

    .

    Рез. генома

    .,

    17

    ,

    377

    386

    .

    Иджаз

    У

    ,

    Айва

    С.

    (

    2013

    ). TAXAassign v0.4. https://github.com/umerijaz/taxaassign.

    Имельфорт

    М.

    и др. (

    2014

    )

    GroopM: автоматизированный инструмент для восстановления популяционных геномов из родственных метагеномов

    .

    PeerJ

    ,

    2

    ,

    e603.

    Jiang

    P.

    и др. (

    2014

    )

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

    . В:

    Интеллектуальный анализ данных и обнаружение знаний для больших данных

    ,

    Springer-Verlag, Berlin Heidelberg

    , стр.

    281

    303

    .

    Кан

    Д.Д.

    и др. (

    2015

    )

    MetaBAT, эффективный инструмент для точной реконструкции отдельных геномов из сложных микробных сообществ

    .

    PeerJ

    ,

    3

    ,

    e1165.

    Келли

    Д.Р.

    ,

    Зальцберг

    С.Л.

    (

    2010

    )

    Кластеризация метагеномных последовательностей с помощью интерполированных марковских моделей

    .

    BMC BioInformatics

    ,

    11

    ,

    544.

    KIM

    J.

    ,

    Park

    H.

    (

    9000 2008

    H.

    (

    9000 2008

    888898). Технический отчет GT-CSE-08-01, Технологический институт Джорджии, Атланта, Джорджия, США.

    Лангвиль

    А.Н.

    и др. (

    2006

    ) Инициализации для факторизации неотрицательной матрицы. В материалах двенадцатой Международной конференции ACM по обнаружению знаний и интеллектуальному анализу данных (SIGKDD), Филадельфия, Пенсильвания, США, стр. 23–26.

    Ли

    Д.Д.

    ,

    Сын

    Х.С.

    (

    1999

    )

    Изучение частей объектов методом неотрицательной матричной факторизации

    . .

    Ляо

    Р.

    и др. (

    2014

    )

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

    .

    IEEE/ACM Trans. вычисл. биол. Биоинформ

    . ,

    11

    ,

    42

    54

    .

    Лю

    Ю.

    и др. (

    2013

    )

    Понимание и улучшение внутренних мер проверки кластеризации

    .

    IEEE Trans. Cybern

    .,

    43

    ,

    982

    994

    .

    Mande

    S.S.

    и др. (

    2012

    )

    Классификация метагеномных последовательностей: методы и задачи

    .

    Краткая информация. Биоинформ

    .,

    13

    ,

    669

    681

    .

    McHardy

    AC

    и др. (

    2007

    )

    Точная филогенетическая классификация фрагментов ДНК переменной длины

    .

    Нац. Методы

    ,

    4

    ,

    63

    72

    .

    Мохаммед

    М.Х.

    и др. (

    2011

    )

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

    .

    Биоинформатика

    ,

    27

    ,

    22

    30

    .

    Нильсен

    Х. Б.

    и др. (

    2014

    )

    Идентификация и сборка геномов и генетических элементов в сложных метагеномных образцах без использования эталонных геномов

    .

    Нац. Биотехнолог

    .,

    32

    ,

    822

    828

    .

    Пурдом

    Э.

    (

    2011

    )

    Анализ матрицы данных и графа: метагеномные данные и филогенетическое дерево

    .

    Энн. заявл. Стат

    .,

    2326

    2358

    .

    Цинь

    Дж.

    и др. (

    2010

    )

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

    .

    Природа

    ,

    464

    ,

    59

    65

    .

    Ризенфельд

    CS

    и др. (

    2004

    )

    Метагеномика: геномный анализ микробных сообществ

    .

    год. Rev. Genet

    .,

    38

    ,

    525

    552

    .

    Rosen

    G.L.

    и др. (

    2011

    )

    NBC: веб-сервер инструмента наивной байесовской классификации для таксономической классификации метагеномных прочтений

    .

    Биоинформатика

    ,

    27

    ,

    127

    129

    .

    Сальвадор

    S

    ,

    Чан

    P.

    (

    2004

    ). Определение количества кластеров/сегментов в алгоритмах иерархической кластеризации/сегментации. В: Материалы 16-й Международной конференции IEEEE по инструментам с искусственным интеллектом (ICTAI), Бока-Ратон, Флорида, США, стр. 576–584.

    Шарон

    I.

    и др. (

    2013

    )

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

    .

    Геном Res

    . ,

    23

    ,

    111

    120

    .

    Вс

    К.Ч.

    и др. (

    2012

    )

    Влияние нормализации и филогенетической информации на оценку расстояния для метагеномов

    .

    IEEE/ACM Trans. вычисл. биол. Биоинформ

    .,

    9

    ,

    619

    628

    .

    Tang

    Y.

    и др. (

    2005

    ). Улучшенный индекс проверки для нечеткой кластеризации. В: Американская конференция по контролю, стр. 1120–1125.

    Цуда

    К.

    и др. (

    2005

    )

    Классификация быстрых белков с несколькими сетями

    .

    Биоинформатика

    ,

    21

    ,

    II59

    II65

    .

    Wan

    L.

    и др. (

    2010

    )

    Сравнение последовательностей без выравнивания (ii): теоретическая мощность статистики сравнения

    .

    Дж. Вычисл. Биол

    .,

    17

    ,

    1467

    1490

    .

    Wiwie

    C.

    и др. (

    2015

    )

    Сравнение эффективности биомедицинских методов кластеризации

    .

    Нац. Методы

    , страница (epub перед печатью).

    Древесина

    Д.Е.

    ,

    Зальцберг

    С.Л.

    (

    2014

    )

    Kraken: сверхбыстрая классификация метагеномных последовательностей с использованием точного выравнивания

    .

    Геном Биол

    .,

    15

    ,

    Р46.

    Ву

    Ю.В.

    ,

    Е

    И.

    (

    2011

    )

    Новый алгоритм на основе распространенности для объединения метагеномных последовательностей с использованием L-кортежей

    .

    Дж. Вычисл. Биол

    . ,

    18

    ,

    523

    534

    .

    Ву

    Ю.В.

    и др. (

    2016

    )

    MaxBin 2.0: автоматизированный алгоритм биннинга для восстановления геномов из нескольких наборов метагеномных данных

    .

    Биоинформатика

    ,

    32

    ,

    605

    607

    .

    Ян

    В.

    и др. (

    2010

    )

    Неконтролируемое объединение фрагментов генома из окружающей среды на основе устойчивой к ошибкам селекции l-меров

    .

    Биоинформатика BMC

    ,

    11

    ,

    S5.

    Е

    Ю.

    ,

    Тан

    Х.

    (

    2009

    )

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

    .

    Ж. Биоинформ. вычисл. Биол

    .,

    7

    ,

    455

    471

    .

    Чжао

    Z.

    ,

    Лю

    H.

    (

    2007

    ) Полуконтролируемый выбор признаков с помощью спектрального анализа. В: Труды Международной конференции SIAM по интеллектуальному анализу данных, стр. 641–646.

    © Автор, 2016 г. Опубликовано Oxford University Press. Все права защищены. Для разрешений, пожалуйста, по электронной почте: journals. [email protected]

    © The Author, 2016. Опубликовано Oxford University Press. Все права защищены. Для получения разрешений обращайтесь по электронной почте: [email protected]

    Написание рассказов | English Composition 1

    Цели обучения

    • Описать приемы написания эффективных нарративов

    Написание повествования

    Какие чувства и мысли вызывает у вас эта цитата Маргарет Мид, когда вы ее читаете? Почему она включает это личное замечание в свое предисловие к 1949 издание Совершеннолетие на Самоа ?

    Я решил стать антропологом — в мае 1923 года — потому что Франц Боас и Рут Бенедикт представили задачи антропологии как более неотложные, чем любая другая задача, которую может решить исследователь человеческого поведения.

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

    Повествовательное эссе

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

    Рисунок 1 . Вспомните одну из ваших любимых известных историй или сказок. Соответствует ли это последовательности, показанной выше?

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

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

    Рассказ истории

    Рассказывая историю, вы хотите выделить самое важное. Подумайте, например, как бы вы отреагировали, если бы ваш друг спросил, что вы делали на прошлых выходных. Если бы вы начали с «Я проснулся в субботу утром, перевернулся, проверил телефон, снова заснул, проснулся, вытащил ноги из-под одеяла, поставил ноги на пол, встал, потянулся…», то ваш друг, возможно, перестанет слушать к тому времени, когда вы доберетесь до действительно хороших вещей. Ваша сфера охвата слишком широка, поэтому вы включаете детали, которые отвлекают или утомляют вашего читателя. Вместо того, чтобы перечислять все детали по порядку, например:

    Рисунок 2 . История не обязательно должна включать каждую деталь по порядку.

    … вам следует подумать о сужении сферы охвата, сосредоточившись вместо этого на важных, интересных и уникальных сюжетных точках (событиях), например:

    Рисунок 3 . Выберите самые интересные и актуальные фрагменты истории, чтобы она оставалась интересной.

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

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

    Последовательность историй

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

    Вы можете узнать Пирамиду Фрейтага по другим предметам, которые вы посещали:

    Рисунок 4 . Пирамида Фрейтага показывает традиционную сюжетную линию.

    Типичные компоненты включают:

    1. Экспозиция: Здесь вы устанавливаете сцену, представляете персонажей и готовите читателя к путешествию.
    2. Нарастающее действие: В этой части все начинает происходить. Вы (или ваши персонажи) сталкиваетесь с конфликтом, отправляетесь в путешествие, встречаетесь с людьми и т. д.
    3. Кульминация: Это пик действия, главное противостояние, центральное событие, к которому строится ваша история.
    4. Падение действия: Теперь все начинает сходить на нет. Вы (или ваши персонажи) выходите из кульминации измененными — по крайней мере, вы становитесь мудрее, потому что пережили этот опыт.
    5. Решение
    6. : Также известное как развязка, именно здесь сводятся все концы с концами. Центральный конфликт был разрешен, и все вернулось на круги своя, но, возможно, немного по-другому.

    Эта форма повествования, безусловно, знакома. Многие фильмы, телешоу, пьесы, романы и рассказы следуют этому пути. Но не без недостатков. На какие предположения он опирается? Как это может ограничить рассказчика? Иногда писатели хотят начать рассказ там, где начинается рассказ — часто шаги А и Б на диаграмме выше просто задерживают наиболее описательные, активные или значимые части рассказа. По крайней мере, мы должны отметить, что пирамида Фрейтага — не обязательно лучший способ рассказать свою историю, и уж точно не единственный.

    Еще одна классическая техника повествовательной последовательности известна как in medias res — буквально «в центре событий». Когда вы планируете свой сюжет перед написанием или экспериментируете с ним в процессе наброска и редактирования, вы можете найти этот метод более активным и захватывающим способом начать рассказ.

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

    Рисунок 5 . Истории также могут начинаться посреди действия.

    Вы можете поэкспериментировать со своей последовательностью различными способами, которые могут включать в себя также изменение области действия: вместо непрерывной истории у вас может быть серия фрагментов с определенным объемом (например, фотографии вместо видео). Вместо хронологического порядка вы можете перемещаться во времени, пространстве или наоборот. Некоторые нарративы полностью отвергают традиционные повествовательные последовательности.

    Например, посмотрите, как начинается эта история:

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

    Использование повествования

    Вы найдете повествование полезным в эссе, когда хотите, чтобы читатель отождествлял себя с вашей точкой зрения или с точкой зрения одного из ваших персонажей или субъектов. Документальное кино изобилует нарративными примерами: люди рассказывают нам историю происшедшего так, как если бы они были свидетелями, даже если событие произошло за много лет до их рождения. Это эффективная техника, потому что режиссер сплетает для нас историю через каждого рассказчика.

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

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

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

    Эссе-повествование

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

    Начало

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

    Абзацы повествования

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

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

    Закрытие

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

    Контрольный список для описательного эссе:

    • Имейте четкую цель.
    • Расскажите историю ясно.
    • Сделайте повествование интересным.
    • Свяжите его с чем-то большим, чем он сам, явно или тайно.

    Key Takeaways

    Каковы основные составляющие повествования? Повествование

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

    НАЧНИТЕ С РАССКАЗА

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

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

    Например, рассмотрим тему возвращения в школу. Вы можете подойти к этому следующим образом:

    1. Напишите историю (это станет вашим основным абзацем)
    2. Прочтите вслух и посмотрите, есть ли мораль или основная идея
    3. Напишите тезис, основанный на этой идее или морали
    4. Продолжайте писать введение

    После того, как вы записали эту историю, вы читаете абзацы о возвращении в школу и понимаете, насколько высшее образование улучшит ваше финансовое положение. Это позволяет вам создать свой тезис и вернуться к форме введения. В этом случае вы решаете, что ваш тезис звучит так: «После тщательного рассмотрения я решил, что возвращение в школу — это важный шаг к улучшению моего финансового положения».

    Включите ли вы этот явный тезис в свое повествование или нет, зависит от требований задания и ваших писательских навыков. Часто в повествовательном письме наша цель состоит в том, чтобы показать, а не рассказать читателю суть истории!

    Ссылка на обучение

    Здесь вы можете увидеть традиционный или типичный образец рассказа сочинения из начального класса письма. В этом задании учащегося попросили написать краткое повествование о грамотности , повествовательное эссе, в котором основное внимание уделяется опыту автора в чтении и/или письме. В этом повествовательном эссе автор фокусируется на чтении книг и следует принципам MLA.

    Попробуйте

    Внесите свой вклад!

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

    Улучшить эту страницуПодробнее

    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)
    _VERB_
    _ADJ_ adjective
    _ADV_ adverb
    _PRON_ pronoun
    _DET_ determiner or article
    _ADP_ an adposition: either a preposition or a postposition
    _NUM_ число
    _CONJ_ соединение
    _PRT_ 9246622 _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 попытается угадать, применять ли эти поведение. Вы можете использовать круглые скобки, чтобы принудительно включить их, и возвести в квадрат скобы, чтобы принудительно их снять. Пример: и/или будет разделить и на или ; для измерения использования фраза и/или , используйте [и/или]. И из лучших побуждений будет искать фраза благонамеренная ; если вы хотите вычесть смысл из колодца, использовать (в хорошем смысле).

    Чтобы продемонстрировать оператор +, вот как можно найти сумму game , sport и play :

    лет, ты мог сравнить выбор , выбор , вариант , и альтернатива , указав формы существительных, чтобы избежать формы прилагательных (например, выбор лакомства , альтернатива music ):

    Вычитание Ngram дает вам простой способ сравнить один набор ngram с другим:

    Вот как вы можете комбинировать + и /, чтобы показать, как слово яблочное пюре расцвело за счет яблочного соуса :

    Оператор * полезен, когда вы хотите сравнить энграммы с широким диапазоном частот, например скрипка и более эзотерический терменвокс :

    Оператор выбора :corpus позволяет сравнивать энграммы в разные языки, или американский против британского английского (или художественная литература), или между версиями сканов наших книг 2009, 2012 и 2019 годов. Вот чатов на английском и такая же униграмма на французском:

    Когда мы создали исходный корпус Ngram Viewer в 2009 году, наш OCR не был так хорош, как сегодня. Особенно это было заметно в английский язык до 19 века, где удлиненная медиальная буква s (ſ) была часто интерпретируется как f , поэтому часто читается лучший как перед . Вот свидетельство улучшений, которые мы сделали с тех пор затем, используя оператор корпуса для сравнения версий 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_ru_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 рус_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

    Изучите основы работы с выражениями для связывания анимации в 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. Приспособления для трехмерного преобразования
      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 и Team Projects
      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 градусов в ползунок, измеряемый в процентах.

    Wiggle

    Дополнительные примеры см. в разделе Примеры выражений.

    Редактировать выражение вручную

    1. Войдите в режим редактирования текста, щелкнув в поле выражения.

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

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

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

    Редактор выражений на панели «Таймлайн»

    Вы можете настроить внешний вид выражений в Редакторе выражений, расположенном на панели «Таймлайн», используя настройки «Сценарии и выражения». Чтобы открыть его, выберите After Effects > «Установки» > «Сценарии и выражения» (Mac) или «Приложение» > «Установки» > . Выражения (Победа). Дополнительные сведения см. в разделе Использование редактора выражений.

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

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

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

    Форум AE Enhancers также содержит множество примеров и много информации о выражениях, а также сценариях и наборах настроек анимации.

    Больше подобных

    • Об анимации, ключевых кадрах и выражениях
    • Редактирование выражений
    • Понимание языка выражений

    Войдите в свою учетную запись

    Войти

    Управление счетом

    Состав и структура IDoc INVOIC в SAP ERP – ecosio

    Мотивация для IDoc

    IDoc — это сокращенная форма Intermediate Document 9.0030 . Как следует из слова промежуточный , это промежуточный формат для обмена данными с системой SAP ERP. С помощью IDoc сторонняя система может экспортировать и импортировать данные из системы SAP ERP и в нее. Эти данные могут поступать из систем, содержащих основные данные, такие как данные дебитора, данные кредитора, основные записи материалов и т. д. Другие примеры включают динамические записи данных, такие как табели учета рабочего времени, заказы или счета-фактуры.

    Система SAP ERP предоставляет широкий спектр предопределенных базовых типов IDoc, которые можно использовать для обмена данными. Эти предопределенные IDoc могут не полностью удовлетворять всем требованиям, и в этом случае могут быть созданы новые типы IDoc, точно соответствующие конкретным требованиям заказчика.

    Понимание содержимого IDoc

    Прежде чем читать содержимое IDoc, необходимо понять его структуру. В отличие от других стандартов на основе XML, например Universal Business Language (UBL), IDocs используют короткие и на первый взгляд непонятные имена элементов. Их невозможно понять без вспомогательного документа, поясняющего, что означают эти аббревиатуры. По мере накопления опыта работы с IDoc сокращенные имена элементов станут более привычными, а их значение будет раскрываться — даже без документации, постоянно имеющейся под рукой.

    IDoc может существовать в различных формах, но обычно IDoc можно найти как запись базы данных в системе SAP, где используются следующие таблицы: EDIDC , EDID4 , EDIDS . Таблица EDIDC содержит данные управляющей записи, таблица EDID4 для записей данных и таблица EDIDS для записей состояния. Транзакция SE16N может использоваться для более подробного изучения этих таблиц.

    Однако пользователи обычно используют свои определенные транзакции для просмотра IDoc, например транзакцию BD87. На рисунке ниже показано древовидное представление IDoc INVOIC02 в транзакции BD87.

    © 2020. SAP SE или аффилированная компания SAP. Все права защищены. Используется с разрешения SAP SE.

    Как видно в левой части этого изображения, IDocs используют сокращения для наименования каждого элемента, E1EDK01, E1EDKA1 и т. д.

    Чтобы проверить, что означают эти элементы, необходимо использовать документацию соответствующего базового типа IDoc, которую можно найти в транзакции WE60. В этой предыдущей статье объясняются подробности документации IDoc.

    Документацию IDoc можно загрузить в виде файла HTML и отобразить в любом веб-браузере. Система SAP ERP всегда экспортирует три типа данных, оканчивающихся на _d, _f и _i. Чтобы получить наилучшее представление данных, мы рекомендуем открывать файл, оканчивающийся на _f, например, INVOIC02_f.htm. Ниже приведена выдержка из HTML-документации для IDoc INVOIC02.

    © 2020. SAP SE или аффилированная компания SAP. Все права защищены. Используется с разрешения SAP SE.

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

    Когда IDoc покидает систему SAP, файл обмена создается с использованием данных в таблицах IDoc. Этот файл обмена поставляется в двух форматах: текстовая версия и версия на основе XML. В современных сценариях интеграции обычно используется только версия на основе XML.

    Обзор INVOIC02 IDoc

    XML знает две фундаментальные концепции: схему XML и экземпляр XML. Экземпляр XML — это конкретная форма IDoc, например XML-представление счета-фактуры с номером 4711. Схема XML описывает точную структуру и состав экземпляра XML. Он определяет, какие последовательности элементов и атрибутов разрешены, какие типы данных могут использоваться для некоторых элементов и т. д.

    На следующем рисунке показан фрагмент композиции XML-схемы INVOIC02.

    © 2020. SAP SE или аффилированная компания SAP. Все права защищены. Используется с разрешения SAP SE.

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

    INVOIC02 IDoc в деталях

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

    Используя приведенные ниже данные в качестве примера, мы демонстрируем различные элементы IDoc INVOIC02.

    Структура IDoc INVOIC02 создается ниже центрального корневого узла INVOIC02. Следующий отрывок показывает состав INVOIC02 в более короткой версии.

     
     <ИДОК НАЧАЛО="1">
     
     
     EDI_DC40
     ...
     
     
     
     ЕВРО
     ...
     
     
     
     000010
     ...
     
     
     
     <СУМИД>001
     <СУММА>11
     
     ...
     
     
     

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

    Состав IDoc можно разделить на три больших раздела:

    • Контрольная запись
    • Записи данных
    • Записи о состоянии

    При экспорте IDoc из системы SAP ERP экспортируются только контрольная запись и записи данных. Поскольку запись о состоянии обычно содержит внутреннюю информацию из системы о состоянии обработки, она обычно не экспортируется.

    Состав древовидной структуры IDoc INVOIC02 выглядит следующим образом:

    • INVOIC02
      • ИДОК
        • EDI_DC40 — Контрольная запись
        • E1EDK01 — Общие данные заголовка документа
        • E1EDKA1 — информация о партнере в заголовке документа
        • E1EDK02 — Справочные данные заголовка документа
        • E1EDK03 — Сегмент даты заголовка документа
        • E1EDK05 — Условия заголовка документа
        • E1EDK04 — Налоги в заголовке документа
        • E1EDK17 – Заголовок документа Условия поставки
        • E1EDK18 — Заголовок документа Условия платежа
        • E1EDK23 — Сегмент валюты заголовка документа
        • E1EDK28 — Банк данных заголовка документа
        • Э1ЕДК29- Заголовок документа Общие данные внешней торговли
        • E1EDKT1 — Идентификация текста заголовка документа
          • E1EDKT2 — Тексты заголовков документов
        • E1EDK14 — Организационные данные заголовка документа
        • E1EDP01 — Общие данные позиции документа
          • E1EDP02 — Справочные данные элемента документа
          • E1EDP03 — Сегмент даты элемента документа
          • E1EDP19 — Идентификация объекта элемента документа
          • E1EDP26 — Сегмент суммы позиции документа
          • E1EDPA1 — Информация о партнере элемента документа
          • E1EDP05 — Условия позиции документа
          • E1EDP04 — Налоги по позиции документа
          • E1EDP28 — Позиция документа — Общие данные внешней торговли
          • E1EDP08 — Индивидуальные данные пакета
          • E1EDP30 — Позиция документа Присвоение счетов внутрихолдинговому выставлению счетов
          • E1EDPT1 — Идентификация текста элемента документа
            • E1EDPT2 – Тексты элементов документа
        • E1EDS01 – Общая информация по сегменту

    EDI_DC40 — контрольная запись

    Управляющая запись EDI_DC40 содержит метаинформацию о самом IDoc (отправитель, получатель, тип IDoc и т. д.) и в основном важна для правильной обработки сообщения IDoc сторонними службами. Используя контрольную запись, сторонние службы, такие как поставщики EDI, могут идентифицировать отправителя и получателя IDoc, точный тип и дату IDoc и т. д.

    Записи данных

    После контрольной записи идут записи данных, которые содержат все данные о накладной. Сами записи данных делятся на заголовок и строку. Элементы, которые имеют K в своем имени относятся к данным заголовка, те, у кого P , относятся к данным позиции. Элементы с S относятся к сумме данных.

    E1EDK01 – общие данные заголовка документа

    Заголовок счета-фактуры E1EDK01 содержит общие данные счета-фактуры, такие как валюта, номер UID выставителя счета и получателя счета-фактуры, вес и т. д.

     <СЕГМЕНТ E1EDK01="1">
      GBP
      фунтов стерлингов
      <ВКУРС>1.00000
      0054
      <КУНДЕЙНР>GB3

    GB3

    48343

    ИНВО 0130106273 423,472 472,616 КГМ ZLR 0000035703 Л

    Элемент E1EDK01 может присутствовать в IDoc INVOIC02 только один раз.

    За элементом E1EDK01 следуют несколько заголовков счета-фактуры типа E1EDKA1, содержащие партнерскую информацию о клиенте, счетоводе, получателе товаров и т. д. Элемент PARVW (функция партнера) идентифицирует тип партнера.

     <СЕГМЕНТ E1EDKA1="1">
      РС
      0000035703
      Компания John Doe Ltd.
      Чансери-лейн, 40
      Лондон
      WC2A 1EN
      ГБ
      Е
      Энн Доу
      1312
    
     

    RS , например, обозначает эмитента счета. Полный список разрешенных ролей партнеров можно просмотреть в документации IDoc в транзакции WE60.

    Элемент E1EDKA1 является необязательным и может встречаться до 99 раз в IDoc INVOIC02.

    В заголовке E1EDK02 найдены справочные данные счета-фактуры. Чтобы определить тип партнера, необходимо изучить элемент QUALF (справочный документ квалификатора).

     <СЕГМЕНТ E1EDK02="1">
      009
      23

    32

    201

    001 <БЕЛНР>5

    323

    201
    002 2
    342 201

    В приведенном выше примере имеются ссылки на следующие документы:

    • Номер счета-фактуры (009)
    • Заказ клиента на поставку (001)
    • Номер заказа поставщика (002)

    Элемент E1EDK02 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

    После справочных данных предоставляются другие значения даты с использованием элемента E1EDK03. Элемент IDDAT (сегмент квалификатора даты) позволяет определить, какой тип даты предоставляется.

     <СЕГМЕНТ E1EDK03="1">
      026
      201

    001 201 022 <ДАТА>201

    Приведенный выше пример содержит следующие значения даты:

    • Дата выставления счетов для индекса счетов и распечатки (026)
    • Дата поставки от поставщика (001)
    • Дата заказа на поставку (022)

    Элемент E1EDK03 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

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

     <СЕГМЕНТ E1EDK05="1">
      +
      Цена нетто
      <БЕТРГ>5148. 06
      0
      фунтов стерлингов
    
    
      +
      ZZDV
      Стоимость доставки
      <БЕТРГ>22,85
      10 000
      AA
    
     

    + в элементе ALCKZ указывает на надбавку, а - на вычет. Остальные элементы следующие:

    KSCHL – Тип состояния (кодированный)

    KOTXT — текст условия

    BETRG – Фиксированная надбавка/скидка на общую сумму брутто

    KRATE — Запись состояния на единицу

    KPERC- процентная ставка состояния

    МВСКЗ - НДС индикатор

    КОЭИН – Валюта

    Элемент E1EDK05 является необязательным и может быть найден до 99 раз в IDoc INVOIC02.

    Информацию о налогах, указанных в счете-фактуре, можно найти в элементе E1EDK04.

     <СЕГМЕНТ E1EDK04="1">
      A1
      22 000
      1132,57
    
     

    Аббревиатура НДС MWSKZ означает индикатор НДС. Элемент MSATZ указывает ставку НДС, а MWSBT сумму налога на добавленную стоимость.

    Элемент E1EDK04 является необязательным и может быть найден до 999 раз в IDoc INVOIC02.

    Элемент E1EDK17 указывает условия доставки счета-фактуры.

     <СЕГМЕНТ E1EDK17="1">
      001
      ФХ
      Мисс. Смит
    
     

    Элемент QUALF указывает, является ли это Инкотермс 1 или Инкотермс 2. Код условия поставки можно получить из элемента LKOND, а текст условия поставки — из элемента LKTEXT.

    Элемент E1EDK17 является необязательным и может встречаться до 10 раз в IDoc INVOIC02.

    Этот элемент содержит информацию об условиях оплаты счета.

     <СЕГМЕНТ E1EDK18="1">
      001
      14
      <ПРЗНТ>2
      Платеж через 14 дней
    
     

    В приведенном выше примере счет должен быть оплачен в течение 14 дней без вычетов. Если счет оплачивается сразу, скидка 2% может быть вычтена.

    Элемент E1EDK18 является необязательным и может встречаться до 10 раз в IDoc INVOIC02.

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

     <СЕГМЕНТ E1EDK23="1">
      001
      ЕВРО
      евро
      <КУРС>1.00
      201
    
     

    Спецификатор 001 указывает, что упомянутая выше валюта является валютой документа.

    Элемент E1EDK23 является необязательным и может встречаться до 4 раз в IDoc INVOIC02.

    Все банковские данные, относящиеся к счету, такие как IBAN, BIC, название банка и т. д., будут указаны в элементе E1EDK28.

     <СЕГМЕНТ E1EDK28="1">
      ГБ
      Сантандер Банк
      GB3834

    ß5

    34 Супермаркет Пенни Прайс

    Элемент E1EDK28 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

    E1EDK29 — Заголовок документа Общие данные внешней торговли

    Данные по внешней торговле отображаются в элементе E1EDK29 счета-фактуры.

     <СЕГМЕНТ E1EDK29="1">
      23

    823

    ГБ 3 5901 фунтов стерлингов ГБ Великобритания ГБ Х Великобритания ГБ ГБ <АЛСРЕ>900 3 Дорожный транспорт Дорожный транспорт

    В документации IDoc описано, какие значения разрешены в каждом поле. Например, таблица значений для EXNUM — это EIKP, а для ALAND — таблица T005. Транзакция SE16 или SE16N позволяет узнать, каковы значения этой таблицы.

    Элемент E1EDK29 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

    Этот элемент указывает тексты заголовков из документа SAP в IDoc и имеет подэлемент E1EDKT2. Квалификатор TDID указывает, какой тип текста предоставлен.

     <СЕГМЕНТ E1EDKT1="1">
      Z100
      Д
      ГБ
      
        Обратите внимание, что период отпуска
        
        *
      
      
        во время пасхальных каникул. 
        *
      
    
     

    Язык текста указан с помощью TSSPRAS и ключа TSSPRAS_ISO. Подэлемент E1EDKT2 используется для фактического текста.

    Элемент E1EDKT1 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

    Подэлемент E1EDKT2 содержит актуальную текстовую информацию в разных текстовых строках. Максимальная длина текстовой строки TDLINE составляет 70 символов, поэтому более длинные тексты делятся на несколько элементов TDLINE.

    Элемент E1EDKT2 является необязательным и может быть найден до 999 раз в IDoc INVOIC02.

    Соответствующие данные организации SAP, такие как организация продаж или канал сбыта, содержатся в элементе E1EDK14. Элемент QUALF (определение организации) помогает определить, какой тип данных организации предоставляется.

     <СЕГМЕНТ E1EDK14="1">
      008
      1310
    
    
      007
      01
    
    
      006
      01
    
     

    В приведенном выше примере показаны следующие данные организации:

    • Торговая организация (008)
    • Канал распределения (007)
    • Отдел (006)

    Элемент E1EDK14 является необязательным и может встречаться до 10 раз в IDoc INVOIC02. Заголовок заканчивается элементом E1EDK14, и начинаются отдельные позиции счета-фактуры.

    E1EDP01 — Общие данные позиции документа

    Этот элемент содержит общие данные отдельных позиций и других подэлементов.

    Наиболее важными элементами первого уровня являются:

     <СЕГМЕНТ E1EDP01="1">
      000010
      <МЕНГЕ>16.000
      PCE
      16,720
      КГМ
      18.064
      Загар
      <ВЕРКС>1016
      
        001
          ...
     

    Эти элементы имеют следующее значение.

    POSEX – Артикул. Позиции нумеруются последовательно. Последовательность записей (например, 10 с или 100 с) можно настроить в SAP. В большинстве случаев записи POSEX имеют ведущие нули.

    МЕНГЕ – Количество

    МЕНЭЭ – Единица измерения

    NETGEW – Вес нетто позиции

    GEWEI – Единица веса

    BRGEW — Общий вес позиции

    PSTYV – Тип позиции торгового документа

    ЗАВОД – Завод

    Элементы, упомянутые выше, являются лишь частью возможных элементов. В целом, позиция E1EDP01 имеет 52 различных элемента, таких как чистая цена продажи (VPREI), единица цены (PEINH) и т. д. Какой элемент находится в 02, зависит от модуля вывода ABAP в SAP, предопределенной настройки и типа. счета-фактуры. В случае сомнений документация IDoc INVOIC02 помогает определить значение элементов.

    Элемент E1EDP01 является необязательным и может встречаться до 999999 раз в IDoc INVOIC02.

    E1EDP02 — Справочные данные элемента документа

    Этот элемент указывает ссылки на другие позиции и документы, релевантные для данной записи позиции.

     <СЕГМЕНТ E1EDP02="1">
      001
      34934

    201 002 <БЕЛНР>23

    343 000010 201

    В приведенном выше примере предоставляются следующие справочные данные:

    • Заказ клиента на поставку (001)
    • Заказ поставщика (002)

    Как указано в этих записях, указываются номер документа, дата документа (если есть) и ссылка на соответствующую строку документа. В основном это относится к сводным счетам, поскольку позиции не обязательно относятся к одному и тому же заказу на поставку или документу поставки.

    Элемент E1EDP02 является необязательным и может встречаться до 25 раз в IDoc INVOIC02.

    E1EDP03 — Сегмент даты элемента документа

    Ссылки на дату, которые относятся к записи о положении, предоставляются в элементе E1EDP03. Квалификатор IDDAT позволяет определить, какой тип даты используется.

     <СЕГМЕНТ E1EDP03="1">
      029
      201
    
    
      001
      <ДАТА>201

    В этом примере предоставляются следующие значения даты:

    • Дата заказа на продажу (029)
    • Дата поставки поставщика (001)

    Элемент E1EDP03 является необязательным и может встречаться до 25 раз в IDoc INVOIC02.

    E1EDP19 — Идентификация объекта элемента документа

    Элемент E1EDP19 содержит информацию об идентификационных данных выставленного счета-фактуры продукта или услуги, например. артикул, номер GTIN или аналогичный. Опять же, элемент QUALF помогает определить тип используемого идентификационного номера.

     <СЕГМЕНТ E1EDP19="1">
      001
      2133424
    
    
      002
      000000000000067080
      Электронный блок 15 кг
    
     

    В приведенном выше примере представлены следующие значения.

    • Номер материала, используемый заказчиком (001)
    • Номер материала, используемый поставщиком (002)

    Элемент E1EDP03 является необязательным и может встречаться до 10 раз в IDoc INVOIC02.

    E1EDP26 — Сегмент суммы позиции документа

    Элемент E1EDP26 содержит информацию о цене на уровне позиции. В зависимости от настройки SAP ERP и активированной схемы расчета предоставляются разные суммы. Это означает, что предоставляется не только расчет брутто (сумма без надбавок и вычетов) и расчет нетто (сумма с надбавками и вычетами), но и все надбавки и вычеты, а также любые промежуточные итоги.

    Элемент QUALF помогает идентифицировать тип суммы.

     <СЕГМЕНТ E1EDP26="1">
      004
      <БЕТРГ>378,56
    
    
      003
      <БЕТРГ>378,56
    
     

    В приведенном выше примере представлены следующие суммы:

    • Сумма, на которую можно получить скидку при оплате наличными (004)
    • Чистая стоимость (003)

    Элемент E1EDP26 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

    E1EDPA1 — Информация о партнере элемента документа

    Этот элемент используется для предоставления информации о партнере на уровне позиции. Эта информация о партнере является дополнением к той, которая находится на уровне заголовка (E1EDKA1). Например, в случае сводного счета-фактуры можно указать другого грузополучателя на уровне позиции.

     <СЕГМЕНТ E1EDPA1="1">
      МЫ
      0000037023
      Супермаркет Penny Price Манчестер
      Пенни Лейн, 32
      Манчестер
      M1 1BZ
      ГБ
      032-238
      032-232
      Е
      RU
    
     

    Состав этого элемента аналогичен составу элемента E1EDKA1, и квалификаторы, используемые в элементе PARVW, идентичны.

    Элемент E1EDPA1 является необязательным и может встречаться до 20 раз в IDoc INVOIC02.

    E1EDP05 — Условия позиции документа

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

     <СЕГМЕНТ E1EDP05="1">
      +
      ZPRB
      Цена брутто
      <БЕТРГ>175,35
      175,35
      1
      PCE
      фунтов стерлингов
      <КОБАС>1
    
    
      -
      ZM00
      Базовая сумма скидки
      <БЕТРГ>78,91
      45,00
      <КОБАС>175,35
    
     

    Элемент E1EDPA1 является необязательным и может встречаться до 99 раз в IDoc INVOIC02.

    E1EDP04 — Налоги по позиции документа

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

     <СЕГМЕНТ E1EDP04="1">
      AA
      19.000
      18.32
    
     

    Элемент E1EDP04 является необязательным и может встречаться до 25 раз в IDoc INVOIC02.

    E1EDP28 — Позиция документа — Общие данные внешней торговли

    Данные, относящиеся к внешней торговле, указываются в элементе E1EDP28 на уровне позиции.

     <СЕГМЕНТ E1EDP28="1">
      0002250830
      <ЭКСПОЗИЦИЯ>000010
      84231010000
      10000
      11
      CN
      CN
      Китай
      Бытовая техника общего назначения
      PCE
      031
      20057076
      <БРУЛО>18.064
      16,720
      КГМ
      16 000
      ГБ
      123 Великобритания
      Экспортировать бесплатно
      Прямые продажи
      10000
      PCE
      08
    
     

    Элемент E1EDP28 является необязательным и может встречаться до 9 раз в IDoc INVOIC02.

    E1EDP08 — Индивидуальные данные пакета

    Если счет-фактура содержит ссылку на упаковку продукта, информация об упаковке отображается в элементе E1EDP08. Обычно в счетах-фактурах этот элемент отсутствует, так как в большинстве случаев упаковка для счетов-фактур не имеет значения.

     <СЕГМЕНТ E1EDP08="1">
      1
      00000000000536543605
      0000026545
      PCE
      000000000028041353
      3115
      <АНЗАР>80.000
      0080000269
      000010
      5430.000
      4800.000
      <ТАРАГ>630.000
      ГРМ
      0,000
      0,000
      0,000
      0,000
      0,000
      0,000
      СТ
      DEF2
      <ПКНРС>С
    
     

    Элемент E1EDP08 является необязательным и может встречаться до 999999 раз в IDoc INVOIC02.

    E1EDP30 — Позиция документа Присвоение счетов внутрихолдинговому выставлению счетов

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

     
      001
      <ИВКОН>23

    34

    Элемент E1EDP30 не является обязательным и может быть найден до 99 раз в IDoc INVOIC02.

    E1EDPT1 — Идентификация текста элемента документа

    Подобно тексту, указанному на уровне заголовка с элементами E1EDKT1 и E1EDKT2, E1EDPT1 и E1EDPT2 могут использоваться для отображения текста на уровне элемента.

     <СЕГМЕНТ E1EDPT1="1">
      ZM02
      ГБ
      ГБ
      
        Внешняя спецификация-: 
        *
      
      
        086 LC1-MD393
        *
      
    
     

    Элемент E1EDPT1 является необязательным и может встречаться до 99 раз в IDoc INVOIC02.

    E1EDPT2 — Тексты элементов документа

    Этот элемент предоставляет актуальную текстовую информацию. Текстовые строки ограничены 70 символами — более длинные тексты можно разделить на разные элементы E1EDPT2.

    Элемент E1EDPT2 является необязательным и может встречаться до 999 раз в IDoc INVOIC02.

    E1EDS01 — Общий сводной сегмент

    Этот элемент предоставляет информацию об общей сумме счета-фактуры, такую ​​как вся чистая сумма, вся валовая сумма, сумма налога и т. д. Квалификатор SUMID идентифицирует тип суммы.

     <СЕГМЕНТ E1EDS01="1">
      <СУМИД>005
      <СУММА>1132,57
      евро
    
    
      <СУМИД>011
      <СУММА>6280,63
      евро
    
     

    В приведенном выше примере предоставляются следующие типы сумм:

    • Сумма налога с продаж (005)
    • Сумма счета (011)

    Элемент E1EDS01 является необязательным и может встречаться до 30 раз в IDoc INVOIC02.

    Есть вопросы?

    У вас есть вопросы об IDoc или э-счетах в SAP? Не стесняйтесь обращаться к нам, мы будем рады помочь вам!

    Знаете ли вы о нашем бесплатном средстве проверки документов XML/Peppol?

    Чтобы помочь тем, кому нужен простой и удобный способ проверки форматов и типов файлов, от CII (межотраслевой счет-фактура) до UBL, мы создали бесплатный онлайн-валидатор.

    admin

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    2024 © Все права защищены.