Разбор предложений по шаблонам русского языка / Хабр
Существует несколько парсеров, подходящих для русского языка. Некоторые из них могут даже выполнять синтаксический анализ, как SyntaxNet, MaltParser и AOT: … или выявлять факты, как Tomita.Глядя на эти парсеры, я вижу какую-то огромную сложность вычислений, требования к памяти, лицензионные ограничения и… ограниченность каждого решения, увы.
Чтобы понять, что же там такого сложного, мне захотелось сделать собственный парсер. Благо выходные оказались длинными.
Основная идея
Я подумал, как мы сами разбираем текст? Как выделяем из фразы ключевые элементы, строим в голове отношения между словами?Говорят, что Tomita построен на основе GLR-парсера, который, в свою очередь расширяет LR-парсер, который читает слова по порядку, пытается строить дерево отношений между ними.
У меня же была мысль, что текст надо рассматривать как набор штампов, на которые у нас наметан глаз. «Белый мотылек на красной розе«, «темное небо над синим морем
Далее, находя штампы, получившееся кусочки фразы соединяем в другие штампы, и так, пока не поймем всю фразу целиком — «мотылек на розе» (мотылек — белый, роза — красная), «небо над морем» (небо — темное, море — синее).
Выбор правильного инструмента
То есть, для поиска шаблона (прилагательное, существительное) мне нужно искать пару слов в том же падеже, числе и роде. Как? Естественным решением определения характеристик (граммем) в Python использовать pymorphy2 by kmikeimport pymorphy2 as py def tags(word): morph = py.MorphAnalyzer() return morph.parse(word) >>> print(tags('красной')[0]) Parse(word='красной', tag=OpencorporaTag('ADJF,Qual femn,sing,gent'), normal_form='красный', score=0. 125, methods_stack=((<DictionaryAnalyzer>, 'красной', 86, 8),)) >>> print(tags('красной')[0].tag.grammemes) frozenset({'femn', 'ADJF', 'sing', 'gent', 'Qual'})Слова ‘femn’, ‘ADJF’, ‘sing’, ‘gent’, ‘Qual’ — это обозначения для граммем, принятых в pymorphy2. Обозначения уникальны, их можно использовать для однозначного определения нужных характеристик слова.
Первые штрихи на холсте
Теперь, имея инструмент, составим простой шаблон:source = ''' Вася ест кашу # сущ глагол сущ # что/кто делает с_чем-то NOUN,nomn VERB NOUN,accs '''Здесь ищем существительное (NOUN) в именительном падеже (nomn), за ним глагол (VERB), далее существительное в винительном падеже (accs). Не описанные в шаблоне характеристики нам не важны.
Сделаем его читалку:
class PPattern: def __init__(self): super().__init__() import io def parseSource(src): def parseLine(s): nonlocal arr, last s = s.strip() if s == '': last = None return if s[0] == '#': return if last is None: last = PPattern() arr. append(last) last.example = s else: last.tags = s.split() arr = [] last = None buf = io.StringIO(src) s = buf.readline() while s: parseLine(s) s = buf.readline() return arr s = parseSource(source)Пусть вас здесь не пугает работа через StringIO — я хотел сделать потоковое чтение, просто на всякий случай, если понадобится читать большие тексты.
Приведенный кусок кода лишь считывает шаблоны, но более ничего не делает. Добавим анализируемый текст и его парсинг:
source = ''' Вася ест кашу # сущ гл сущ # что/кто делает с_чем-то NOUN,nomn VERB NOUN,accs Красивый цветок ADJF NOUN Птица сидит на крыше # сущ гл предлог сущ NOUN,nomn VERB NOUN,loct ''' text = ''' Мама мыла раму Вася разбил окно Лара сама мыла раму Мама мыла пластиковые окна ''' import pymorphy2 as py class PPattern: def __init__(self): super().__init__() def checkPhrase(self,text): def checkWordTags(tags, grams): for t in tags: if t not in grams: return False return True def checkWord(tags, word): variants = morph. parse(word) for v in variants: if checkWordTags(self.tags[nextTag].split(','), v.tag.grammemes): return (word, v) return None morph = py.MorphAnalyzer() words = text.split() nextTag = 0 result = [] for w in words: res = checkWord(self.tags[nextTag].split(','), w) if res is not None: result.append(res) nextTag = nextTag + 1 if nextTag >= len(self.tags): return result return None def parseText(pats, text): def parseLine(line): was = False for p in pats: res = p.checkPhrase(line) if res: print('+',line, p.tags, [r[0] for r in res]) was = True if not was: print('-',line) buf = io.StringIO(text) s = buf.readline() while s: s = s.strip() if s != '': parseLine(s) s = buf.Pymorphy2 при анализе слова возвращает массив всех возможных вариантов, что это за слово может быть: «мыла» — это существительное или глагол. Поэтому наша задача проверить все эти варианты и выбрать из них такой, что характеристики слова подойдут под шаблон. Это делается в функции checkWord.readline() patterns = parseSource(source) parseText(patterns, text)
Получаем результат разбора:
+ Мама мыла раму ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Мама', 'мыла', 'раму']
+ Вася разбил окно ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Вася', 'разбил', 'окно']
+ Лара сама мыла раму ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Лара', 'мыла', 'раму']
+ Лара сама мыла раму ['ADJF', 'NOUN'] ['сама', 'мыла']
+ Мама мыла пластиковые окна ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Мама', 'мыла', 'окна']
+ Мама мыла пластиковые окна ['ADJF', 'NOUN'] ['пластиковые', 'окна']
Ну что же, неплохо для начала.
И что, это всё?
Нет, конечно, теперь надо описать соответствие падежей, родов и т.source = ''' # Красивый цветок ADJF NOUN -a- -b- # Правила выведения, разделяющие пробелы обязательны = a.case = b.case = a.number = b.number = a.gender = b.gender '''Появилась строка определения переменных
-a- -b-
и строки правил, начинающиеся с «=». Вообще я не заморачивался с синтаксисом шаблонов, поэтому каждый оператор живет в одной строке, а тип оператора определяется по первому символу.Добавляем разбор правил в парсинг шаблонов. Правило компилируется в две лямбды — для получения значения до символа «=», и для для получения второго значения.
def parseFunc(v, names): dest = v.split('.') index = names.index(dest[0]) dest = (eval('lambda a: a.' + '.'.join(dest[1:])), index) return dest def parseLine(s): ... elif s[0] == '-': # внутренние имена s = [x.strip('-') for x in s.split()] last.names = s elif s[0] == '=': # правила s = [x for x in s[1:]. split() if x != ''] dest = parseFunc(s[0],last.names) src = parseFunc(s[2],last.names) last.rules.append(((dest[1],src[1]), dest, src)) else: ...И добавляем проверку правил в парсинг текста — просто вычисление лямбд и сравнение их результатов:
... res = checkWord(self.tags[nextTag].split(','), w) if res is not None: result.append(res) usedP.add(wi) if not self.checkRules(usedP, result): result.remove(res) usedP.remove(wi) else: nextTag = nextTag + 1 if nextTag >= len(self.tags): return (result, usedP) ... def checkRules(self, used, result): for r in self.rules: if max(r[0]) < len(result): destRes = result[r[0][0]] destV = destRes[1] destFunc = r[1][0] srcRes = result[r[0][1]] srcFunc = r[2][0] srcV = srcRes[1] if not self.Прогоним на классикеcheckPropRule(destFunc,destV, srcFunc, srcV): return False return True def checkPropRule(self, getFunc, getArgs, srcFunc, srcArgs, \ op = lambda x,y: x == y): v1 = getFunc(getArgs) v2 = srcFunc(srcArgs) return op(v1,v2)
+ Эти типы стали есть на нашем складе ['ADJF', 'NOUN'] ['Эти', 'типы']
+ Эти типы стали есть на нашем складе ['ADJF', 'NOUN'] ['нашем', 'складе']
+ Эти типы стали есть на нашем складе ['NOUN,nomn', 'VERB', 'PREP', 'NOUN,loct'] ['типы', 'стали', 'на', 'складе']
+ Эти типы стали есть на нашем складе ['NOUN,nomn', 'VERB', 'PREP', 'NOUN,loct'] ['стали', 'есть', 'на', 'складе']
Еще введем правило для имен:
# хомяк Коля NOUN Name -a- -b- = a.tag.case = b.tag.case = a.tag.number = b.tag.numberЭто дает разбор:
+ Сестра Татьяна - учительница ['NOUN', 'Name'] ['Сестра', 'Татьяна']
Больше правил, хороших и разных
Все было так хорошо, что означало, что мы чего-то не заметили. Парсер сломался на фразе «Младшие братья Миша и Вова ходят в детский сад» — он не смог подтвердить правило= a.gender = b.gender
, потому что «младшие» не имеет родовой принадлежности и может относиться как к слову мужского рода «братья», так и к женскому «сестры».Следовательно, правило должно быть более сложным. Ну, раз я все равно компилирую лямбды из текста, то можно создать вместо двух одну, возвращающую результат проверки. Тогда это правило можно будет записать в виде выражения на чистом Python-е:
= a.tag.gender is None or a.tag.gender == b.tag.genderМне показалось, что у Python должно быть встроенное средство получения имен «a» и «b», задействованных в выражении. Предчувствие не обмануло, небольшое чтение help и документации привело меня к парсеру AST, в котором было все необходимое, и следующему коду:
import ast def parseSource(src): def parseFunc(expr, names): m = ast.parse(expr) # Получим список уникальных задействованных имен varList = list(set([ x. id for x in ast.walk(m) if type(x) == ast.Name])) # Найдем их позиции в грамматике indexes = [ names.index(v) for v in varList ] lam = 'lambda %s: %s' % (','.join(varList), expr) return (indexes, eval(lam), lam)Все правила переписал на выражения Python. Кстати, если правило записано неправильно, то оно не компилируется еще при чтении словаря шаблонов и программа вылетает по exception, так что если словарь прочитался, то правила выполнимы.
И все получилось:+ Младшие братья Миша и Вова ходят в детский сад ['ADJF', 'NOUN'] ['Младшие', 'братья']
# Текст, который будем парсить text = ''' Мама мыла раму Вася разбил окно Лара сама мыла раму Рано ушла наша Шура Мама мыла пластиковые окна Наша семья У нас большая семья Папа и брат Илья работают на заводе Мама ведет хозяйство Сестра Татьяна - учительница Я учусь в школе Младшие братья Миша и Вова ходят в детский сад Эти типы стали есть на нашем складе '''Словарь шаблонов
# Описания шаблонов source = ''' # Вася ест кашу # сущ гл сущ # что/кто делает с_чем-то NOUN,nomn VERB NOUN,accs # определения внутренних имен -a- -b- -c- = a. tag.number == b.tag.number # Именованная сущность :SNOUN # Красивый цветок ADJF NOUN -a- -b- # Правила сооответствия шаблону = a.tag.case == b.tag.case = a.tag.number == b.tag.number = a.tag.gender is None or a.tag.gender == b.tag.gender # Птица сидит на крыше # сущ гл предлог сущ NOUN,nomn VERB PREP NOUN,loct -a- -b- -c- -d- = a.tag.number == b.tag.number # стали есть VERB INFN # хомяк Коля NOUN Name -a- -b- = a.tag.case == b.tag.case = a.tag.number == b.tag.number # серп и молот NOUN CONJ NOUN -a- -c- -b- = a.tag.case == b.tag.case # NOUN PNCT NOUN -a- -c- -b- = a.tag.case == b.tag.case = c.normal_form == '-' '''Разбор
+ Мама мыла раму ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Мама', 'мыла', 'раму']
+ Вася разбил окно ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Вася', 'разбил', 'окно']
+ Лара сама мыла раму ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Лара', 'мыла', 'раму']
+ Рано ушла наша Шура ['ADJF', 'NOUN'] ['наша', 'Шура']
+ Мама мыла пластиковые окна ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Мама', 'мыла', 'окна']
+ Мама мыла пластиковые окна ['ADJF', 'NOUN'] ['пластиковые', 'окна']
+ Наша семья ['ADJF', 'NOUN'] ['Наша', 'семья']
+ У нас большая семья ['ADJF', 'NOUN'] ['большая', 'семья']
+ Папа и брат Илья работают на заводе ['NOUN', 'Name'] ['Папа', 'Илья']
+ Папа и брат Илья работают на заводе ['NOUN', 'Name'] ['и', 'Илья']
+ Папа и брат Илья работают на заводе ['NOUN', 'Name'] ['брат', 'Илья']
+ Папа и брат Илья работают на заводе ['NOUN', 'CONJ', 'NOUN'] ['Папа', 'и', 'брат']
+ Мама ведет хозяйство ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Мама', 'ведет', 'хозяйство']
+ Сестра Татьяна - учительница ['NOUN', 'Name'] ['Сестра', 'Татьяна']
+ Сестра Татьяна - учительница ['NOUN', 'PNCT', 'NOUN'] ['Сестра', '-', 'учительница']
+ Сестра Татьяна - учительница ['NOUN', 'PNCT', 'NOUN'] ['Татьяна', '-', 'учительница']
+ Я учусь в школе ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['Я', 'учусь', 'в']
+ Я учусь в школе ['NOUN,nomn', 'VERB', 'PREP', 'NOUN,loct'] ['Я', 'учусь', 'в', 'школе']
+ Младшие братья Миша и Вова ходят в детский сад ['NOUN,nomn', 'VERB', 'NOUN,accs'] ['братья', 'ходят', 'в']
+ Младшие братья Миша и Вова ходят в детский сад ['ADJF', 'NOUN'] ['Младшие', 'братья']
+ Младшие братья Миша и Вова ходят в детский сад ['ADJF', 'NOUN'] ['детский', 'сад']
+ Младшие братья Миша и Вова ходят в детский сад ['NOUN', 'CONJ', 'NOUN'] ['братья', 'и', 'Вова']
+ Младшие братья Миша и Вова ходят в детский сад ['NOUN', 'CONJ', 'NOUN'] ['Миша', 'и', 'Вова']
+ Эти типы стали есть на нашем складе ['ADJF', 'NOUN'] ['Эти', 'типы']
+ Эти типы стали есть на нашем складе ['ADJF', 'NOUN'] ['нашем', 'складе']
+ Эти типы стали есть на нашем складе ['NOUN,nomn', 'VERB', 'PREP', 'NOUN,loct'] ['типы', 'стали', 'на', 'складе']
+ Эти типы стали есть на нашем складе ['NOUN,nomn', 'VERB', 'PREP', 'NOUN,loct'] ['стали', 'есть', 'на', 'складе']
+ Эти типы стали есть на нашем складе ['VERB', 'INFN'] ['стали', 'есть']
Что дальше?
1. Как видите, я остановился на поиске отдельных шаблонов, но не стал результат разбора объединять в дерево синтаксического разбора. Тому есть несколько причин, и одна из них — я не уверен, что стоит это делать. Каждый вариант разбора дает нам маленькую крупицу информации. Объединяя их в дерево, мы пытаемся втиснуть знания в искусственную структуру. Ребенок может читать и понимать предложения, не зная, какое слово в нем подлежащее, а какое — сказуемое. Он берет крупицы и создает в своей голове картину (описываемого) мира. Зачем же нам требовать от машины большего?2. Очевидно не хватает правила, насколько одно слово может быть удалено в тексте от другого. Так «Папа» стал «Ильей», хотя между ними стоят слова «и брат».
3. Так же очевидно, что нужно сортировать результаты между собой и отбрасывать маловероятные. Определение релевантности — вопрос открытый, как минимум можно измерять удаленность слов друг от друга.
4. В правилах, помимо остальных частей речи, не хватает знаков пунктуации. Можно ввести константные литералы «NOUN ‘-‘ NOUN», а можно, как выше в примере с учительницей, проверять знак в правиле.
5. Pymorphy2 умеет предполагать принадлежность слов к частям речи, поэтому возможны даже такие варианты:>>> parseText(patterns, 'бятые пуськи')
+ бятые пуськи ['ADJF', 'NOUN'] ['бятые', 'пуськи']
+ бятые пуськи ['NOUN', 'Name'] ['бятые', 'пуськи']
Однако здесь пришлось оригинальные слова Петрушевской поменять местами, т.к. нет шаблона с обратным порядком слов. Не то, чтобы это проблема, шаблон ввести недолго, но перестановки слов в русском языке случаются часто и всех их шаблонами не покрыть. Поэтому имеет смысл ввести в описания шаблонов какие-то модификаторы, допускающие перестановку.
Код лежит на GitHub.
Последовательность синтаксического разбора предложений с прямой речью.
указать на то, что это предложение с прямой речью.
выделить слова автора и прямой речи.
объяснить связанную с этим членением пунктуацию.
дать синтаксическую характеристику предложения. Представляющего прямую речь (соответственно той схеме, какая требуется для синтаксического разбора данного предложения (схеме простого или сложносочинённого, или сложноподчинённого и т.д. предложений). Если прямая речь состоит из нескольких независимых предложений, то каждое характеризуются отдельно.
указать на особенности слов автора (обычно они связаны с пунктуацией).
составить схемы предложения.
Основные разновидности схем
А: «П». «П», — а. «П, — а, — п».
А: «П?» «П?», — а. «П, — а. — П».
А: «П!» «П!», — а. «П? – а. — П».
А: «П..» «П..», — а. «П! – а. — П».
«П… — а, — п».
«П… — а. — П».
Образец разбора предложения с прямой речью.
«Молодость счастлива тем, — писал Гоголь, — что у неё есть будущее».
Это предложение с прямой речью. Прямая речь – Молодость счастлива тем, что у неё есть будущее. Слова автора – писал Гоголь. Слова автора разрывают прямую речь на месте, где должна была стоять запятая, поэтому после первой части прямой речи, как и после слов автора, ставятся запятая и тире, и вторая часть прямой речи пишется с маленькой буквы. Прямая речь заключена в кавычки. Прямая речь – это повествовательное, невосклицательное, сложноподчинённое предложение, состоящее из главного – Молодость счастлива тем и местоименно-определительного (дополнительного) придаточного что у нее есть будущее . (Далее следует общая характеристика и разбор по членам каждой части сложного предложения). Схема предложения: « П, — а, -п».
1.Ранее весеннее утро, прохладное и росистое.
2.Не отходи от меня, друг мой, останься со мной.
3.Хотелось домой идти одной, но пришлось идти с ребятами, и по дороге спорила, что-то доказывала, горячилась.
4.Вечерами, когда он, опустошенный, с легким нереальным звоном в голове, спускался вниз и пил с женой чай, он думал, что именно это называется счастьем.
5.Любите книгу: она поможет вам разобраться в пестрой путанице мыслей, она научит вас уважать человека.
6.Как мало пройдено дорог – как много сделано ошибок!
7.Наконец мы расстались; я долго следил за нею взором, пока ее шляпка не скрылась за кустарником и скалами.
8.Он казался лет пятидесяти; смуглый цвет лица его показывал, что оно давно знакомо с закавказским солнцем, и преждевременно поседевшие усы не соответствовали его твердой походке и бодрому виду.
9.В 1944 году М.Пришвин записал в своем дневнике: «Едва ли возможна какая-либо на земле жизнь без греха: невозможна, потому что грех есть бродило сознания. Но это вовсе не значит, что каждый из нас для продвижения по пути сознания должен непременно совершить грех. Напротив, каждый , сознавая ужасный грех человека в прошлом, должен строить свою личную жизнь, обходя всякий грех, по возможности даже и безгрешно.
Как анализировать тендерное предложение
Вы изо всех сил пытаетесь соответствовать требованиям проекта, срокам и ожиданиям клиентов? Становится ли труднее найти работу? Помимо маркетинга, предложения ставок — это ваш следующий шаг к успешной сделке, но вам нужно научиться читать их и правильно реагировать на них для достижения наилучших результатов.
Например, вам нужно научиться выявлять в предложениях тревожные сигналы, чтобы не тратить время на ответы на предложения, подготовленные для награждения другой компанией. Вам также необходимо знать, как правильно анализировать предложения, чтобы точно знать, что нужно клиенту, и подходите ли вы для этой работы.
Читайте дальше, чтобы узнать все об анализе предложений, чтобы принимать лучшие решения для вашей компании и улучшать отношения с клиентами!
Что такое запрос предложений (RFP)?
Если вы только начинаете работать подрядчиком, процесс торгов может показаться запутанным. Агентства или юристы будут выпускать запросы предложений (RFP) или запросы котировок (RFQ), если они хотят получить возможность начать торги по контракту. В процессе RFP вы должны быть в состоянии точно оценить эти предложения поставщиков, чтобы вы могли определить, готовы ли вы удовлетворить обслуживание или хорошие требования.
Как читать запрос предложений?
Эти предложения обычно написаны в одном и том же формате, поэтому, ознакомившись с одним из них, вы легко сможете прочитать их все. Они разбиты на разделы, обозначенные буквами от A до M (хотя и не всегда), чтобы информация была краткой:
Сопроводительная форма
Это введение к предложению, которое всегда включает:
- Название агентства
- Контактная информация агентства
- Номер запроса
- Дата выпуска
- Срок выполнения
- Срок оплаты
- Содержание
Этот раздел обычно имеет формат таблицы. Он также будет включать разделы для вашей личной информации и подписи при подаче вашего предложения.
Товары/услуги и расходы
Это подробный раздел, который включает услуги и товары, которые они ищут, а также их бюджет. Подумайте об объеме работы и о том, сможет ли ваша команда выполнить ее. Вы также можете рассмотреть возможность временного найма дополнительных субподрядчиков для завершения работы.
Предложение по стоимости
В этом разделе вы узнаете, как агентство или адвокат планирует оплачивать услуги или товары. Это может быть за счет авансовых ежемесячных платежей, возмещения расходов и т.д.
Поставки или исполнение
Указывает срок действия контракта. Это также может объяснить порядок доставки и процесс заказа задач. Также включены положения, касающиеся заранее оцененных убытков, приказов об остановке, приостановлении заказов на работу и т. д.
Уровень усилия
Этот раздел полезен, потому что он дает представление о том, сколько часов ожидается в течение периода присуждения контракта. Это помогает иметь методологию, основанную на задокументированной истории труда, необходимого для каждого типа работы. Это также включает задачи поддержки, такие как управление проектами и обеспечение качества.
Инструкции, условия, уведомления для оферентов
Если вам присужден контракт, в этом разделе объясняется, что вам нужно сделать в вашем собственном предложении. Это один из самых важных вопросов, потому что он даст вам инструкции для ваших следующих шагов. Например, он скажет вам, что они хотят видеть в предложении, а также правильное форматирование. Он также сообщит вам, сколько копий они хотят, чтобы вы представили.
Факторы оценки для вознаграждения
В этом разделе будет подробно описано все, что вам нужно знать о том, как юрист или агентство оценивают каждый раздел вашего ответа на запрос предложений, прежде чем они присудят вам вознаграждение. Вы можете заметить, что некоторые разделы дадут вам более высокие баллы, чем другие. Обратите особое внимание на эти разделы и используйте язык, отражающий RFP, чтобы они знали, что вы прочитали их требования.
Что такое красные флажки RFP?
Теперь, когда вы знаете, чего ожидать, когда дело доходит до RFP, полезно знать некоторые тревожные флажки. Признание этих красных флажков сэкономит вам много времени и усилий в долгосрочной перспективе, чтобы вы могли перейти к более подходящему RFP.
Некоторые запросы предложений могут быть чрезвычайно запутанными для чтения. У них могут быть особые требования к работе, которые могут показаться невозможными для выполнения в установленные ими сроки. Хотя это может быть просто случай неопытного агентства или адвоката, вы можете столкнуться с проводной ставкой.
Запросы предложений должны быть беспристрастными и непредвзятыми, чтобы каждый подрядчик имел равные шансы на получение вознаграждения. Тем не менее, некоторые агентства попытаются присудить привилегированного подрядчика, написав заявку так, чтобы это имело смысл только для них. Это тратит время подрядчиков, которые не понимают, что это проводная заявка.
Вот несколько красных флажков, на которые стоит обратить внимание, чтобы вы могли не торопиться:
- В большинстве запросов предложений делается упор на опыт работы с конкретными сценариями тематических исследований
- Больше вопросов, чем обычно, о рекомендациях и биографиях
- Более высокие, чем обычно, баллы в разделах, связанных со ссылками и биографиями
- Негибкие сроки, не соответствующие рабочей нагрузке
- Одни и те же вопросы задаются в другой формулировке
- Краткие ответы или отсутствие ответов на простые вопросы
Когда вы читаете предложение, обратите внимание на эти красные флажки и подумайте, стоит ли ваше время и усилия, чтобы ответить.
Проведение анализа предложения
Если вы прочитали предложение и уверены, что оно не является проводным и что вы можете оправдать ожидания клиента, то пришло время потратить некоторое время на его анализ, чтобы вы были готовы составить идеальный ответ. Вот несколько вопросов, которые вы можете задать себе по каждой ставке, чтобы составить правильный ответ:
- Что нужно клиенту?
- Каковы их сроки?
- Каков бюджет клиента?
- Сколько времени нужно клиенту, чтобы решить, кого наградить?
Это помогает отвлечь больше внимания от денег и больше внимания к тому, что вы можете предложить. Даже если у клиента большой бюджет, это может не подойти вам, если то, что они просят, превышает ваши возможности.
Ответ на запрос предложения
Когда вы будете готовы ответить, убедитесь, что вы следуете всем их спецификациям, когда дело доходит до форматирования. Не давайте им повода отказаться от вашего ответа только потому, что вы использовали неправильный шрифт или предоставили недостаточно копий.
Отвечайте кратко и ясно. Используйте язык, отражающий язык, который они использовали в своем предложении, чтобы показать им, что вы внимательно его прочитали. Вот некоторые элементы, которые вы должны включить:
Сопроводительное письмо Это дает им представление о том, кто вы и почему вы считаете, что подходите для этой работы. Не забудьте написать о том, как ваш опыт может принести им пользу.
Краткое изложение
В этом кратком изложении RFP с учетом ваших собственных замечаний. Здесь вы также будете включать свои собственные исследования, интервью и рекомендации. На этом этапе полезно повторить потребности клиента в вежливой форме, чтобы убедиться, что вы согласны с ним.
Результаты и стратегия
Это основная часть вашего ответа. Вы детализируете все результаты и свою стратегию их выполнения в отведенное время. Вы всегда захотите повторить преимущества, которыми клиент может пользоваться в течение всего времени проекта. Также важно указать результаты, которые вы не можете включить, чтобы избежать расползания области.
Резюме проекта
Это единственная область, где вы должны записывать цены для каждого результата. Важно, чтобы вы предоставили конкретные рекомендации по ценам, чтобы у клиента было меньше работы. Основываясь на приведенных выше разделах, они должны быть уверены, что ваши цены справедливы и необходимы для объема работы.
О нас и соглашение
Раздел «О нас» аналогичен вашему сопроводительному письму. Это напоминание клиенту о том, почему вы подходите для этой работы, и о преимуществах, которые он может получить, выбрав вашу компанию. Раздел соглашения должно быть легко найти, и именно здесь клиент подпишется, если он готов предоставить вам проект.
Размещение раздела «О нас» непосредственно перед соглашением поможет клиентам вспомнить о вашей компании, поскольку они просматривают десятки ответов одновременно.
Стать экспертом по тендерным предложениям
Знание того, как провести надлежащий анализ тендерных предложений, сэкономит вам время и деньги в долгосрочной перспективе. Вы сможете быстро определить красные флажки предложений по проводному строительству, чтобы не тратить свое время впустую. Точно так же вы можете отвечать на предложения лаконично и опытно, подчеркивая преимущества работы с вашей компанией по сравнению с другими.
По мере того, как вы наберетесь опыта, вы сможете даже создавать шаблоны ответов, которые сократят время вашего ответа. Готовы ли вы развивать свою компанию и тратить больше времени с помощью программного обеспечения для управления строительством?
Поговорите со специалистом сегодня о ваших потребностях, чтобы начать работу!
разделов предложения | Коммуникация для профессионалов
Предложения используют общий формат анализа проблемы и решения и включают в этот общий формат определенные разделы. Некоторые разделы являются стандартными и ожидаемыми, в то время как другие зависят от вашей аудитории, контекста, типа предложения и других коммуникационных переменных. Обратите внимание: если вы пишете предложение в ответ на запрос предложений (ЗПП), всегда включайте и систематизируйте разделы, необходимые в ЗП.
Стандартные секции | Переменные секции |
|
|
|
|
|
|
|
|
|
|
| |
|
Стандартные разделы
Стандартные разделы предложения посвящены трем основным вещам, которые хотят знать зрители предложения:
- Почему? – Введение и предыстория, Постановка задачи .
- Что? — Возможные и предлагаемые решения, анализ, реализация
- Как? — Сколько это будет стоить?
Введение/предыстория
Раздел введения/предыстории устанавливает сцену для предлагаемого действия. Объясните текущую ситуацию или политику, чтобы у вашего читателя было достаточно исходной информации, чтобы понять контекст, из которого развилось предложение. Хотя вы можете захотеть полностью раскрыть предлагаемое действие в начале, может быть лучше сделать введение кратким и подготовить почву, чтобы перейти к предлагаемому действию, подкрепленному анализом, чтобы читатели могли получить представление о том, что вы будете делать. говоря о том, не читая одно и то же утверждение предложения на протяжении всего предложения.
Постановка задачи
Определите проблему, которую вы пытаетесь решить, — проблему, которая породила предложение. Например, вам может потребоваться объяснить, почему текущая ситуация или политика не работают, или почему компания теряет деньги, покупая у своих нынешних поставщиков. Какой бы ни была проблема, ее следует объяснить как можно конкретнее и конкретнее. Для незапрашиваемых предложений ключевое значение имеет четкая и прямая постановка проблемы. Вы должны установить, что есть потребность в решении. Для запрошенных предложений вам по-прежнему необходимо установить фокус и «почему» предложения, которые могут быть включены в раздел «Введение / Предыстория», если это имеет смысл, учитывая вашу аудиторию и ситуацию с коммуникацией.
Обратите внимание, что важно обобщить проблему с точки зрения читателей, иначе они могут подумать, что их это не касается, и стать незаинтересованными. Постановка проблемы может потребовать некоторого исследования. Иногда читатели могут предложить вам проблему (например, когда фирма пишет вашей компании письмо с объяснением проблемы и способов ее решения). В других случаях вам, возможно, придется определить проблему самостоятельно, основываясь на собственных наблюдениях за потребностями организации.
Посмотрите на следующие примеры, чтобы понять, как введение и справочная информация могут привести к постановке задачи.
пример 1
Этот пример является выдержкой из внутреннего, незапрошенного предложения от главы отдела кадров управляющему директору относительно волны увольнений.
Введение и общая информация
Компания Acme, Inc. была основана 25 лет назад. Несмотря на то, что с годами компания Acme росла и набирала новых сотрудников, в целом текучесть кадров составляла всего 8% в год. Многие из первых сотрудников с течением времени были повышены до руководящих должностей в отделах и подразделениях, что обеспечило стабильность и преемственность в компании. Однако за последние два года некоторые из тех же долгосрочных менеджеров ушли на пенсию, и многие другие связываются с отделом кадров, заявляя о своем намерении уйти на пенсию в течение следующих одного или двух лет. Мы прогнозируем, что в течение следующих двух лет Acme потребуется нанять как минимум девять новых менеджеров ключевых отделов.
Постановка задачи
В связи с заметным увеличением количества выходов на пенсию и предстоящих выходов на пенсию сотрудников, занимающих руководящие должности, Acme сталкивается с четырехкратной проблемой: 1) непрерывность операций, 2) потеря неявных знаний, накопленных многолетними менеджерами, 3) наличие персонала для обучения новых сотрудников и 4) увеличение затрат, связанных с многократным поиском работы.
пример 2
Это выдержка из внешнего предложения от группы преподавателей и разработчиков учебных программ, полученного в ответ на запрос предложений от высших администраторов университетской системы.
Введение и справочная информация
Колледж Линкольна в течение последних пяти лет участвует в ежегодных грантах «Обучение с помощью технологий». Получатели гранта подготовили материалы и инновационные подходы для онлайн-курсов по естественным наукам, математике и информатике — направлениям STEM. Эти подходы привели к повышению успеваемости и сохранению студентов на курсах, пересмотренных в результате грантов.
Постановка задачи
Несмотря на то, что гранты на обучение с помощью технологий принесли пользу студентам, педагогическим дизайнерам и преподавателям, эти преимущества были замечены только в нескольких курсах в области STEM. Таким образом, это предложение о гранте направлено на получение финансирования для помощи в распространении и адаптации некоторых инновационных методов обучения с технологическими идеями в других областях обучения, в курсах и онлайн-ресурсах. Финансирование в рамках гранта «Обучение с помощью технологий» решит текущую проблему Линкольн-колледжа, связанную с нехваткой времени, ресурсов и персонала для распространения идей.
Возможные решения
Раздел «Возможные решения» — это тот раздел, о котором забывают многие авторы, хотя зачастую это самый важный раздел предложения. Этот раздел предлагает множество возможных решений проблемы и логически ведет к предлагаемому решению. Объясните, какие другие варианты есть в этом конкретном случае, чтобы решить эту конкретную проблему. Помните, что аудиторией, читающей предложение, скорее всего, будет кто-то, кто имеет право принимать решения в организации, скорее всего, руководитель высокого уровня или группа людей, которые могут быть несколько далеки от реальной проблемы. Единственное решение, которое вы предлагаете, может показаться этим лицам, принимающим решения, неочевидным или невыполнимым. Даже если лицо, принимающее решение, связано с конкретной проблемой, хорошей стратегией с вашей стороны будет показать, что вы рассмотрели множество возможностей, прежде чем выбрать одну.
Предлагаемое решение/рекомендация
Предложите конкретное решение проблемы – рекомендуемое действие. Обязательно предоставьте достаточно конкретной информации и конкретных деталей, чтобы ваш читатель понял, что именно вы предлагаете. Постарайтесь предвидеть вопросы вашей аудитории и ответьте на них при обсуждении предлагаемого вами решения и рекомендаций.
Анализ
Подробно объясните, почему возможные решения не так хороши, как предлагаемое вами решение (например, не столь рентабельны, могут потребовать найма нового персонала и т. д.). Объясните осуществимость и преимущества предлагаемого вами решения (например, простота реализации, меньшая стоимость и т. д.). Будьте полными, точными и прямыми; используйте нейтральный язык и убеждайте с помощью логического анализа и применения критериев к проблеме, а не с помощью эмоционального призыва.
Важное примечание о размещении анализа
Анализ может быть отдельным разделом, но также является стандартной практикой включать анализ в обсуждение разделов возможного и предлагаемого решения. Определите лучший способ группировки и представления информации в зависимости от ситуации общения.
Реализация
В разделе реализации подробно объясняется, как будет реализовано предлагаемое решение. Помните, читатель должен будет убедиться, что предлагаемое действие осуществимо. Подробно объясните, каковы сроки внедрения изменения, какие материальные и кадровые ресурсы необходимы, как они будут закупаться и другие аспекты внедрения вашего решения. Вы можете использовать отдельные заголовки и/или подзаголовки для этих аспектов реализации, или вы можете решить объединить эти аспекты под одним заголовком «Реализация», в зависимости от вашей коммуникационной ситуации.
Затраты
Укажите затраты, включая не только денежные затраты, но и затраты времени персонала, обучения и т. д. Затраты обычно оформляются в виде списков и/или таблиц для удобства чтения; как правило, не обсуждайте затраты как часть блока текста. Имейте в виду, что для успешного предложения выгоды всегда должны перевешивать затраты.
Переменные разделы
Исследование
Исследование включает в себя объяснение вашей методологии исследования при выявлении проблемы. Сюда также входит включение информации из источников, к которым вы обращались при разработке решения. Источники могут включать в себя организационные архивы, содержащие статистику, информацию из справочных источников, результаты опросов, интервью с коллегами и многое другое. Определите, нужно ли вам включать информацию из источников, и если да, то какие типы источников наиболее подходят для вашего предложения и ситуации с коммуникацией. В целом, исследование может подтвердить достоверность вашей проблемы, решения, реализации, затрат и выгод.
Например, если вы предлагаете внедрить маршрутное автобусное сообщение от парковки до рабочих мест для более эффективного и действенного способа явки людей на работу, вы можете включить результаты внутреннего опроса о парковке, информацию с других рабочих мест с подобными ситуациями, а также исследование проблем страхования при предоставлении этого вида услуг.
Как и в большинстве разделов заявки, исследование может быть отдельным разделом или может быть логически включено в разделы проблемы и решения.
Квалификации
Раздел квалификаций предлагает ваш собственный и чужой опыт. Что позволило вам сделать это предложение? Вы работаете в определенной области в течение 20 лет? Вы заинтересованный член рабочей силы? Если есть другие лица, участвующие в написании и реализации предложения, какова их квалификация? Используйте любую относящуюся к делу информацию, чтобы завоевать доверие и помочь вашей аудитории понять, что вы являетесь подходящим человеком, чтобы предложить и реализовать это предложение. Квалификация наиболее важна, если вы пишете незапрашиваемое предложение для внешней аудитории. Вы можете решить не включать раздел квалификации, если пишете внутреннее предложение, если считаете, что ваша аудитория уже имеет представление о вашей квалификации.
Преимущества
Преимущества могут быть отдельным разделом или включены в ваш анализ возможных и предлагаемых решений. Выгоды также могут быть использованы в качестве средства заключения предложения.
Оценка/План оценки
В некоторых запросах предложений требуется – и в некоторых предложениях – план оценки или оценки, в котором указывается, как будут измеряться результаты предлагаемых действий. Помните, что предлагаемое вами действие должно быть осуществимым и иметь измеримые результаты (например, увеличение продаж на 20%, уменьшение количества жалоб сотрудников в отдел кадров и т. д.), а четкий план оценки поддерживает концепцию осуществимости. Определите, выиграет ли ваше предложение от включения плана оценки, и если да, включите этот раздел, убедившись, что любая предлагаемая вами стратегия оценки понятна и осуществима сама по себе.
Резюме/Заключение
Вы можете, но не обязаны, использовать раздел резюме или заключения в предложении, поскольку вы уже представили свое заключение в разделе предлагаемого решения. Вывод может быть полезен, если предложение длинное или если ваш ситуационный анализ требует вывода, но помните, что в интересах краткости вам не нужно включать вывод, если вы чувствуете, что остальная часть вашей информации подтверждает ваши доводы.
В следующем видеоролике рассматриваются основные разделы предложения в контексте создания предложения по проекту. Он предлагает советы по настройке контекста для вашего предложения, как путем общения с коллегами перед представлением вашего предложения, так и привязки вашего предложения к видению вашей организации.
Основная часть
Заголовок
При создании заголовка предложения следует помнить об одной важной вещи. Название должно очень конкретно и четко идентифицировать предлагаемое действие, например, «Предложение об изменении рабочих станций подразделения «Альфа», «Предложение о создании и внедрении стандартных процедур оценки для работников, занятых неполный рабочий день».
Резюме
Предложение — это единственный формальный отчет, для которого вам может не понадобиться краткое изложение, так как вы хотите, чтобы читатель прочитал ваши аргументы полностью в основной части предложения.