init
This commit is contained in:
41
1_анализ_главы/README.md
Normal file
41
1_анализ_главы/README.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Анализ главы по блокам
|
||||||
|
|
||||||
|
Анализ выполняется последовательно по четырём блокам. Каждый следующий шаг получает **весь накопленный JSON** (уже извлечённые блоки) для согласованности. После каждого блока — валидация (см. `2_валидация_анализа_по_блокам/`), затем склейка.
|
||||||
|
|
||||||
|
## Входные данные (JSON)
|
||||||
|
|
||||||
|
Вход этапа 1 — один JSON-файл на главу. Поля используются в подстановках промптов и передаются по пайплайну до шага 7 (payload в Qdrant).
|
||||||
|
|
||||||
|
| Поле | Тип | Обязательно | Описание |
|
||||||
|
|------|-----|-------------|----------|
|
||||||
|
| `book_id` | string (UUID) | да | ID книги |
|
||||||
|
| `chapter_id` | string (UUID) | да | ID главы (на шаге 7 — id точки в Qdrant) |
|
||||||
|
| `chapter_number` | integer | да | Номер главы |
|
||||||
|
| `chapter_title` | string | да | Название главы → `{chapter_title}` |
|
||||||
|
| `book_title` | string | да | Название книги → `{book_title}` |
|
||||||
|
| `chapter_text` | string | да | Текст главы → `{chapter_text}` |
|
||||||
|
| `author` | string | нет | Автор книги (для payload на шаге 7) |
|
||||||
|
|
||||||
|
**Файлы:** `вход_главы.spec.json` — описание формата (JSON Schema); `вход_главы.example.json` — пример. Имя входного файла на главу — на усмотрение пайплайна (например `input.json` или `{book_id}_{chapter_id}.json`).
|
||||||
|
|
||||||
|
## Порядок генерации
|
||||||
|
|
||||||
|
| Шаг | Промпт | Вход | Выход |
|
||||||
|
|-----|--------|------|-------|
|
||||||
|
| 1 | extract_framework.txt | текст главы | `framework` |
|
||||||
|
| 2 | extract_insights.txt | текст главы + framework | `insights` |
|
||||||
|
| 3 | extract_application.txt | текст главы + framework + insights | `application` |
|
||||||
|
| 4 | extract_limitations.txt | текст главы + framework + insights + application | `limitations` |
|
||||||
|
|
||||||
|
## Подстановки в промптах
|
||||||
|
|
||||||
|
- **Во всех:** `{book_title}`, `{chapter_title}`, `{chapter_text}`
|
||||||
|
- **Только в шагах 2–4:** `{previous_blocks_json}` — весь накопленный JSON (все уже завалидированные предыдущие блоки). Пример: для extract_insights подставляем только `framework`; для extract_application — объект с ключами `framework` и `insights`; для extract_limitations — объект с `framework`, `insights`, `application`.
|
||||||
|
|
||||||
|
## Склейка
|
||||||
|
|
||||||
|
Четыре ответа (по одному JSON-объекту с ключом framework / insights / application / limitations) объединяются в один анализ: слияние ключей верхнего уровня без вызова LLM.
|
||||||
|
|
||||||
|
## Монолитный промпт
|
||||||
|
|
||||||
|
`chapter_analysis_qwen3_prompt.txt` — исходный промпт «всё в одном»; оставлен для сравнения и отката.
|
||||||
67
1_анализ_главы/extract_application_v2.txt
Normal file
67
1_анализ_главы/extract_application_v2.txt
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Ты — эксперт по анализу нон-фикшн.
|
||||||
|
Извлеки из главы только блок «применение» (application):
|
||||||
|
конкретные техники и практические шаги.
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Уже извлечённые блоки framework и insights (для согласованности): {previous_blocks_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Извлеки техники и упражнения: название, цель, пошаговые шаги (steps), пример контекста, фразу для клиента, измеримые критерии успеха. Техники должны опираться на принципы (framework) и инсайты; не придумывай то, чего нет в тексте.
|
||||||
|
- Объединяй по сути одну и ту же технику: не дублируй её под разными названиями; если в главе несколько вариантов одной идеи — одна техника с уточнёнными шагами.
|
||||||
|
- Краевые случаи: если в главе описана одна техника — верни один элемент в techniques. Если явных техник или упражнений в главе нет — верни пустой массив: "techniques": []. Не придумывай техники ради заполнения.
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Не пересказывай текст и не цитируй большие фрагменты; работай на уровне обобщений и смысловых единиц.
|
||||||
|
2. Язык простой, разговорно-профессиональный. При первом использовании в goal, steps или client_phrase слов «триггер», «стимул», «паттерн» и т.п. добавь в скобках пояснение в 3–7 слов, например: стимул (то, что в окружении запускает действие).
|
||||||
|
3. Каждая техника должна быть:
|
||||||
|
- понятна без дополнительного объяснения;
|
||||||
|
- приземлена к реальному поведению и к повседневной ситуации (работа, дом, отношения);
|
||||||
|
- у каждой техники обязательно заполни context_example: один бытовой пример ситуации, где техника применима.
|
||||||
|
4. steps — только из текста главы; без выдуманных шагов. При необходимости добавь шаг про отслеживание результата (что записать или отметить).
|
||||||
|
5. success_criteria — как можно более измеримо: укажи, что именно должно измениться (частота, длительность, количество эпизодов) и за какой промежуток времени (например: «количество эпизодов X снижается с N до M в течение T дней»).
|
||||||
|
6. Избегай чрезмерной абстракции и канцелярита; формулировки живые, но точные.
|
||||||
|
7. Не используй вводные фразы, обращение к читателю и объяснения формата.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## КРИТИЧНО ДЛЯ ФОРМАТА
|
||||||
|
|
||||||
|
- steps — только из текста главы; не выдумывай шаги.
|
||||||
|
- У каждой техники — context_example с одним бытовым примером ситуации (работа, дом, отношения).
|
||||||
|
- success_criteria — измеримый критерий: что меняется (частота/длительность/количество), за какой срок; без размытых формулировок.
|
||||||
|
- Если в главе нет описанных техник или упражнений — верни "techniques": [].
|
||||||
|
- Не дублируй по сути одну технику под разными названиями.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
Строго один JSON-объект с единственным ключом верхнего уровня "application", без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"application": {
|
||||||
|
"techniques": [
|
||||||
|
{
|
||||||
|
"name": "Название техники или упражнения",
|
||||||
|
"goal": "Какую конкретную привычку, навык или поведение это помогает изменить",
|
||||||
|
"context_example": "Короткий пример жизненной ситуации, где техника применима (например: вечер после работы, когда тянет залипнуть в телефон)",
|
||||||
|
"steps": [
|
||||||
|
"Шаг 1: ... (при необходимости — мини-рефлексия или запись наблюдений)",
|
||||||
|
"Шаг 2: ...",
|
||||||
|
"Шаг 3: ... (при необходимости — шаг про отслеживание результата: что записать или отметить)"
|
||||||
|
],
|
||||||
|
"client_phrase": "Как это просто объяснить или сформулировать для клиента",
|
||||||
|
"success_criteria": "Измеримый критерий: что именно меняется (частота, длительность, количество эпизодов) и за какой срок (например: количество эпизодов X снижается с N до M в течение T дней)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
194
1_анализ_главы/extract_application_v2_filled.txt
Normal file
194
1_анализ_главы/extract_application_v2_filled.txt
Normal file
File diff suppressed because one or more lines are too long
64
1_анализ_главы/extract_framework_v2.txt
Normal file
64
1_анализ_главы/extract_framework_v2.txt
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
Ты — эксперт по анализу нон-фикшн. Извлеки из главы только блок «каркас» (framework): принципы и цепочки причина–механизм–результат.
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Извлеки фундаментальные принципы и опорные идеи автора. Для каждого принципа — цепочки cause → mechanism → result (что запускает, как работает, к чему приводит).
|
||||||
|
- Если у одной идеи в главе несколько разных сценариев (разные причины или результаты) — приведи для неё несколько цепочек (2–3), а не одну.
|
||||||
|
- Объединяй перекрывающиеся идеи: один принцип = одна опорная мысль. Не дублируй одну и ту же мысль под разными названиями.
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Не пересказывай текст и не цитируй большие фрагменты; работай на уровне обобщений и смысловых единиц.
|
||||||
|
2. Язык простой, разговорно-профессиональный. Все специальные термины из главы (паттерны, триггеры, автоматизация, подкрепление и т.п.) обязательно внеси в блок "terms" и дай к каждому пояснение в 3–7 слов: что это значит для обычного человека в поведении.
|
||||||
|
3. Каждый принцип и каждая цепочка должны быть:
|
||||||
|
- понятны без дополнительного объяснения;
|
||||||
|
- приземлены к реальному поведению (что человек делает иначе);
|
||||||
|
- у каждого принципа обязательно заполни поле "example": один бытовой пример в одну фразу (работа, дом, отношения).
|
||||||
|
4. Избегай чрезмерной абстракции и канцелярита. Живая, но точная формулировка (например: не «Парадокс воли: повышение дисциплины требует…», а «Чтобы не собирать волю в кулак каждый раз, среду нужно настроить так, чтобы правильное действие было самым лёгким по умолчанию»).
|
||||||
|
5. Не используй вводные фразы, обращение к читателю и объяснения формата.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## КРИТИЧНО ДЛЯ ФОРМАТА
|
||||||
|
|
||||||
|
- Блок "terms" должен быть заполнен: все термины из твоего ответа с короткими пояснениями.
|
||||||
|
- У каждого принципа — массив "chains" с минимум одной цепочкой; при нескольких сценариях — несколько цепочек.
|
||||||
|
- У каждого принципа — поле "example" с одним бытовым примером в одну фразу.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
Строго один JSON-объект с единственным ключом верхнего уровня "framework", без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"framework": {
|
||||||
|
"terms": {
|
||||||
|
"термин1": "пояснение в 3–7 слов для обычного человека",
|
||||||
|
"термин2": "пояснение в 3–7 слов"
|
||||||
|
},
|
||||||
|
"principles": [
|
||||||
|
{
|
||||||
|
"title": "Краткое название принципа",
|
||||||
|
"description": "Живая формулировка с пояснением, как проявляется в жизни",
|
||||||
|
"example": "Один бытовой пример в одну фразу: работа, дом или отношения",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Причина или ситуация, с которой всё начинается",
|
||||||
|
"mechanism": "Что происходит / какой процесс запускается",
|
||||||
|
"result": "К какому результату это приводит для человека"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
64
1_анализ_главы/extract_framework_v2_filled.txt
Normal file
64
1_анализ_главы/extract_framework_v2_filled.txt
Normal file
File diff suppressed because one or more lines are too long
54
1_анализ_главы/extract_insights_v3.txt
Normal file
54
1_анализ_главы/extract_insights_v3.txt
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
Ты — эксперт по анализу нон-фикшн. Извлеки из главы только блок «инсайты» (insights): практически значимые понимания.
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Уже извлечённый блок framework (для согласованности): {previous_blocks_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Извлеки инсайты — то, что человек по-новому понимает о себе/людях/среде и как это меняет поведение в конкретных ситуациях.
|
||||||
|
- Инсайты должны согласовываться с уже извлечённым framework; не противоречь принципам.
|
||||||
|
- Объединяй перекрывающиеся инсайты: один инсайт = одно понимание. Не дублируй одну мысль под разными названиями.
|
||||||
|
- Инсайт — это вывод или новое понимание, которое меняет поведение. Не включай в список определения терминов (что такое стимул, триггер и т.п.); определения остаются в framework. Если формулировка отвечает на вопрос «что это такое?», а не «что из этого следует для человека?» — это не инсайт.
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Не пересказывай текст и не цитируй большие фрагменты; работай на уровне обобщений и смысловых единиц.
|
||||||
|
2. Язык простой, разговорно-профессиональный. При первом использовании в description слов «триггер», «стимул», «паттерн», «подкрепление» и т.п. добавь в скобках пояснение в 3–7 слов, например: триггер (то, что запускает действие почти автоматически).
|
||||||
|
3. Каждый инсайт должен быть:
|
||||||
|
- понятен без дополнительного объяснения;
|
||||||
|
- приземлён к реальному поведению (что человек делает иначе);
|
||||||
|
- у каждого инсайта обязательно заполни поле "example": один бытовой пример в одну фразу (работа, дом, отношения).
|
||||||
|
4. Избегай чрезмерной абстракции и канцелярита; используй живую, но точную формулировку.
|
||||||
|
5. Не используй вводные фразы, обращение к читателю и объяснения формата.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## КРИТИЧНО ДЛЯ ФОРМАТА
|
||||||
|
|
||||||
|
- Инсайты не противоречат принципам из переданного framework.
|
||||||
|
- У каждого инсайта — поле "example" с одним бытовым примером в одну фразу.
|
||||||
|
- Не дублируй перекрывающиеся инсайты: перед добавлением проверь — не выражает ли новый инсайт ту же опорную мысль, что уже есть в списке? Одна мысль («среда важнее силы воли», «привычка не забывается» и т.д.) = один инсайт. Ориентир: 4–7 инсайтов без смысловых дублей.
|
||||||
|
- Не включай определения терминов как отдельные инсайты; только выводы и понимания.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
Строго один JSON-объект с единственным ключом верхнего уровня "insights", без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"insights": [
|
||||||
|
{
|
||||||
|
"title": "Краткое название инсайта",
|
||||||
|
"description": "Что человек по-новому понимает и как это меняет поведение в конкретных ситуациях",
|
||||||
|
"example": "Один бытовой пример в одну фразу: работа, дом или отношения"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
154
1_анализ_главы/extract_insights_v3_filled.txt
Normal file
154
1_анализ_главы/extract_insights_v3_filled.txt
Normal file
File diff suppressed because one or more lines are too long
58
1_анализ_главы/extract_limitations_v3.txt
Normal file
58
1_анализ_главы/extract_limitations_v3.txt
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
Ты — эксперт по анализу нон-фикшн. Извлеки из главы только блок «ограничения» (limitations): риски и узкие места применения идей.
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Уже извлечённые блоки framework, insights, application (для согласованности): {previous_blocks_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Извлеки ограничения: при каких условиях описанные идеи и техники не сработают или дадут риски. Ограничения должны относиться к уже извлечённым принципам и техникам; не противоречь им.
|
||||||
|
- Объединяй перекрывающиеся ограничения: одно ограничение = один тип риска или условия. Не дублируй одну мысль под разными формулировками. Один тип риска = один пункт (например: «внутренние эмоции» и «привычка на уровне нейронов/внутренних триггеров» — один тип риска «причина внутри, а не в среде»; не оформляй двумя разными пунктами).
|
||||||
|
- Ограничение — это конкретное условие или ситуация, при которых идеи/техники не сработают или дадут риски. Не включай общие truisms («всё индивидуально», «зависит от человека»); только ограничения с опорой в тексте или следующие из переданных принципов и техник.
|
||||||
|
- Краевой случай: если в главе нет явных ограничений, рисков или узких мест — верни пустой массив: "limitations": []. Не придумывай ограничения ради заполнения.
|
||||||
|
- Ориентир: 2–5 ограничений без смысловых дублей.
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Не пересказывай текст и не цитируй большие фрагменты; работай на уровне обобщений и смысловых единиц.
|
||||||
|
2. Язык простой, разговорно-профессиональный. При первом использовании по порядку в списке ограничений слов «триггер», «стимул», «паттерн» и т.п. обязательно добавь в скобках пояснение в 3–7 слов, например: триггер (то, что в окружении запускает действие). В следующих пунктах тот же термин можно использовать без повторного пояснения.
|
||||||
|
3. Каждое ограничение должно быть:
|
||||||
|
- понятно без дополнительного объяснения;
|
||||||
|
- приземлено к реальным ситуациям (работа, дом, отношения);
|
||||||
|
- у каждого ограничения обязательно заполни поле "example": один бытовой пример ситуации, когда это ограничение проявляется (в одну фразу).
|
||||||
|
4. when_relevant — в каких ситуациях, контекстах или для каких людей это ограничение особенно важно учитывать.
|
||||||
|
5. Избегай чрезмерной абстракции и канцелярита; формулировки живые, но точные.
|
||||||
|
6. Не используй вводные фразы, обращение к читателю и объяснения формата.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## КРИТИЧНО ДЛЯ ФОРМАТА
|
||||||
|
|
||||||
|
- Ограничения не противоречат принципам и техникам из переданных блоков; они указывают, когда идеи не сработают или дадут риски.
|
||||||
|
- У каждого ограничения — поле "example" с одним бытовым примером ситуации в одну фразу (работа, дом, отношения).
|
||||||
|
- Не дублируй перекрывающиеся ограничения: перед добавлением проверь — не описывает ли новый пункт тот же тип риска, что уже есть? Если два пункта по смыслу про одно (например, «когда причина привычки внутренняя»), объедини в один.
|
||||||
|
- В первом по порядку ограничении, где встречается «триггер» или «стимул», дай пояснение в скобках (3–7 слов).
|
||||||
|
- Если в главе нет описанных ограничений или рисков — верни "limitations": [].
|
||||||
|
- Не включай общие truisms; только конкретные ограничения с опорой в тексте или в переданных блоках.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
Строго один JSON-объект с единственным ключом верхнего уровня "limitations", без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"limitations": [
|
||||||
|
{
|
||||||
|
"description": "Риск или узкое место при применении идей на практике",
|
||||||
|
"when_relevant": "В каких ситуациях или для каких людей это важно учитывать",
|
||||||
|
"example": "Один бытовой пример ситуации, когда это ограничение проявляется (работа, дом или отношения)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
90
1_анализ_главы/extract_limitations_v3_filled.txt
Normal file
90
1_анализ_главы/extract_limitations_v3_filled.txt
Normal file
File diff suppressed because one or more lines are too long
159
1_анализ_главы/merge.json
Normal file
159
1_анализ_главы/merge.json
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
{
|
||||||
|
"framework": {
|
||||||
|
"terms": {
|
||||||
|
"стимул": "что в окружающей среде заставляет человека действовать",
|
||||||
|
"привычка": "повторяющееся действие, которое становится автоматическим",
|
||||||
|
"подкрепление": "воздействие, усиливающее вероятность повторения действия",
|
||||||
|
"среда": "окружение, влияющее на поведение через стимулы и ограничения",
|
||||||
|
"желание, вызванное стимулом": "непроизвольная тяга к действию, спровоцированному внешним триггером",
|
||||||
|
"аутокаталитический процесс": "процесс, усиливающий себя сам"
|
||||||
|
},
|
||||||
|
"principles": [
|
||||||
|
{
|
||||||
|
"title": "Среда формирует поведение",
|
||||||
|
"description": "Человек не управляет привычками напрямую, а воздействует на окружение, чтобы оно вело его к нужным действиям",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек находится в среде с доступными стимулами для нежелательной привычки",
|
||||||
|
"mechanism": "Стимул активирует уже сформированную привычку, которая запускает автоматическое действие",
|
||||||
|
"result": "Человек повторяет вредную привычку, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Изменяется среда, удаляются стимулы, провоцирующие нежелательную привычку",
|
||||||
|
"mechanism": "Отсутствие триггеров снижает вероятность срабатывания привычки",
|
||||||
|
"result": "Человек реже проявляет нежелательное поведение"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, они только временно подавлены",
|
||||||
|
"description": "Даже если человек перестаёт делать что-то, привычка остаётся в мозге и может вернуться при подходящих условиях",
|
||||||
|
"example": "Человек перестаёт курить, но снова начинает после посещения места, где раньше курил",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек прекращает проявлять вредную привычку",
|
||||||
|
"mechanism": "Мозг сохраняет нейронные связи, связанные с этой привычкой",
|
||||||
|
"result": "Привычка может вернуться, если появятся подходящие стимулы"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Окружение меняется, и в нем появляются триггеры, связанные с прошлой привычкой",
|
||||||
|
"mechanism": "Стимулы запускают автоматические паттерны поведения",
|
||||||
|
"result": "Человек снова начинает делать то, что уже перестал"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это краткосрочный, а не долгосрочный инструмент",
|
||||||
|
"description": "Противостояние искушению неэффективно на длительном сроке, нужно менять контекст",
|
||||||
|
"example": "Человек отказывается от сладкого, но возвращается к нему после стрессового дня",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается контролировать себя в момент искушения",
|
||||||
|
"mechanism": "Это требует энергии и усилий, которые невозможно поддерживать всегда",
|
||||||
|
"result": "Человек устаёт от борьбы и возвращается к нежелательной привычке"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек изменяет окружение, чтобы искушения стали менее доступными",
|
||||||
|
"mechanism": "Стимулы для плохого поведения становятся незаметными или невозможными",
|
||||||
|
"result": "Человек реже сталкивается с искушением"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Дисциплина — это настройка среды, а не внутреннее усилие",
|
||||||
|
"description": "Сильные люди не просто дисциплинированы, а живут в среде, которая поддерживает их цели",
|
||||||
|
"example": "Человек встаёт раньше, потому что спальня тёмная и не имеет гаджетов",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается быть дисциплинированным только силой воли",
|
||||||
|
"mechanism": "Это требует большого количества энергии и часто неудачно",
|
||||||
|
"result": "Человек теряет мотивацию и возвращается к нежелательному поведению"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек настраивает окружение так, чтобы хорошее поведение было лёгким",
|
||||||
|
"mechanism": "Стимулы для правильных действий становятся более доступными",
|
||||||
|
"result": "Человек чаще выбирает здоровые привычки"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают негативное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства провоцируют возвращение к вредным привычкам",
|
||||||
|
"example": "Человек садится на диван и ест шоколад, когда ему плохо",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек испытывает стресс или негативные эмоции",
|
||||||
|
"mechanism": "Это активирует привычку, которая помогает снизить дискомфорт",
|
||||||
|
"result": "Человек снова начинает делать то, что раньше снимало напряжение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается избавиться от вредной привычки, но не меняет среду",
|
||||||
|
"mechanism": "Стресс и негативные эмоции остаются, усиливая желание к действию",
|
||||||
|
"result": "Человек возвращается к нежелательной привычке"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"insights": [
|
||||||
|
{
|
||||||
|
"title": "Среда влияет на привычки больше, чем сила воли",
|
||||||
|
"description": "Чтобы изменить привычку, нужно изменить окружение, а не надеяться только на самоконтроль",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, только временно подавляются",
|
||||||
|
"description": "Даже если человек перестаёт курить или есть сладкое, эти привычки остаются в мозге и могут вернуться при подходящих условиях",
|
||||||
|
"example": "После посещения бара человек снова начинает пить, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают вредное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства могут спровоцировать возвращение к старым привычкам",
|
||||||
|
"example": "После ссоры человек снова начинает есть вредную пищу, чтобы успокоиться"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Сокращение стимулов уменьшает повторение нежелательного поведения",
|
||||||
|
"description": "Удаление триггеров, связанных с вредной привычкой, снижает вероятность её возобновления",
|
||||||
|
"example": "Убрать сигареты из дома, чтобы уменьшить вероятность их употребления"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это временная стратегия, а не долгосрочное решение",
|
||||||
|
"description": "Постоянно бороться с искушением утомительно и непрочное; нужно настраивать среду так, чтобы искушений не было совсем",
|
||||||
|
"example": "Поставить телефон в другую комнату, чтобы не проверять соцсети во время работы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"application": {
|
||||||
|
"techniques": [
|
||||||
|
{
|
||||||
|
"name": "Снижение доступности стимула",
|
||||||
|
"goal": "Уменьшение вероятности повторения нежелательной привычки за счёт удаления её триггеров",
|
||||||
|
"context_example": "Вечер после работы, когда тянет залипнуть в телефон и проверять соцсети",
|
||||||
|
"steps": [
|
||||||
|
"Определите конкретный стимул (например, наличие телефона на столе)",
|
||||||
|
"Уберите объект из зоны видимости или досягаемости (например, оставьте телефон в другой комнате)",
|
||||||
|
"Запишите дату и время изменения (для отслеживания эффективности)"
|
||||||
|
],
|
||||||
|
"client_phrase": "Уберите источник искушения из вашей среды — действие станет менее вероятным",
|
||||||
|
"success_criteria": "Частота использования телефона в моменты, когда это не нужно, снижается с 5 раз/день до 1–2 раз/день за 2 недели"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"limitations": [
|
||||||
|
{
|
||||||
|
"description": "Идеи не работают, если триггер (то, что в окружении запускает действие) не устранён или остаётся доступным, так как привычка может вернуться при появлении стимула",
|
||||||
|
"when_relevant": "Когда человек не полностью убирает триггер из своей среды или сталкивается с ним в новой обстановке",
|
||||||
|
"example": "Человек удалил сигареты из дома, но снова начинает курить на работе среди коллег-курильщиков"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Техники могут не сработать, если негативные эмоции (стресс, тревога) остаются необратленными и усиливают нежелательное поведение",
|
||||||
|
"when_relevant": "Когда человек продолжает испытывать сильный стресс или эмоциональные трудности, не решая их на уровне среды",
|
||||||
|
"example": "Человек убрал телефон из комнаты, но всё равно переедает перед сном из-за хронической тревоги"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Изменения среды могут быть недостаточны, если привычка закреплена на уровне автоматических нейронных паттернов и не сопровождается новыми, здоровыми привычками",
|
||||||
|
"when_relevant": "Когда человек устраняет триггер, но не вводит альтернативное поведение для подкрепления",
|
||||||
|
"example": "Человек убрал телевизор из спальни, но не нашёл замену в виде чтения или медитации и проводит время впустую"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
99
1_анализ_главы/merge_jsons.py
Normal file
99
1_анализ_главы/merge_jsons.py
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Скрипт объединения нескольких JSON-файлов в один.
|
||||||
|
|
||||||
|
Файлы должны лежать в том же каталоге, что и скрипт. Каждый файл — один JSON-объект;
|
||||||
|
результат — один объект, собранный из верхнеуровневых ключей всех файлов.
|
||||||
|
При совпадении ключей побеждает значение из файла, идущего позже в списке.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def get_script_dir() -> Path:
|
||||||
|
"""Возвращает каталог, в котором расположен скрипт."""
|
||||||
|
return Path(__file__).resolve().parent
|
||||||
|
|
||||||
|
|
||||||
|
def merge_json_files(
|
||||||
|
filenames: list[str],
|
||||||
|
base_dir: Path,
|
||||||
|
output_path: Path,
|
||||||
|
indent: int | None = 2,
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Читает перечисленные JSON-файлы из base_dir и записывает объединённый объект в output_path.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
filenames: Список имён файлов (без пути).
|
||||||
|
base_dir: Каталог с входными файлами.
|
||||||
|
output_path: Полный путь к результирующему JSON-файлу.
|
||||||
|
indent: Отступ для форматирования JSON (по умолчанию 2).
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
FileNotFoundError: Если какой-либо входной файл не найден.
|
||||||
|
json.JSONDecodeError: Если содержимое файла не является валидным JSON.
|
||||||
|
"""
|
||||||
|
result: dict = {}
|
||||||
|
|
||||||
|
for name in filenames:
|
||||||
|
path = base_dir / name
|
||||||
|
if not path.is_file():
|
||||||
|
raise FileNotFoundError(f"Файл не найден: {path}")
|
||||||
|
|
||||||
|
with open(path, "r", encoding="utf-8") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
if not isinstance(data, dict):
|
||||||
|
raise TypeError(
|
||||||
|
f"Файл {name} должен содержать JSON-объект (dict), получен: {type(data).__name__}"
|
||||||
|
)
|
||||||
|
result.update(data)
|
||||||
|
|
||||||
|
with open(output_path, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(result, f, ensure_ascii=False, indent=indent)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
"""Точка входа: разбор аргументов и вызов объединения."""
|
||||||
|
script_dir = get_script_dir()
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Объединить несколько JSON-файлов из каталога скрипта в один файл."
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"files",
|
||||||
|
nargs="+",
|
||||||
|
metavar="FILE",
|
||||||
|
help="Имена JSON-файлов (в каталоге скрипта)",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-o",
|
||||||
|
"--output",
|
||||||
|
default="merged.json",
|
||||||
|
metavar="OUTPUT",
|
||||||
|
help="Имя результирующего файла (по умолчанию: merged.json)",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--no-indent",
|
||||||
|
action="store_true",
|
||||||
|
help="Не форматировать вывод (компактный JSON)",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
output_path = script_dir / args.output
|
||||||
|
indent = None if args.no_indent else 2
|
||||||
|
|
||||||
|
merge_json_files(
|
||||||
|
filenames=args.files,
|
||||||
|
base_dir=script_dir,
|
||||||
|
output_path=output_path,
|
||||||
|
indent=indent,
|
||||||
|
)
|
||||||
|
print(f"Записано: {output_path}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
119
1_анализ_главы/run_framework_ollama.py
Normal file
119
1_анализ_главы/run_framework_ollama.py
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Один запуск блока framework через Ollama (qwen3:14b) для сравнения с эталоном выход_frame.json.
|
||||||
|
Вход: вход_главы.json, промпт extract_framework_v2.txt.
|
||||||
|
Выход: выход_frame_ollama.json и краткое сравнение с выход_frame.json.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import urllib.request
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
OLLAMA_URL = "http://localhost:11434"
|
||||||
|
MODEL = "qwen3:14b"
|
||||||
|
DIR = Path(__file__).resolve().parent
|
||||||
|
|
||||||
|
|
||||||
|
def load_input() -> dict:
|
||||||
|
with open(DIR / "вход_главы.json", encoding="utf-8") as f:
|
||||||
|
return json.load(f)
|
||||||
|
|
||||||
|
|
||||||
|
def load_prompt() -> str:
|
||||||
|
with open(DIR / "extract_framework_v2.txt", encoding="utf-8") as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
|
||||||
|
def substitute_prompt(prompt: str, data: dict) -> str:
|
||||||
|
return prompt.replace("{book_title}", data.get("book_title", "")).replace(
|
||||||
|
"{chapter_title}", data.get("chapter_title", "")
|
||||||
|
).replace("{chapter_text}", data.get("chapter_text", ""))
|
||||||
|
|
||||||
|
|
||||||
|
def extract_json_from_response(text: str) -> dict:
|
||||||
|
"""Достаёт JSON из ответа модели (может быть обёрнут в ```json ... ```)."""
|
||||||
|
text = text.strip()
|
||||||
|
match = re.search(r"```(?:json)?\s*([\s\S]*?)\s*```", text)
|
||||||
|
if match:
|
||||||
|
text = match.group(1).strip()
|
||||||
|
return json.loads(text)
|
||||||
|
|
||||||
|
|
||||||
|
def call_ollama(prompt: str) -> str:
|
||||||
|
body = json.dumps(
|
||||||
|
{
|
||||||
|
"model": MODEL,
|
||||||
|
"messages": [{"role": "user", "content": prompt}],
|
||||||
|
"stream": False,
|
||||||
|
"format": "json",
|
||||||
|
},
|
||||||
|
ensure_ascii=False,
|
||||||
|
).encode("utf-8")
|
||||||
|
req = urllib.request.Request(
|
||||||
|
f"{OLLAMA_URL}/api/chat",
|
||||||
|
data=body,
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
|
method="POST",
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
# Таймаут отключён — ждём завершения генерации (может быть 10+ минут на CPU)
|
||||||
|
with urllib.request.urlopen(req, timeout=None) as resp:
|
||||||
|
data = json.load(resp)
|
||||||
|
return data.get("message", {}).get("content", "")
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
body = ""
|
||||||
|
if e.fp:
|
||||||
|
try:
|
||||||
|
body = e.fp.read().decode("utf-8", errors="replace")[:1000]
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
raise RuntimeError(f"Ollama HTTP {e.code}: {e.reason}. Body: {body}") from e
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
print("Загрузка вход_главы.json и промпта...")
|
||||||
|
inp = load_input()
|
||||||
|
prompt_tpl = load_prompt()
|
||||||
|
prompt = substitute_prompt(prompt_tpl, inp)
|
||||||
|
print(f"Вызов Ollama {MODEL} (таймаут отключён, ждём завершения)...")
|
||||||
|
t0 = time.monotonic()
|
||||||
|
try:
|
||||||
|
raw = call_ollama(prompt)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка вызова Ollama: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
elapsed = time.monotonic() - t0
|
||||||
|
print(f"Ответ получен за {elapsed:.1f} сек ({elapsed / 60:.1f} мин)")
|
||||||
|
try:
|
||||||
|
result = extract_json_from_response(raw)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Не удалось распарсить JSON из ответа: {e}", file=sys.stderr)
|
||||||
|
print("Первые 500 символов ответа:", raw[:500], file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
out_path = DIR / "выход_frame_ollama.json"
|
||||||
|
with open(out_path, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(result, f, ensure_ascii=False, indent=2)
|
||||||
|
print(f"Результат сохранён: {out_path}")
|
||||||
|
|
||||||
|
# Сравнение с эталоном
|
||||||
|
ref_path = DIR / "выход_frame.json"
|
||||||
|
if ref_path.exists():
|
||||||
|
with open(ref_path, encoding="utf-8") as f:
|
||||||
|
ref = json.load(f)
|
||||||
|
fw_ollama = result.get("framework", {})
|
||||||
|
fw_ref = ref.get("framework", {})
|
||||||
|
terms_o = len(fw_ollama.get("terms", {}))
|
||||||
|
terms_r = len(fw_ref.get("terms", {}))
|
||||||
|
principles_o = len(fw_ollama.get("principles", []))
|
||||||
|
principles_r = len(fw_ref.get("principles", []))
|
||||||
|
print("\n--- Сравнение с эталоном выход_frame.json ---")
|
||||||
|
print(f" principles: эталон {principles_r}, Ollama {principles_o}")
|
||||||
|
print(f" terms: эталон {terms_r}, Ollama {terms_o}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
1
1_анализ_главы/Вход.txt
Normal file
1
1_анализ_главы/Вход.txt
Normal file
File diff suppressed because one or more lines are too long
9
1_анализ_главы/вход_главы.example.json
Normal file
9
1_анализ_главы/вход_главы.example.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"book_id": "00000000-0000-0000-0000-000000000001",
|
||||||
|
"chapter_id": "00000000-0000-0000-0000-000000000002",
|
||||||
|
"chapter_number": 7,
|
||||||
|
"chapter_title": "Секрет самоконтроля",
|
||||||
|
"book_title": "Атомные привычки",
|
||||||
|
"chapter_text": "В 1971 году, когда шел шестнадцатый год войны во Вьетнаме...",
|
||||||
|
"author": "Джеймс Клир"
|
||||||
|
}
|
||||||
9
1_анализ_главы/вход_главы.json
Normal file
9
1_анализ_главы/вход_главы.json
Normal file
File diff suppressed because one or more lines are too long
37
1_анализ_главы/вход_главы.spec.json
Normal file
37
1_анализ_главы/вход_главы.spec.json
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Вход шага 1 — анализ главы",
|
||||||
|
"description": "Единый входной JSON для этапа 1 (анализ по блокам). Метаданные используются в подстановках промптов и передаются по пайплайну до шага 7 (Qdrant payload).",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["book_id", "chapter_id", "chapter_number", "chapter_title", "book_title", "chapter_text"],
|
||||||
|
"properties": {
|
||||||
|
"book_id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "UUID книги"
|
||||||
|
},
|
||||||
|
"chapter_id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "UUID главы (используется как id точки в Qdrant на шаге 7)"
|
||||||
|
},
|
||||||
|
"chapter_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Номер главы в книге"
|
||||||
|
},
|
||||||
|
"chapter_title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Название главы (подстановка {chapter_title} в промптах)"
|
||||||
|
},
|
||||||
|
"book_title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Название книги (подстановка {book_title} в промптах)"
|
||||||
|
},
|
||||||
|
"chapter_text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Текст главы (подстановка {chapter_text} в промптах)"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Автор книги (опционально; для payload на шаге 7)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
1_анализ_главы/выход_aplic.json
Normal file
18
1_анализ_главы/выход_aplic.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"application": {
|
||||||
|
"techniques": [
|
||||||
|
{
|
||||||
|
"name": "Снижение доступности стимула",
|
||||||
|
"goal": "Уменьшение вероятности повторения нежелательной привычки за счёт удаления её триггеров",
|
||||||
|
"context_example": "Вечер после работы, когда тянет залипнуть в телефон и проверять соцсети",
|
||||||
|
"steps": [
|
||||||
|
"Определите конкретный стимул (например, наличие телефона на столе)",
|
||||||
|
"Уберите объект из зоны видимости или досягаемости (например, оставьте телефон в другой комнате)",
|
||||||
|
"Запишите дату и время изменения (для отслеживания эффективности)"
|
||||||
|
],
|
||||||
|
"client_phrase": "Уберите источник искушения из вашей среды — действие станет менее вероятным",
|
||||||
|
"success_criteria": "Частота использования телефона в моменты, когда это не нужно, снижается с 5 раз/день до 1–2 раз/день за 2 недели"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
99
1_анализ_главы/выход_frame.json
Normal file
99
1_анализ_главы/выход_frame.json
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"framework": {
|
||||||
|
"terms": {
|
||||||
|
"стимул": "что в окружающей среде заставляет человека действовать",
|
||||||
|
"привычка": "повторяющееся действие, которое становится автоматическим",
|
||||||
|
"подкрепление": "воздействие, усиливающее вероятность повторения действия",
|
||||||
|
"среда": "окружение, влияющее на поведение через стимулы и ограничения",
|
||||||
|
"желание, вызванное стимулом": "непроизвольная тяга к действию, спровоцированному внешним триггером",
|
||||||
|
"аутокаталитический процесс": "процесс, усиливающий себя сам"
|
||||||
|
},
|
||||||
|
"principles": [
|
||||||
|
{
|
||||||
|
"title": "Среда формирует поведение",
|
||||||
|
"description": "Человек не управляет привычками напрямую, а воздействует на окружение, чтобы оно вело его к нужным действиям",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек находится в среде с доступными стимулами для нежелательной привычки",
|
||||||
|
"mechanism": "Стимул активирует уже сформированную привычку, которая запускает автоматическое действие",
|
||||||
|
"result": "Человек повторяет вредную привычку, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Изменяется среда, удаляются стимулы, провоцирующие нежелательную привычку",
|
||||||
|
"mechanism": "Отсутствие триггеров снижает вероятность срабатывания привычки",
|
||||||
|
"result": "Человек реже проявляет нежелательное поведение"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, они только временно подавлены",
|
||||||
|
"description": "Даже если человек перестаёт делать что-то, привычка остаётся в мозге и может вернуться при подходящих условиях",
|
||||||
|
"example": "Человек перестаёт курить, но снова начинает после посещения места, где раньше курил",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек прекращает проявлять вредную привычку",
|
||||||
|
"mechanism": "Мозг сохраняет нейронные связи, связанные с этой привычкой",
|
||||||
|
"result": "Привычка может вернуться, если появятся подходящие стимулы"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Окружение меняется, и в нем появляются триггеры, связанные с прошлой привычкой",
|
||||||
|
"mechanism": "Стимулы запускают автоматические паттерны поведения",
|
||||||
|
"result": "Человек снова начинает делать то, что уже перестал"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это краткосрочный, а не долгосрочный инструмент",
|
||||||
|
"description": "Противостояние искушению неэффективно на длительном сроке, нужно менять контекст",
|
||||||
|
"example": "Человек отказывается от сладкого, но возвращается к нему после стрессового дня",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается контролировать себя в момент искушения",
|
||||||
|
"mechanism": "Это требует энергии и усилий, которые невозможно поддерживать всегда",
|
||||||
|
"result": "Человек устаёт от борьбы и возвращается к нежелательной привычке"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек изменяет окружение, чтобы искушения стали менее доступными",
|
||||||
|
"mechanism": "Стимулы для плохого поведения становятся незаметными или невозможными",
|
||||||
|
"result": "Человек реже сталкивается с искушением"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Дисциплина — это настройка среды, а не внутреннее усилие",
|
||||||
|
"description": "Сильные люди не просто дисциплинированы, а живут в среде, которая поддерживает их цели",
|
||||||
|
"example": "Человек встаёт раньше, потому что спальня тёмная и не имеет гаджетов",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается быть дисциплинированным только силой воли",
|
||||||
|
"mechanism": "Это требует большого количества энергии и часто неудачно",
|
||||||
|
"result": "Человек теряет мотивацию и возвращается к нежелательному поведению"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек настраивает окружение так, чтобы хорошее поведение было лёгким",
|
||||||
|
"mechanism": "Стимулы для правильных действий становятся более доступными",
|
||||||
|
"result": "Человек чаще выбирает здоровые привычки"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают негативное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства провоцируют возвращение к вредным привычкам",
|
||||||
|
"example": "Человек садится на диван и ест шоколад, когда ему плохо",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек испытывает стресс или негативные эмоции",
|
||||||
|
"mechanism": "Это активирует привычку, которая помогает снизить дискомфорт",
|
||||||
|
"result": "Человек снова начинает делать то, что раньше снимало напряжение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается избавиться от вредной привычки, но не меняет среду",
|
||||||
|
"mechanism": "Стресс и негативные эмоции остаются, усиливая желание к действию",
|
||||||
|
"result": "Человек возвращается к нежелательной привычке"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
29
1_анализ_главы/выход_insig.json
Normal file
29
1_анализ_главы/выход_insig.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"insights": [
|
||||||
|
{
|
||||||
|
"title": "Среда влияет на привычки больше, чем сила воли",
|
||||||
|
"description": "Чтобы изменить привычку, нужно изменить окружение, а не надеяться только на самоконтроль",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, только временно подавляются",
|
||||||
|
"description": "Даже если человек перестаёт курить или есть сладкое, эти привычки остаются в мозге и могут вернуться при подходящих условиях",
|
||||||
|
"example": "После посещения бара человек снова начинает пить, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают вредное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства могут спровоцировать возвращение к старым привычкам",
|
||||||
|
"example": "После ссоры человек снова начинает есть вредную пищу, чтобы успокоиться"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Сокращение стимулов уменьшает повторение нежелательного поведения",
|
||||||
|
"description": "Удаление триггеров, связанных с вредной привычкой, снижает вероятность её возобновления",
|
||||||
|
"example": "Убрать сигареты из дома, чтобы уменьшить вероятность их употребления"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это временная стратегия, а не долгосрочное решение",
|
||||||
|
"description": "Постоянно бороться с искушением утомительно и непрочное; нужно настраивать среду так, чтобы искушений не было совсем",
|
||||||
|
"example": "Поставить телефон в другую комнату, чтобы не проверять соцсети во время работы"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
19
1_анализ_главы/выход_limit.json
Normal file
19
1_анализ_главы/выход_limit.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"limitations": [
|
||||||
|
{
|
||||||
|
"description": "Идеи не работают, если триггер (то, что в окружении запускает действие) не устранён или остаётся доступным, так как привычка может вернуться при появлении стимула",
|
||||||
|
"when_relevant": "Когда человек не полностью убирает триггер из своей среды или сталкивается с ним в новой обстановке",
|
||||||
|
"example": "Человек удалил сигареты из дома, но снова начинает курить на работе среди коллег-курильщиков"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Техники могут не сработать, если негативные эмоции (стресс, тревога) остаются необратленными и усиливают нежелательное поведение",
|
||||||
|
"when_relevant": "Когда человек продолжает испытывать сильный стресс или эмоциональные трудности, не решая их на уровне среды",
|
||||||
|
"example": "Человек убрал телефон из комнаты, но всё равно переедает перед сном из-за хронической тревоги"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Изменения среды могут быть недостаточны, если привычка закреплена на уровне автоматических нейронных паттернов и не сопровождается новыми, здоровыми привычками",
|
||||||
|
"when_relevant": "Когда человек устраняет триггер, но не вводит альтернативное поведение для подкрепления",
|
||||||
|
"example": "Человек убрал телевизор из спальни, но не нашёл замену в виде чтения или медитации и проводит время впустую"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
24
2_валидация_анализа_по_блокам/README.md
Normal file
24
2_валидация_анализа_по_блокам/README.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Валидация анализа по блокам
|
||||||
|
|
||||||
|
Отдельный промпт на каждый блок анализа главы. Цель — повысить качество проверки за счёт узкого фокуса.
|
||||||
|
|
||||||
|
## Блоки и промпты
|
||||||
|
|
||||||
|
| Блок | Файл промпта | Что проверяем |
|
||||||
|
|-------------|------------------------|----------------------------------------|
|
||||||
|
| framework | validate_framework.txt | Принципы, цепочки cause–mechanism–result |
|
||||||
|
| insights | validate_insights.txt | Инсайты (title, description) |
|
||||||
|
| application | validate_application.txt | Техники (name, goal, steps) |
|
||||||
|
| limitations | validate_limitations.txt | Ограничения, оговорки |
|
||||||
|
|
||||||
|
## Подстановки в промптах
|
||||||
|
|
||||||
|
- `{book_title}` — название книги
|
||||||
|
- `{chapter_title}` — название главы
|
||||||
|
- `{chapter_text}` — текст главы
|
||||||
|
- `{framework_json}` — JSON блока `framework`
|
||||||
|
- `{insights_json}` — JSON блока `insights`
|
||||||
|
- `{application_json}` — JSON блока `application`
|
||||||
|
- `{limitations_json}` — JSON блока `limitations`
|
||||||
|
|
||||||
|
Промпты рассчитаны на тестирование по одному; доработка — по результатам прогонов.
|
||||||
43
2_валидация_анализа_по_блокам/validate_application.txt
Normal file
43
2_валидация_анализа_по_блокам/validate_application.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
Ты валидатор блока application (техники). Проверь ТОЛЬКО этот блок.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Блок application (JSON): {application_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь соответствие блока application тексту главы:
|
||||||
|
1. Каждая техника (name, goal, steps) должна иметь опору в тексте (описание метода, примеры, рекомендации).
|
||||||
|
2. Утверждения или шаги без опоры в тексте — галлюцинации.
|
||||||
|
3. Описанные в тексте техники/методы, которых нет в блоке — пропуски.
|
||||||
|
|
||||||
|
Проверяй идеи и шаги, а не формулировки. steps особенно важны — они должны быть из текста, а не придуманы.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО JSON без комментариев:
|
||||||
|
|
||||||
|
{
|
||||||
|
"verdict": "ok" | "needs_review" | "bad",
|
||||||
|
"score": 0.0,
|
||||||
|
"hallucinations": [
|
||||||
|
{
|
||||||
|
"location": "application/techniques[0]/steps",
|
||||||
|
"summary": "В анализе шаг '[цитата]', в тексте такого нет"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"missing_key_points": [
|
||||||
|
{
|
||||||
|
"summary": "В тексте описана техника X, в application её нет",
|
||||||
|
"evidence": "краткая отсылка к тексту"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
VERDICT: ok — проблем нет; needs_review — 1–2 замечания; bad — галлюцинации в steps или много пропусков.
|
||||||
File diff suppressed because one or more lines are too long
43
2_валидация_анализа_по_блокам/validate_framework.txt
Normal file
43
2_валидация_анализа_по_блокам/validate_framework.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
Ты валидатор блока framework (принципы и цепочки причина–механизм–результат). Проверь ТОЛЬКО этот блок.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Блок framework (JSON): {framework_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь соответствие блока framework тексту главы:
|
||||||
|
1. Каждое утверждение в principles/description и chains (cause, mechanism, result) должно иметь опору в тексте.
|
||||||
|
2. Утверждения без опоры в тексте — галлюцинации.
|
||||||
|
3. Ключевые принципы/цепочки из текста, которых нет в блоке — пропуски.
|
||||||
|
|
||||||
|
Проверяй идеи, а не формулировки. Одна и та же мысль другими словами — не ошибка.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО JSON без комментариев:
|
||||||
|
|
||||||
|
{
|
||||||
|
"verdict": "ok" | "needs_review" | "bad",
|
||||||
|
"score": 0.0,
|
||||||
|
"hallucinations": [
|
||||||
|
{
|
||||||
|
"location": "framework/principles[0]/chains[0]/mechanism",
|
||||||
|
"summary": "В анализе: '[цитата]', в тексте такого нет"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"missing_key_points": [
|
||||||
|
{
|
||||||
|
"summary": "В тексте описан принцип X, в framework его нет",
|
||||||
|
"evidence": "краткая отсылка к тексту"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
VERDICT: ok — проблем нет; needs_review — есть 1–2 замечания; bad — много галлюцинаций или пропусков.
|
||||||
143
2_валидация_анализа_по_блокам/validate_framework_filled.txt
Normal file
143
2_валидация_анализа_по_блокам/validate_framework_filled.txt
Normal file
File diff suppressed because one or more lines are too long
43
2_валидация_анализа_по_блокам/validate_insights.txt
Normal file
43
2_валидация_анализа_по_блокам/validate_insights.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
Ты валидатор блока insights (инсайты). Проверь ТОЛЬКО этот блок.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Блок insights (JSON): {insights_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь соответствие блока insights тексту главы:
|
||||||
|
1. Каждый инсайт (title, description) должен иметь опору в тексте.
|
||||||
|
2. Утверждения без опоры — галлюцинации.
|
||||||
|
3. Важные инсайты из текста, которых нет в блоке — пропуски.
|
||||||
|
|
||||||
|
Проверяй идеи, а не формулировки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО JSON без комментариев:
|
||||||
|
|
||||||
|
{
|
||||||
|
"verdict": "ok" | "needs_review" | "bad",
|
||||||
|
"score": 0.0,
|
||||||
|
"hallucinations": [
|
||||||
|
{
|
||||||
|
"location": "insights[0]/description",
|
||||||
|
"summary": "В анализе: '[цитата]', в тексте такого нет"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"missing_key_points": [
|
||||||
|
{
|
||||||
|
"summary": "В тексте явный инсайт X, в insights его нет",
|
||||||
|
"evidence": "краткая отсылка к тексту"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
VERDICT: ok — проблем нет; needs_review — 1–2 замечания; bad — много галлюцинаций или пропусков.
|
||||||
73
2_валидация_анализа_по_блокам/validate_insights_filled.txt
Normal file
73
2_валидация_анализа_по_блокам/validate_insights_filled.txt
Normal file
File diff suppressed because one or more lines are too long
43
2_валидация_анализа_по_блокам/validate_limitations.txt
Normal file
43
2_валидация_анализа_по_блокам/validate_limitations.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
Ты валидатор блока limitations (ограничения, оговорки). Проверь ТОЛЬКО этот блок.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Текст главы: {chapter_text}
|
||||||
|
- Блок limitations (JSON): {limitations_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь соответствие блока limitations тексту главы:
|
||||||
|
1. Каждое ограничение (description, при необходимости when_relevant) должно иметь опору в тексте или логично следовать из содержания главы.
|
||||||
|
2. Ограничения, которых нет в тексте и которые не вытекают из него — галлюцинации.
|
||||||
|
3. Важные оговорки/ограничения из текста, которых нет в блоке — пропуски.
|
||||||
|
|
||||||
|
Проверяй идеи. Допустимы разумные выводы из текста (например, «метод не мгновенный» при описании постепенных изменений).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО JSON без комментариев:
|
||||||
|
|
||||||
|
{
|
||||||
|
"verdict": "ok" | "needs_review" | "bad",
|
||||||
|
"score": 0.0,
|
||||||
|
"hallucinations": [
|
||||||
|
{
|
||||||
|
"location": "limitations[0]/description",
|
||||||
|
"summary": "В анализе: '[цитата]', в тексте такого нет и не следует из него"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"missing_key_points": [
|
||||||
|
{
|
||||||
|
"summary": "В тексте есть оговорка X, в limitations её нет",
|
||||||
|
"evidence": "краткая отсылка к тексту"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
VERDICT: ok — проблем нет; needs_review — 1–2 замечания; bad — выдуманные ограничения или существенные пропуски.
|
||||||
File diff suppressed because one or more lines are too long
21
2b_финальная_валидация_согласованности/README.md
Normal file
21
2b_финальная_валидация_согласованности/README.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Финальная валидация согласованности (шаг 2b)
|
||||||
|
|
||||||
|
Проверка связей между блоками полного анализа главы после склейки. Соответствие тексту главы не проверяется — оно уже обеспечено валидацией по блокам (каталог `2_валидация_анализа_по_блокам/`).
|
||||||
|
|
||||||
|
## Промпт
|
||||||
|
|
||||||
|
| Файл | Назначение |
|
||||||
|
|--------------------------|-------------------------------------------------|
|
||||||
|
| validate_consistency.txt | Проверка согласованности framework, insights, application, limitations |
|
||||||
|
|
||||||
|
## Подстановки
|
||||||
|
|
||||||
|
- `{book_title}` — название книги
|
||||||
|
- `{chapter_title}` — название главы
|
||||||
|
- `{full_analysis_json}` — полный JSON анализа (склейка блоков framework + insights + application + limitations)
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
Вызывается после шага 2a (склейка блоков). При вердикте bad или needs_review — флаг `needs_review` по главе; опционально — «примиряющий» промпт для минимальных правок.
|
||||||
|
|
||||||
|
Выход 2b (merge.json) вместе с выходом шага 4 (валидация тегов) подаётся в **шаг 5 — мерж анализа и тегов** (`5_мерж_анализа_и_тегов/`). Результат мержа — вход для шага 6 (генерация эмбеддингов).
|
||||||
159
2b_финальная_валидация_согласованности/merge.json
Normal file
159
2b_финальная_валидация_согласованности/merge.json
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
{
|
||||||
|
"framework": {
|
||||||
|
"terms": {
|
||||||
|
"стимул": "что в окружающей среде заставляет человека действовать",
|
||||||
|
"привычка": "повторяющееся действие, которое становится автоматическим",
|
||||||
|
"подкрепление": "воздействие, усиливающее вероятность повторения действия",
|
||||||
|
"среда": "окружение, влияющее на поведение через стимулы и ограничения",
|
||||||
|
"желание, вызванное стимулом": "непроизвольная тяга к действию, спровоцированному внешним триггером",
|
||||||
|
"аутокаталитический процесс": "процесс, усиливающий себя сам"
|
||||||
|
},
|
||||||
|
"principles": [
|
||||||
|
{
|
||||||
|
"title": "Среда формирует поведение",
|
||||||
|
"description": "Человек не управляет привычками напрямую, а воздействует на окружение, чтобы оно вело его к нужным действиям",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек находится в среде с доступными стимулами для нежелательной привычки",
|
||||||
|
"mechanism": "Стимул активирует уже сформированную привычку, которая запускает автоматическое действие",
|
||||||
|
"result": "Человек повторяет вредную привычку, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Изменяется среда, удаляются стимулы, провоцирующие нежелательную привычку",
|
||||||
|
"mechanism": "Отсутствие триггеров снижает вероятность срабатывания привычки",
|
||||||
|
"result": "Человек реже проявляет нежелательное поведение"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, они только временно подавлены",
|
||||||
|
"description": "Даже если человек перестаёт делать что-то, привычка остаётся в мозге и может вернуться при подходящих условиях",
|
||||||
|
"example": "Человек перестаёт курить, но снова начинает после посещения места, где раньше курил",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек прекращает проявлять вредную привычку",
|
||||||
|
"mechanism": "Мозг сохраняет нейронные связи, связанные с этой привычкой",
|
||||||
|
"result": "Привычка может вернуться, если появятся подходящие стимулы"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Окружение меняется, и в нем появляются триггеры, связанные с прошлой привычкой",
|
||||||
|
"mechanism": "Стимулы запускают автоматические паттерны поведения",
|
||||||
|
"result": "Человек снова начинает делать то, что уже перестал"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это краткосрочный, а не долгосрочный инструмент",
|
||||||
|
"description": "Противостояние искушению неэффективно на длительном сроке, нужно менять контекст",
|
||||||
|
"example": "Человек отказывается от сладкого, но возвращается к нему после стрессового дня",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается контролировать себя в момент искушения",
|
||||||
|
"mechanism": "Это требует энергии и усилий, которые невозможно поддерживать всегда",
|
||||||
|
"result": "Человек устаёт от борьбы и возвращается к нежелательной привычке"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек изменяет окружение, чтобы искушения стали менее доступными",
|
||||||
|
"mechanism": "Стимулы для плохого поведения становятся незаметными или невозможными",
|
||||||
|
"result": "Человек реже сталкивается с искушением"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Дисциплина — это настройка среды, а не внутреннее усилие",
|
||||||
|
"description": "Сильные люди не просто дисциплинированы, а живут в среде, которая поддерживает их цели",
|
||||||
|
"example": "Человек встаёт раньше, потому что спальня тёмная и не имеет гаджетов",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается быть дисциплинированным только силой воли",
|
||||||
|
"mechanism": "Это требует большого количества энергии и часто неудачно",
|
||||||
|
"result": "Человек теряет мотивацию и возвращается к нежелательному поведению"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек настраивает окружение так, чтобы хорошее поведение было лёгким",
|
||||||
|
"mechanism": "Стимулы для правильных действий становятся более доступными",
|
||||||
|
"result": "Человек чаще выбирает здоровые привычки"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают негативное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства провоцируют возвращение к вредным привычкам",
|
||||||
|
"example": "Человек садится на диван и ест шоколад, когда ему плохо",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек испытывает стресс или негативные эмоции",
|
||||||
|
"mechanism": "Это активирует привычку, которая помогает снизить дискомфорт",
|
||||||
|
"result": "Человек снова начинает делать то, что раньше снимало напряжение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается избавиться от вредной привычки, но не меняет среду",
|
||||||
|
"mechanism": "Стресс и негативные эмоции остаются, усиливая желание к действию",
|
||||||
|
"result": "Человек возвращается к нежелательной привычке"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"insights": [
|
||||||
|
{
|
||||||
|
"title": "Среда влияет на привычки больше, чем сила воли",
|
||||||
|
"description": "Чтобы изменить привычку, нужно изменить окружение, а не надеяться только на самоконтроль",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, только временно подавляются",
|
||||||
|
"description": "Даже если человек перестаёт курить или есть сладкое, эти привычки остаются в мозге и могут вернуться при подходящих условиях",
|
||||||
|
"example": "После посещения бара человек снова начинает пить, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают вредное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства могут спровоцировать возвращение к старым привычкам",
|
||||||
|
"example": "После ссоры человек снова начинает есть вредную пищу, чтобы успокоиться"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Сокращение стимулов уменьшает повторение нежелательного поведения",
|
||||||
|
"description": "Удаление триггеров, связанных с вредной привычкой, снижает вероятность её возобновления",
|
||||||
|
"example": "Убрать сигареты из дома, чтобы уменьшить вероятность их употребления"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это временная стратегия, а не долгосрочное решение",
|
||||||
|
"description": "Постоянно бороться с искушением утомительно и непрочное; нужно настраивать среду так, чтобы искушений не было совсем",
|
||||||
|
"example": "Поставить телефон в другую комнату, чтобы не проверять соцсети во время работы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"application": {
|
||||||
|
"techniques": [
|
||||||
|
{
|
||||||
|
"name": "Снижение доступности стимула",
|
||||||
|
"goal": "Уменьшение вероятности повторения нежелательной привычки за счёт удаления её триггеров",
|
||||||
|
"context_example": "Вечер после работы, когда тянет залипнуть в телефон и проверять соцсети",
|
||||||
|
"steps": [
|
||||||
|
"Определите конкретный стимул (например, наличие телефона на столе)",
|
||||||
|
"Уберите объект из зоны видимости или досягаемости (например, оставьте телефон в другой комнате)",
|
||||||
|
"Запишите дату и время изменения (для отслеживания эффективности)"
|
||||||
|
],
|
||||||
|
"client_phrase": "Уберите источник искушения из вашей среды — действие станет менее вероятным",
|
||||||
|
"success_criteria": "Частота использования телефона в моменты, когда это не нужно, снижается с 5 раз/день до 1–2 раз/день за 2 недели"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"limitations": [
|
||||||
|
{
|
||||||
|
"description": "Идеи не работают, если триггер (то, что в окружении запускает действие) не устранён или остаётся доступным, так как привычка может вернуться при появлении стимула",
|
||||||
|
"when_relevant": "Когда человек не полностью убирает триггер из своей среды или сталкивается с ним в новой обстановке",
|
||||||
|
"example": "Человек удалил сигареты из дома, но снова начинает курить на работе среди коллег-курильщиков"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Техники могут не сработать, если негативные эмоции (стресс, тревога) остаются необратленными и усиливают нежелательное поведение",
|
||||||
|
"when_relevant": "Когда человек продолжает испытывать сильный стресс или эмоциональные трудности, не решая их на уровне среды",
|
||||||
|
"example": "Человек убрал телефон из комнаты, но всё равно переедает перед сном из-за хронической тревоги"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Изменения среды могут быть недостаточны, если привычка закреплена на уровне автоматических нейронных паттернов и не сопровождается новыми, здоровыми привычками",
|
||||||
|
"when_relevant": "Когда человек устраняет триггер, но не вводит альтернативное поведение для подкрепления",
|
||||||
|
"example": "Человек убрал телевизор из спальни, но не нашёл замену в виде чтения или медитации и проводит время впустую"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
248
2b_финальная_валидация_согласованности/merged_with_tags.json
Normal file
248
2b_финальная_валидация_согласованности/merged_with_tags.json
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
{
|
||||||
|
"framework": {
|
||||||
|
"terms": {
|
||||||
|
"стимул": "что в окружающей среде заставляет человека действовать",
|
||||||
|
"привычка": "повторяющееся действие, которое становится автоматическим",
|
||||||
|
"подкрепление": "воздействие, усиливающее вероятность повторения действия",
|
||||||
|
"среда": "окружение, влияющее на поведение через стимулы и ограничения",
|
||||||
|
"желание, вызванное стимулом": "непроизвольная тяга к действию, спровоцированному внешним триггером",
|
||||||
|
"аутокаталитический процесс": "процесс, усиливающий себя сам"
|
||||||
|
},
|
||||||
|
"principles": [
|
||||||
|
{
|
||||||
|
"title": "Среда формирует поведение",
|
||||||
|
"description": "Человек не управляет привычками напрямую, а воздействует на окружение, чтобы оно вело его к нужным действиям",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек находится в среде с доступными стимулами для нежелательной привычки",
|
||||||
|
"mechanism": "Стимул активирует уже сформированную привычку, которая запускает автоматическое действие",
|
||||||
|
"result": "Человек повторяет вредную привычку, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Изменяется среда, удаляются стимулы, провоцирующие нежелательную привычку",
|
||||||
|
"mechanism": "Отсутствие триггеров снижает вероятность срабатывания привычки",
|
||||||
|
"result": "Человек реже проявляет нежелательное поведение"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, они только временно подавлены",
|
||||||
|
"description": "Даже если человек перестаёт делать что-то, привычка остаётся в мозге и может вернуться при подходящих условиях",
|
||||||
|
"example": "Человек перестаёт курить, но снова начинает после посещения места, где раньше курил",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек прекращает проявлять вредную привычку",
|
||||||
|
"mechanism": "Мозг сохраняет нейронные связи, связанные с этой привычкой",
|
||||||
|
"result": "Привычка может вернуться, если появятся подходящие стимулы"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Окружение меняется, и в нем появляются триггеры, связанные с прошлой привычкой",
|
||||||
|
"mechanism": "Стимулы запускают автоматические паттерны поведения",
|
||||||
|
"result": "Человек снова начинает делать то, что уже перестал"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это краткосрочный, а не долгосрочный инструмент",
|
||||||
|
"description": "Противостояние искушению неэффективно на длительном сроке, нужно менять контекст",
|
||||||
|
"example": "Человек отказывается от сладкого, но возвращается к нему после стрессового дня",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается контролировать себя в момент искушения",
|
||||||
|
"mechanism": "Это требует энергии и усилий, которые невозможно поддерживать всегда",
|
||||||
|
"result": "Человек устаёт от борьбы и возвращается к нежелательной привычке"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек изменяет окружение, чтобы искушения стали менее доступными",
|
||||||
|
"mechanism": "Стимулы для плохого поведения становятся незаметными или невозможными",
|
||||||
|
"result": "Человек реже сталкивается с искушением"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Дисциплина — это настройка среды, а не внутреннее усилие",
|
||||||
|
"description": "Сильные люди не просто дисциплинированы, а живут в среде, которая поддерживает их цели",
|
||||||
|
"example": "Человек встаёт раньше, потому что спальня тёмная и не имеет гаджетов",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается быть дисциплинированным только силой воли",
|
||||||
|
"mechanism": "Это требует большого количества энергии и часто неудачно",
|
||||||
|
"result": "Человек теряет мотивацию и возвращается к нежелательному поведению"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек настраивает окружение так, чтобы хорошее поведение было лёгким",
|
||||||
|
"mechanism": "Стимулы для правильных действий становятся более доступными",
|
||||||
|
"result": "Человек чаще выбирает здоровые привычки"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают негативное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства провоцируют возвращение к вредным привычкам",
|
||||||
|
"example": "Человек садится на диван и ест шоколад, когда ему плохо",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек испытывает стресс или негативные эмоции",
|
||||||
|
"mechanism": "Это активирует привычку, которая помогает снизить дискомфорт",
|
||||||
|
"result": "Человек снова начинает делать то, что раньше снимало напряжение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается избавиться от вредной привычки, но не меняет среду",
|
||||||
|
"mechanism": "Стресс и негативные эмоции остаются, усиливая желание к действию",
|
||||||
|
"result": "Человек возвращается к нежелательной привычке"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"insights": [
|
||||||
|
{
|
||||||
|
"title": "Среда влияет на привычки больше, чем сила воли",
|
||||||
|
"description": "Чтобы изменить привычку, нужно изменить окружение, а не надеяться только на самоконтроль",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, только временно подавляются",
|
||||||
|
"description": "Даже если человек перестаёт курить или есть сладкое, эти привычки остаются в мозге и могут вернуться при подходящих условиях",
|
||||||
|
"example": "После посещения бара человек снова начинает пить, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают вредное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства могут спровоцировать возвращение к старым привычкам",
|
||||||
|
"example": "После ссоры человек снова начинает есть вредную пищу, чтобы успокоиться"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Сокращение стимулов уменьшает повторение нежелательного поведения",
|
||||||
|
"description": "Удаление триггеров, связанных с вредной привычкой, снижает вероятность её возобновления",
|
||||||
|
"example": "Убрать сигареты из дома, чтобы уменьшить вероятность их употребления"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это временная стратегия, а не долгосрочное решение",
|
||||||
|
"description": "Постоянно бороться с искушением утомительно и непрочное; нужно настраивать среду так, чтобы искушений не было совсем",
|
||||||
|
"example": "Поставить телефон в другую комнату, чтобы не проверять соцсети во время работы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"application": {
|
||||||
|
"techniques": [
|
||||||
|
{
|
||||||
|
"name": "Снижение доступности стимула",
|
||||||
|
"goal": "Уменьшение вероятности повторения нежелательной привычки за счёт удаления её триггеров",
|
||||||
|
"context_example": "Вечер после работы, когда тянет залипнуть в телефон и проверять соцсети",
|
||||||
|
"steps": [
|
||||||
|
"Определите конкретный стимул (например, наличие телефона на столе)",
|
||||||
|
"Уберите объект из зоны видимости или досягаемости (например, оставьте телефон в другой комнате)",
|
||||||
|
"Запишите дату и время изменения (для отслеживания эффективности)"
|
||||||
|
],
|
||||||
|
"client_phrase": "Уберите источник искушения из вашей среды — действие станет менее вероятным",
|
||||||
|
"success_criteria": "Частота использования телефона в моменты, когда это не нужно, снижается с 5 раз/день до 1–2 раз/день за 2 недели"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"limitations": [
|
||||||
|
{
|
||||||
|
"description": "Идеи не работают, если триггер (то, что в окружении запускает действие) не устранён или остаётся доступным, так как привычка может вернуться при появлении стимула",
|
||||||
|
"when_relevant": "Когда человек не полностью убирает триггер из своей среды или сталкивается с ним в новой обстановке",
|
||||||
|
"example": "Человек удалил сигареты из дома, но снова начинает курить на работе среди коллег-курильщиков"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Техники могут не сработать, если негативные эмоции (стресс, тревога) остаются необратленными и усиливают нежелательное поведение",
|
||||||
|
"when_relevant": "Когда человек продолжает испытывать сильный стресс или эмоциональные трудности, не решая их на уровне среды",
|
||||||
|
"example": "Человек убрал телефон из комнаты, но всё равно переедает перед сном из-за хронической тревоги"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Изменения среды могут быть недостаточны, если привычка закреплена на уровне автоматических нейронных паттернов и не сопровождается новыми, здоровыми привычками",
|
||||||
|
"when_relevant": "Когда человек устраняет триггер, но не вводит альтернативное поведение для подкрепления",
|
||||||
|
"example": "Человек убрал телевизор из спальни, но не нашёл замену в виде чтения или медитации и проводит время впустую"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": {
|
||||||
|
"principle": [
|
||||||
|
{
|
||||||
|
"tag": "среда формирует поведение",
|
||||||
|
"confidence": 0.95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "привычки не исчезают",
|
||||||
|
"confidence": 0.92
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "самоконтроль краткосрочен",
|
||||||
|
"confidence": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "дисциплина через среду",
|
||||||
|
"confidence": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "негативные эмоции усиливают поведение",
|
||||||
|
"confidence": 0.85
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"psychology": [
|
||||||
|
{
|
||||||
|
"tag": "стимул",
|
||||||
|
"confidence": 0.95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "привычка",
|
||||||
|
"confidence": 0.95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "желание вызванное стимулом",
|
||||||
|
"confidence": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "аутокаталитический процесс",
|
||||||
|
"confidence": 0.85
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "подкрепление",
|
||||||
|
"confidence": 0.8
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"method": [
|
||||||
|
{
|
||||||
|
"tag": "снижение доступности стимула",
|
||||||
|
"confidence": 0.95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "настройка среды",
|
||||||
|
"confidence": 0.92
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "устранение триггеров",
|
||||||
|
"confidence": 0.9
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"result": [
|
||||||
|
{
|
||||||
|
"tag": "уменьшение вредных привычек",
|
||||||
|
"confidence": 0.95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "устойчивое поведение",
|
||||||
|
"confidence": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "снижение искушений",
|
||||||
|
"confidence": 0.85
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"context": [
|
||||||
|
{
|
||||||
|
"tag": "поведенческая психология",
|
||||||
|
"confidence": 0.95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "привычки",
|
||||||
|
"confidence": 0.92
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "атомные привычки",
|
||||||
|
"confidence": 0.9
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"removed": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
Ты валидатор согласованности полного анализа главы. Проверяй ТОЛЬКО связи между блоками. Соответствие тексту главы уже проверено по блокам — не перепроверяй.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
- Полный анализ (склейка блоков, JSON): {full_analysis_json}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь согласованность блоков между собой:
|
||||||
|
|
||||||
|
1. **application (техники) и framework (принципы):** каждая техника должна опираться на хотя бы один принцип или идею из framework; техники не должны противоречить принципам. Если техника «висит» без связи с framework или противоречит ему — рассогласованность.
|
||||||
|
|
||||||
|
2. **insights и framework:** инсайты не должны противоречить принципам и цепочкам cause–mechanism–result из framework. Один и тот же смысл разными словами — не ошибка; прямое противоречие — рассогласованность.
|
||||||
|
|
||||||
|
3. **limitations и остальное:** ограничения/оговорки должны относиться к тому, что реально описано в framework, insights или application (ограничение применимости техники, границы принципа и т.п.). Ограничения «ни о чём» или про несуществующие в анализе вещи — рассогласованность.
|
||||||
|
|
||||||
|
Проверяй только эти три типа связей. Не оценивай полноту или стиль — только внутреннюю согласованность.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО JSON без комментариев:
|
||||||
|
|
||||||
|
{
|
||||||
|
"verdict": "ok" | "needs_review" | "bad",
|
||||||
|
"score": 0.0,
|
||||||
|
"inconsistencies": [
|
||||||
|
{
|
||||||
|
"type": "application_vs_framework" | "insights_vs_framework" | "limitations_vs_rest",
|
||||||
|
"location": "краткое указание (например: application/techniques[1], framework/principles[0])",
|
||||||
|
"summary": "суть рассогласованности в 1–2 предложениях"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
VERDICT: ok — рассогласованностей нет; needs_review — 1–2 несущественных; bad — явные противоречия или несколько рассогласованностей.
|
||||||
@@ -0,0 +1,200 @@
|
|||||||
|
Ты валидатор согласованности полного анализа главы. Проверяй ТОЛЬКО связи между блоками. Соответствие тексту главы уже проверено по блокам — не перепроверяй.
|
||||||
|
|
||||||
|
Данные:
|
||||||
|
- Книга: "[указать название книги]"
|
||||||
|
- Глава: "[указать название главы]"
|
||||||
|
- Полный анализ (склейка блоков, JSON):
|
||||||
|
|
||||||
|
{
|
||||||
|
"framework": {
|
||||||
|
"terms": {
|
||||||
|
"стимул": "что в окружающей среде заставляет человека действовать",
|
||||||
|
"привычка": "повторяющееся действие, которое становится автоматическим",
|
||||||
|
"подкрепление": "воздействие, усиливающее вероятность повторения действия",
|
||||||
|
"среда": "окружение, влияющее на поведение через стимулы и ограничения",
|
||||||
|
"желание, вызванное стимулом": "непроизвольная тяга к действию, спровоцированному внешним триггером",
|
||||||
|
"аутокаталитический процесс": "процесс, усиливающий себя сам"
|
||||||
|
},
|
||||||
|
"principles": [
|
||||||
|
{
|
||||||
|
"title": "Среда формирует поведение",
|
||||||
|
"description": "Человек не управляет привычками напрямую, а воздействует на окружение, чтобы оно вело его к нужным действиям",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек находится в среде с доступными стимулами для нежелательной привычки",
|
||||||
|
"mechanism": "Стимул активирует уже сформированную привычку, которая запускает автоматическое действие",
|
||||||
|
"result": "Человек повторяет вредную привычку, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Изменяется среда, удаляются стимулы, провоцирующие нежелательную привычку",
|
||||||
|
"mechanism": "Отсутствие триггеров снижает вероятность срабатывания привычки",
|
||||||
|
"result": "Человек реже проявляет нежелательное поведение"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, они только временно подавлены",
|
||||||
|
"description": "Даже если человек перестаёт делать что-то, привычка остаётся в мозге и может вернуться при подходящих условиях",
|
||||||
|
"example": "Человек перестаёт курить, но снова начинает после посещения места, где раньше курил",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек прекращает проявлять вредную привычку",
|
||||||
|
"mechanism": "Мозг сохраняет нейронные связи, связанные с этой привычкой",
|
||||||
|
"result": "Привычка может вернуться, если появятся подходящие стимулы"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Окружение меняется, и в нем появляются триггеры, связанные с прошлой привычкой",
|
||||||
|
"mechanism": "Стимулы запускают автоматические паттерны поведения",
|
||||||
|
"result": "Человек снова начинает делать то, что уже перестал"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это краткосрочный, а не долгосрочный инструмент",
|
||||||
|
"description": "Противостояние искушению неэффективно на длительном сроке, нужно менять контекст",
|
||||||
|
"example": "Человек отказывается от сладкого, но возвращается к нему после стрессового дня",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается контролировать себя в момент искушения",
|
||||||
|
"mechanism": "Это требует энергии и усилий, которые невозможно поддерживать всегда",
|
||||||
|
"result": "Человек устаёт от борьбы и возвращается к нежелательной привычке"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек изменяет окружение, чтобы искушения стали менее доступными",
|
||||||
|
"mechanism": "Стимулы для плохого поведения становятся незаметными или невозможными",
|
||||||
|
"result": "Человек реже сталкивается с искушением"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Дисциплина — это настройка среды, а не внутреннее усилие",
|
||||||
|
"description": "Сильные люди не просто дисциплинированы, а живут в среде, которая поддерживает их цели",
|
||||||
|
"example": "Человек встаёт раньше, потому что спальня тёмная и не имеет гаджетов",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается быть дисциплинированным только силой воли",
|
||||||
|
"mechanism": "Это требует большого количества энергии и часто неудачно",
|
||||||
|
"result": "Человек теряет мотивацию и возвращается к нежелательному поведению"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек настраивает окружение так, чтобы хорошее поведение было лёгким",
|
||||||
|
"mechanism": "Стимулы для правильных действий становятся более доступными",
|
||||||
|
"result": "Человек чаще выбирает здоровые привычки"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают негативное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства провоцируют возвращение к вредным привычкам",
|
||||||
|
"example": "Человек садится на диван и ест шоколад, когда ему плохо",
|
||||||
|
"chains": [
|
||||||
|
{
|
||||||
|
"cause": "Человек испытывает стресс или негативные эмоции",
|
||||||
|
"mechanism": "Это активирует привычку, которая помогает снизить дискомфорт",
|
||||||
|
"result": "Человек снова начинает делать то, что раньше снимало напряжение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cause": "Человек пытается избавиться от вредной привычки, но не меняет среду",
|
||||||
|
"mechanism": "Стресс и негативные эмоции остаются, усиливая желание к действию",
|
||||||
|
"result": "Человек возвращается к нежелательной привычке"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"insights": [
|
||||||
|
{
|
||||||
|
"title": "Среда влияет на привычки больше, чем сила воли",
|
||||||
|
"description": "Чтобы изменить привычку, нужно изменить окружение, а не надеяться только на самоконтроль",
|
||||||
|
"example": "Убрать телефон с рабочего стола, чтобы не отвлекаться на соцсети"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Привычки не исчезают, только временно подавляются",
|
||||||
|
"description": "Даже если человек перестаёт курить или есть сладкое, эти привычки остаются в мозге и могут вернуться при подходящих условиях",
|
||||||
|
"example": "После посещения бара человек снова начинает пить, не осознавая этого"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Негативные эмоции усиливают вредное поведение",
|
||||||
|
"description": "Стресс, тревога и другие негативные чувства могут спровоцировать возвращение к старым привычкам",
|
||||||
|
"example": "После ссоры человек снова начинает есть вредную пищу, чтобы успокоиться"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Сокращение стимулов уменьшает повторение нежелательного поведения",
|
||||||
|
"description": "Удаление триггеров, связанных с вредной привычкой, снижает вероятность её возобновления",
|
||||||
|
"example": "Убрать сигареты из дома, чтобы уменьшить вероятность их употребления"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самоконтроль — это временная стратегия, а не долгосрочное решение",
|
||||||
|
"description": "Постоянно бороться с искушением утомительно и непрочное; нужно настраивать среду так, чтобы искушений не было совсем",
|
||||||
|
"example": "Поставить телефон в другую комнату, чтобы не проверять соцсети во время работы"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"application": {
|
||||||
|
"techniques": [
|
||||||
|
{
|
||||||
|
"name": "Снижение доступности стимула",
|
||||||
|
"goal": "Уменьшение вероятности повторения нежелательной привычки за счёт удаления её триггеров",
|
||||||
|
"context_example": "Вечер после работы, когда тянет залипнуть в телефон и проверять соцсети",
|
||||||
|
"steps": [
|
||||||
|
"Определите конкретный стимул (например, наличие телефона на столе)",
|
||||||
|
"Уберите объект из зоны видимости или досягаемости (например, оставьте телефон в другой комнате)",
|
||||||
|
"Запишите дату и время изменения (для отслеживания эффективности)"
|
||||||
|
],
|
||||||
|
"client_phrase": "Уберите источник искушения из вашей среды — действие станет менее вероятным",
|
||||||
|
"success_criteria": "Частота использования телефона в моменты, когда это не нужно, снижается с 5 раз/день до 1–2 раз/день за 2 недели"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"limitations": [
|
||||||
|
{
|
||||||
|
"description": "Идеи не работают, если триггер (то, что в окружении запускает действие) не устранён или остаётся доступным, так как привычка может вернуться при появлении стимула",
|
||||||
|
"when_relevant": "Когда человек не полностью убирает триггер из своей среды или сталкивается с ним в новой обстановке",
|
||||||
|
"example": "Человек удалил сигареты из дома, но снова начинает курить на работе среди коллег-курильщиков"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Техники могут не сработать, если негативные эмоции (стресс, тревога) остаются необратленными и усиливают нежелательное поведение",
|
||||||
|
"when_relevant": "Когда человек продолжает испытывать сильный стресс или эмоциональные трудности, не решая их на уровне среды",
|
||||||
|
"example": "Человек убрал телефон из комнаты, но всё равно переедает перед сном из-за хронической тревоги"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Изменения среды могут быть недостаточны, если привычка закреплена на уровне автоматических нейронных паттернов и не сопровождается новыми, здоровыми привычками",
|
||||||
|
"when_relevant": "Когда человек устраняет триггер, но не вводит альтернативное поведение для подкрепления",
|
||||||
|
"example": "Человек убрал телевизор из спальни, но не нашёл замену в виде чтения или медитации и проводит время впустую"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь согласованность блоков между собой:
|
||||||
|
|
||||||
|
1. **application (техники) и framework (принципы):** каждая техника должна опираться на хотя бы один принцип или идею из framework; техники не должны противоречить принципам. Если техника «висит» без связи с framework или противоречит ему — рассогласованность.
|
||||||
|
|
||||||
|
2. **insights и framework:** инсайты не должны противоречить принципам и цепочкам cause–mechanism–result из framework. Один и тот же смысл разными словами — не ошибка; прямое противоречие — рассогласованность.
|
||||||
|
|
||||||
|
3. **limitations и остальное:** ограничения/оговорки должны относиться к тому, что реально описано в framework, insights или application (ограничение применимости техники, границы принципа и т.п.). Ограничения «ни о чём» или про несуществующие в анализе вещи — рассогласованность.
|
||||||
|
|
||||||
|
Проверяй только эти три типа связей. Не оценивай полноту или стиль — только внутреннюю согласованность.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО JSON без комментариев:
|
||||||
|
|
||||||
|
{
|
||||||
|
"verdict": "ok" | "needs_review" | "bad",
|
||||||
|
"score": 0.0,
|
||||||
|
"inconsistencies": [
|
||||||
|
{
|
||||||
|
"type": "application_vs_framework" | "insights_vs_framework" | "limitations_vs_rest",
|
||||||
|
"location": "краткое указание (например: application/techniques[1], framework/principles[0])",
|
||||||
|
"summary": "суть рассогласованности в 1–2 предложениях"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
VERDICT: ok — рассогласованностей нет; needs_review — 1–2 несущественных; bad — явные противоречия или несколько рассогласованностей.
|
||||||
32
3_извлечение_тегов/README.md
Normal file
32
3_извлечение_тегов/README.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Извлечение тегов (шаг 3)
|
||||||
|
|
||||||
|
Отдельный шаг пайплайна после финальной валидации согласованности (2b). ИИ использует уже структурированный анализ главы (каркас, инсайты, применение) и оригинальный текст для извлечения тегов по категориям.
|
||||||
|
|
||||||
|
## Промпт
|
||||||
|
|
||||||
|
| Файл | Назначение |
|
||||||
|
|------------------|-------------------------------------------------|
|
||||||
|
| extract_tags.txt | Извлечение тегов по категориям из валидированного анализа |
|
||||||
|
|
||||||
|
## Подстановки
|
||||||
|
|
||||||
|
- `{book_title}` — название книги
|
||||||
|
- `{chapter_title}` — название главы
|
||||||
|
- `{framework}` — JSON блока framework
|
||||||
|
- `{insights}` — JSON блока insights
|
||||||
|
- `{application}` — JSON блока application
|
||||||
|
- `{limitations}` — JSON блока limitations (опционально)
|
||||||
|
- `{chapter_text}` — оригинальный текст главы (можно обрезать по лимиту токенов)
|
||||||
|
- `{allowed_tags_json}` — актуальный список допустимых тегов по категориям (из БД `tags`)
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
Валидированный анализ главы (все блоки) + оригинальный текст главы + словарь допустимых тегов.
|
||||||
|
|
||||||
|
## Выход
|
||||||
|
|
||||||
|
JSON с тегами по категориям (ключи на английском: `principle`, `psychology`, `method`, `result`, `context`) и confidence score для каждого тега; при необходимости — кандидаты в `proposed` с полем `category` из того же набора. Маппинг категорий: ARCHITECTURE_SUMMARY.md → раздел «Хранение данных» → таблица `tags`.
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
Вызывается после шага 2b (финальная валидация). Модель: qwen3-14b:8bit (или аналог). Перед вызовом в промпт подставляется актуальный список тегов из БД.
|
||||||
79
3_извлечение_тегов/extract_tags.txt
Normal file
79
3_извлечение_тегов/extract_tags.txt
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
Ты — эксперт по тегированию нон-фикшн. На основе валидированного анализа главы извлеки теги по категориям. Теги нужны для фильтрации и кросс-книжного поиска.
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
|
||||||
|
Данные анализа (JSON-блоки, сериализованные в строку):
|
||||||
|
- Каркас (принципы, цепочки, термины): {framework}
|
||||||
|
- Инсайты: {insights}
|
||||||
|
- Применение (техники, методики): {application}
|
||||||
|
- Ограничения: {limitations}
|
||||||
|
|
||||||
|
Оригинальный текст главы (выдержка для контекста): {chapter_text}
|
||||||
|
|
||||||
|
Допустимые теги по категориям — JSON (выбирай ТОЛЬКО из этого списка): {allowed_tags_json}
|
||||||
|
|
||||||
|
**Опора при выборе тегов:** в первую очередь блоки анализа (framework, insights, application); текст главы — для проверки релевантности и калибровки confidence.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Извлеки теги по следующим категориям. Ключи категорий в ответе — на английском (соответствуют полю `category` в БД):
|
||||||
|
|
||||||
|
1. **principle** — по сути правила/принципа: название правила/принципа, ключевые концепции, связанные принципы.
|
||||||
|
2. **psychology** — по психологическому механизму: психологические концепции, проблемы, механизмы работы. Включай термин из списка, если он **существенно используется** в главе (объяснён, в цепочке причина–механизм–результат или в примере), а не только упомянут вскользь.
|
||||||
|
3. **method** — по методу/технике: конкретные методики, подходы, процессы.
|
||||||
|
4. **result** — по результату/цели: достигаемые результаты, цели применения.
|
||||||
|
5. **context** — по контексту книги: связь с общей концепцией книги, автор и подход, общая тематика.
|
||||||
|
|
||||||
|
Теги должны отражать **суть** главы, а не просто упоминания. Каждый тег — релевантен содержанию. Избегай слишком общих тегов. Приоритет: качество над количеством. **Не более 5 тегов на категорию;** при равной релевантности оставляй самые важные для поиска.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Выбирай теги **только** из переданного списка (`allowed_tags_json`). В поле `tag` копируй строку **точно как в списке** — без изменения формулировки, регистра и пунктуации.
|
||||||
|
2. Если для главы нужен смысл, которого нет в списке — верни его в блоке `proposed`: объект с полями `tag`, `category` (principle | psychology | method | result | context), `reason`. Не добавляй такой тег в основные категории.
|
||||||
|
3. Один и тот же смысл — один тег; не дублируй синонимами из списка.
|
||||||
|
4. **Confidence** (0.0–1.0) калибруй так: **0.9–1.0** — тема в ядре главы (принципы, главные идеи); **0.7–0.89** — есть в главе, но второстепенно или через примеры; **0.5–0.69** — только упомянуто, без разбора. Не завышай: различай «главное» и «по касательной».
|
||||||
|
5. Не используй вводные фразы и пояснения в ответе — только JSON.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
Строго один JSON-объект без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"tags": {
|
||||||
|
"principle": [
|
||||||
|
{ "tag": "название тега из списка", "confidence": 0.95 }
|
||||||
|
],
|
||||||
|
"psychology": [
|
||||||
|
{ "tag": "...", "confidence": 0.9 }
|
||||||
|
],
|
||||||
|
"method": [
|
||||||
|
{ "tag": "...", "confidence": 0.85 }
|
||||||
|
],
|
||||||
|
"result": [
|
||||||
|
{ "tag": "...", "confidence": 0.9 }
|
||||||
|
],
|
||||||
|
"context": [
|
||||||
|
{ "tag": "...", "confidence": 0.88 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"proposed": [
|
||||||
|
{
|
||||||
|
"tag": "формулировка предлагаемого тега",
|
||||||
|
"category": "principle | psychology | method | result | context",
|
||||||
|
"reason": "краткое обоснование в 1–2 предложениях"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
- Ключи в `tags` — английские, соответствуют полю `tags.category` в БД. Пустые категории — пустой массив `[]`. В каждом `tag` — строка в точности как в `allowed_tags_json`.
|
||||||
|
- Блок `proposed` — только если ни один существующий тег не подходит по смыслу; иначе пустой массив `[]`.
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
79
3_извлечение_тегов/extract_tags_filled.txt
Normal file
79
3_извлечение_тегов/extract_tags_filled.txt
Normal file
File diff suppressed because one or more lines are too long
34
3_извлечение_тегов/выход_tag.json
Normal file
34
3_извлечение_тегов/выход_tag.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"tags": {
|
||||||
|
"principle": [
|
||||||
|
{ "tag": "среда формирует поведение", "confidence": 0.95 },
|
||||||
|
{ "tag": "привычки не исчезают", "confidence": 0.92 },
|
||||||
|
{ "tag": "самоконтроль краткосрочен", "confidence": 0.9 },
|
||||||
|
{ "tag": "дисциплина через среду", "confidence": 0.9 },
|
||||||
|
{ "tag": "негативные эмоции усиливают поведение", "confidence": 0.85 }
|
||||||
|
],
|
||||||
|
"psychology": [
|
||||||
|
{ "tag": "стимул", "confidence": 0.95 },
|
||||||
|
{ "tag": "привычка", "confidence": 0.95 },
|
||||||
|
{ "tag": "желание вызванное стимулом", "confidence": 0.9 },
|
||||||
|
{ "tag": "аутокаталитический процесс", "confidence": 0.85 },
|
||||||
|
{ "tag": "подкрепление", "confidence": 0.8 }
|
||||||
|
],
|
||||||
|
"method": [
|
||||||
|
{ "tag": "снижение доступности стимула", "confidence": 0.95 },
|
||||||
|
{ "tag": "настройка среды", "confidence": 0.92 },
|
||||||
|
{ "tag": "устранение триггеров", "confidence": 0.9 }
|
||||||
|
],
|
||||||
|
"result": [
|
||||||
|
{ "tag": "уменьшение вредных привычек", "confidence": 0.95 },
|
||||||
|
{ "tag": "устойчивое поведение", "confidence": 0.9 },
|
||||||
|
{ "tag": "снижение искушений", "confidence": 0.85 }
|
||||||
|
],
|
||||||
|
"context": [
|
||||||
|
{ "tag": "поведенческая психология", "confidence": 0.95 },
|
||||||
|
{ "tag": "привычки", "confidence": 0.92 },
|
||||||
|
{ "tag": "атомные привычки", "confidence": 0.9 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"proposed": []
|
||||||
|
}
|
||||||
31
4_валидация_тегов/README.md
Normal file
31
4_валидация_тегов/README.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Валидация тегов (шаг 4)
|
||||||
|
|
||||||
|
Отдельный шаг пайплайна после извлечения тегов (шаг 3). Проверка релевантности каждого тега содержанию главы, соответствие каркасу/инсайтам/применению, фильтрация нерелевантных и слишком общих тегов, обновление confidence scores.
|
||||||
|
|
||||||
|
## Промпт
|
||||||
|
|
||||||
|
| Файл | Назначение |
|
||||||
|
|------------------|-------------------------------------------------|
|
||||||
|
| validate_tags.txt | Валидация извлечённых тегов по анализу и тексту главы |
|
||||||
|
|
||||||
|
## Подстановки
|
||||||
|
|
||||||
|
- `{book_title}` — название книги
|
||||||
|
- `{chapter_title}` — название главы
|
||||||
|
- `{extracted_tags_json}` — JSON из шага 3 (tags по категориям + proposed)
|
||||||
|
- `{framework}` — JSON блока framework
|
||||||
|
- `{insights}` — JSON блока insights
|
||||||
|
- `{application}` — JSON блока application
|
||||||
|
- `{chapter_text}` — выдержка текста главы (для проверки релевантности)
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
Извлечённые теги (шаг 3) + валидированный анализ главы (framework, insights, application) + оригинальный текст главы.
|
||||||
|
|
||||||
|
## Выход
|
||||||
|
|
||||||
|
JSON: проверенные теги по категориям с обновлёнными confidence; теги, снятые при валидации, — в блоке `removed` (tag, category, reason). Формат `tags` совпадает с выходом шага 3 для передачи в эмбеддинг и сохранение в БД.
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
Вызывается после шага 3 (извлечение тегов). Модель: qwen3-14b:8bit (или аналог). Время: ~20–30 сек на главу.
|
||||||
67
4_валидация_тегов/validate_tags.txt
Normal file
67
4_валидация_тегов/validate_tags.txt
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Ты валидатор тегов главы. Цель: снять только теги без опоры в главе или анализе; теги с опорой — оставлять, при необходимости понижая confidence. Не повышай confidence — только понижай или оставляй без изменений (калибровка уже сделана на шаге 3).
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "{book_title}"
|
||||||
|
- Глава: "{chapter_title}"
|
||||||
|
|
||||||
|
Извлечённые теги (JSON из шага 3): {extracted_tags_json}
|
||||||
|
|
||||||
|
Данные анализа (JSON-блоки):
|
||||||
|
- Каркас: {framework}
|
||||||
|
- Инсайты: {insights}
|
||||||
|
- Применение: {application}
|
||||||
|
|
||||||
|
Оригинальный текст главы (выдержка): {chapter_text}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь каждый тег. В `removed` попадают **только** теги без опоры в главе и в анализе или противоречащие смыслу главы.
|
||||||
|
|
||||||
|
1. **Опора в анализе:** если тег есть в анализе (framework.terms, названия принципов/инсайтов/техник, цепочки cause–mechanism–result) — **не снимать**; при необходимости только **понизить** confidence. Снимать только при отсутствии связи с главой/анализом или при противоречии.
|
||||||
|
|
||||||
|
2. **«Слишком общий» — не повод снимать:** тег, входящий в framework (terms, principles) или в описание техник/инсайтов, не снимать как «общий»; только понизить confidence при необходимости. Снимать — только если тег реально не связан с главой или противоречит анализу.
|
||||||
|
|
||||||
|
3. **При сомнении — оставлять:** если не уверен, снимать тег или нет — **оставлять** тег и при необходимости понизить confidence. В `removed` — только явно нерелевантные теги.
|
||||||
|
|
||||||
|
**Confidence:** только **понижать** или оставлять без изменений; **не повышать**. Шкала для понижения: 0.7–0.89 — второстепенно; 0.5–0.69 — только упомянуто.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Не добавляй новых тегов и не меняй формулировки тегов — только оставляй/снимай и обновляй confidence. Confidence не повышай — только понижай или оставляй как во входе.
|
||||||
|
2. Снятые теги перечисляй в блоке `removed`: поля `tag`, `category` (principle | psychology | method | result | context), `reason` (кратко, почему снят). В `removed` — только теги без опоры в главе и анализе или противоречащие смыслу.
|
||||||
|
3. В `tags` сохраняй ту же структуру по категориям (ключи на английском); пустые категории — пустой массив `[]`.
|
||||||
|
4. Ответ — только JSON, без вводных фраз и пояснений.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО один JSON-объект без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"tags": {
|
||||||
|
"principle": [
|
||||||
|
{ "tag": "строка тега без изменений", "confidence": 0.95 }
|
||||||
|
],
|
||||||
|
"psychology": [],
|
||||||
|
"method": [],
|
||||||
|
"result": [],
|
||||||
|
"context": []
|
||||||
|
},
|
||||||
|
"removed": [
|
||||||
|
{
|
||||||
|
"tag": "формулировка снятого тега",
|
||||||
|
"category": "principle | psychology | method | result | context",
|
||||||
|
"reason": "краткая причина снятия в 1 предложении"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
- Ключи в `tags` — английские (principle, psychology, method, result, context). В каждом элементе `tag` — строка в точности как во входе.
|
||||||
|
- Блок `removed` — все теги, снятые при валидации; если ничего не снято — пустой массив `[]`.
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
67
4_валидация_тегов/validate_tags_filled.txt
Normal file
67
4_валидация_тегов/validate_tags_filled.txt
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Ты валидатор тегов главы. Цель: снять только теги без опоры в главе или анализе; теги с опорой — оставлять, при необходимости понижая confidence. Не повышай confidence — только понижай или оставляй без изменений (калибровка уже сделана на шаге 3).
|
||||||
|
|
||||||
|
Контекст:
|
||||||
|
- Книга: "Атомные привычки"
|
||||||
|
- Глава: "Глава 1. Среда и привычки"
|
||||||
|
|
||||||
|
Извлечённые теги (JSON из шага 3): {"tags":{"principle":[{"tag":"среда формирует поведение","confidence":0.95},{"tag":"привычки не исчезают","confidence":0.92},{"tag":"самоконтроль краткосрочен","confidence":0.9},{"tag":"дисциплина через среду","confidence":0.9},{"tag":"негативные эмоции усиливают поведение","confidence":0.85}],"psychology":[{"tag":"стимул","confidence":0.95},{"tag":"привычка","confidence":0.95},{"tag":"желание вызванное стимулом","confidence":0.9},{"tag":"аутокаталитический процесс","confidence":0.85},{"tag":"подкрепление","confidence":0.8}],"method":[{"tag":"снижение доступности стимула","confidence":0.95},{"tag":"настройка среды","confidence":0.92},{"tag":"устранение триггеров","confidence":0.9}],"result":[{"tag":"уменьшение вредных привычек","confidence":0.95},{"tag":"устойчивое поведение","confidence":0.9},{"tag":"снижение искушений","confidence":0.85}],"context":[{"tag":"поведенческая психология","confidence":0.95},{"tag":"привычки","confidence":0.92},{"tag":"атомные привычки","confidence":0.9}]},"proposed":[]}
|
||||||
|
|
||||||
|
Данные анализа (JSON-блоки):
|
||||||
|
- Каркас: {"framework":{"terms":{"стимул":"что в окружающей среде заставляет человека действовать","привычка":"повторяющееся действие, которое становится автоматическим","подкрепление":"воздействие, усиливающее вероятность повторения действия","среда":"окружение, влияющее на поведение через стимулы и ограничения","желание, вызванное стимулом":"непроизвольная тяга к действию, спровоцированному внешним триггером","аутокаталитический процесс":"процесс, усиливающий себя сам"},"principles":[{"title":"Среда формирует поведение","description":"Человек не управляет привычками напрямую, а воздействует на окружение","example":"Убрать телефон с рабочего стола","chains":[{"cause":"Среда с доступными стимулами для нежелательной привычки","mechanism":"Стимул активирует привычку","result":"Человек повторяет вредную привычку"},{"cause":"Изменяется среда, удаляются стимулы","mechanism":"Отсутствие триггеров","result":"Человек реже проявляет нежелательное поведение"}]},{"title":"Привычки не исчезают, они только временно подавлены","description":"Привычка остаётся в мозге и может вернуться при подходящих условиях","example":"Перестаёт курить, но снова начинает после посещения места","chains":[{"cause":"Человек прекращает проявлять вредную привычку","mechanism":"Мозг сохраняет нейронные связи","result":"Привычка может вернуться при подходящих стимулах"}]},{"title":"Самоконтроль — краткосрочный инструмент","description":"Противостояние искушению неэффективно на длительном сроке","chains":[{"cause":"Контроль себя в момент искушения","mechanism":"Требует энергии","result":"Устаёт и возвращается к привычке"},{"cause":"Изменяет окружение","mechanism":"Стимулы для плохого становятся незаметными","result":"Реже сталкивается с искушением"}]},{"title":"Дисциплина — настройка среды","description":"Сильные люди живут в среде, которая поддерживает цели","chains":[{"cause":"Дисциплина только силой воли","mechanism":"Много энергии, часто неудачно","result":"Теряет мотивацию"},{"cause":"Настраивает окружение","mechanism":"Стимулы для правильных действий доступнее","result":"Чаще выбирает здоровые привычки"}]},{"title":"Негативные эмоции усиливают негативное поведение","description":"Стресс, тревога провоцируют возвращение к вредным привычкам","chains":[{"cause":"Стресс или негативные эмоции","mechanism":"Активирует привычку для снижения дискомфорта","result":"Снова делает то, что снимало напряжение"}]}]}}
|
||||||
|
- Инсайты: {"insights":[{"title":"Среда влияет на привычки больше, чем сила воли","description":"Изменить окружение, а не надеяться на самоконтроль","example":"Убрать телефон с рабочего стола"},{"title":"Привычки не исчезают, только временно подавляются","description":"Привычки остаются в мозге, могут вернуться","example":"После посещения бара снова начинает пить"},{"title":"Негативные эмоции усиливают вредное поведение","description":"Стресс может спровоцировать возвращение к старым привычкам"},{"title":"Сокращение стимулов уменьшает нежелательное поведение","description":"Удаление триггеров снижает вероятность возобновления"},{"title":"Самоконтроль — временная стратегия","description":"Нужно настраивать среду так, чтобы искушений не было"}]}}
|
||||||
|
- Применение: {"application":{"techniques":[{"name":"Снижение доступности стимула","goal":"Уменьшение вероятности повторения нежелательной привычки за счёт удаления триггеров","context_example":"Вечер, когда тянет залипнуть в телефон","steps":["Определите стимул","Уберите объект из зоны видимости","Запишите дату изменения"],"client_phrase":"Уберите источник искушения из среды"}]}}
|
||||||
|
|
||||||
|
Оригинальный текст главы (выдержка): В 1971 году два американских конгрессмена выяснили, что более 15% солдат во Вьетнаме имели зависимость от героина. Ли Робинс обнаружил, что только 5% наркозависимых солдат снова начинали принимать героин в течение первого года после возвращения — девять из десяти избавлялись от зависимости после смены окружения. Зависимость может спонтанно исчезнуть при полной смене окружения: во Вьетнаме солдаты были в окружении стимулов, провоцировавших героин; в США — в среде без этих стимулов. Как только менялся контекст, менялась и привычка. Исследования показывают: «дисциплинированные» люди лучше структурируют жизнь так, чтобы не требовать героической силы воли. Люди с развитым самоконтролем меньше нуждаются в его применении. Способ развить качества — создать дисциплинированную среду. Привычка, закодированная в мозгу, «готова к использованию» при соответствующей ситуации. Ученые называют это «желание, вызванное стимулом»: внешний триггер вызывает навязчивое стремление повторить привычку. Вы можете избавиться от привычки, но не забыть ее. Противостояние искушению — неэффективная долгосрочная стратегия. Надёжный подход — искоренение плохих привычек в исходной точке: снизить воздействие стимула. Оставьте телефон в другой комнате; уберите телевизор из спальни. Обратная трактовка первого закона: сделать неочевидным то, что мешает. Самоконтроль — краткосрочная стратегия. Секрет самоконтроля: стимулы хороших привычек — очевидными, плохих — незаметными. Дурные привычки аутокаталитичны: процесс подпитывает сам себя. Подкрепление усиливает вероятность повторения действия.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЗАДАЧА
|
||||||
|
|
||||||
|
Проверь каждый тег. В `removed` попадают **только** теги без опоры в главе и в анализе или противоречащие смыслу главы.
|
||||||
|
|
||||||
|
1. **Опора в анализе:** если тег есть в анализе (framework.terms, названия принципов/инсайтов/техник, цепочки cause–mechanism–result) — **не снимать**; при необходимости только **понизить** confidence. Снимать только при отсутствии связи с главой/анализом или при противоречии.
|
||||||
|
|
||||||
|
2. **«Слишком общий» — не повод снимать:** тег, входящий в framework (terms, principles) или в описание техник/инсайтов, не снимать как «общий»; только понизить confidence при необходимости. Снимать — только если тег реально не связан с главой или противоречит анализу.
|
||||||
|
|
||||||
|
3. **При сомнении — оставлять:** если не уверен, снимать тег или нет — **оставлять** тег и при необходимости понизить confidence. В `removed` — только явно нерелевантные теги.
|
||||||
|
|
||||||
|
**Confidence:** только **понижать** или оставлять без изменений; **не повышать**. Шкала для понижения: 0.7–0.89 — второстепенно; 0.5–0.69 — только упомянуто.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## СТРОГИЕ ПРАВИЛА
|
||||||
|
|
||||||
|
1. Не добавляй новых тегов и не меняй формулировки тегов — только оставляй/снимай и обновляй confidence. Confidence не повышай — только понижай или оставляй как во входе.
|
||||||
|
2. Снятые теги перечисляй в блоке `removed`: поля `tag`, `category` (principle | psychology | method | result | context), `reason` (кратко, почему снят). В `removed` — только теги без опоры в главе и анализе или противоречащие смыслу.
|
||||||
|
3. В `tags` сохраняй ту же структуру по категориям (ключи на английском); пустые категории — пустой массив `[]`.
|
||||||
|
4. Ответ — только JSON, без вводных фраз и пояснений.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ФОРМАТ ОТВЕТА
|
||||||
|
|
||||||
|
СТРОГО один JSON-объект без комментариев и markdown:
|
||||||
|
|
||||||
|
{
|
||||||
|
"tags": {
|
||||||
|
"principle": [
|
||||||
|
{ "tag": "строка тега без изменений", "confidence": 0.95 }
|
||||||
|
],
|
||||||
|
"psychology": [],
|
||||||
|
"method": [],
|
||||||
|
"result": [],
|
||||||
|
"context": []
|
||||||
|
},
|
||||||
|
"removed": [
|
||||||
|
{
|
||||||
|
"tag": "формулировка снятого тега",
|
||||||
|
"category": "principle | psychology | method | result | context",
|
||||||
|
"reason": "краткая причина снятия в 1 предложении"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
- Ключи в `tags` — английские (principle, psychology, method, result, context). В каждом элементе `tag` — строка в точности как во входе.
|
||||||
|
- Блок `removed` — все теги, снятые при валидации; если ничего не снято — пустой массив `[]`.
|
||||||
|
|
||||||
|
Верни только этот объект — ничего до и после.
|
||||||
34
4_валидация_тегов/выход_valid_tag.json
Normal file
34
4_валидация_тегов/выход_valid_tag.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"tags": {
|
||||||
|
"principle": [
|
||||||
|
{ "tag": "среда формирует поведение", "confidence": 0.95 },
|
||||||
|
{ "tag": "привычки не исчезают", "confidence": 0.92 },
|
||||||
|
{ "tag": "самоконтроль краткосрочен", "confidence": 0.9 },
|
||||||
|
{ "tag": "дисциплина через среду", "confidence": 0.9 },
|
||||||
|
{ "tag": "негативные эмоции усиливают поведение", "confidence": 0.85 }
|
||||||
|
],
|
||||||
|
"psychology": [
|
||||||
|
{ "tag": "стимул", "confidence": 0.95 },
|
||||||
|
{ "tag": "привычка", "confidence": 0.95 },
|
||||||
|
{ "tag": "желание вызванное стимулом", "confidence": 0.9 },
|
||||||
|
{ "tag": "аутокаталитический процесс", "confidence": 0.85 },
|
||||||
|
{ "tag": "подкрепление", "confidence": 0.8 }
|
||||||
|
],
|
||||||
|
"method": [
|
||||||
|
{ "tag": "снижение доступности стимула", "confidence": 0.95 },
|
||||||
|
{ "tag": "настройка среды", "confidence": 0.92 },
|
||||||
|
{ "tag": "устранение триггеров", "confidence": 0.9 }
|
||||||
|
],
|
||||||
|
"result": [
|
||||||
|
{ "tag": "уменьшение вредных привычек", "confidence": 0.95 },
|
||||||
|
{ "tag": "устойчивое поведение", "confidence": 0.9 },
|
||||||
|
{ "tag": "снижение искушений", "confidence": 0.85 }
|
||||||
|
],
|
||||||
|
"context": [
|
||||||
|
{ "tag": "поведенческая психология", "confidence": 0.95 },
|
||||||
|
{ "tag": "привычки", "confidence": 0.92 },
|
||||||
|
{ "tag": "атомные привычки", "confidence": 0.9 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"removed": []
|
||||||
|
}
|
||||||
29
5_мерж_анализа_и_тегов/README.md
Normal file
29
5_мерж_анализа_и_тегов/README.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Мерж анализа и тегов (шаг 5)
|
||||||
|
|
||||||
|
Объединение выхода 2b (финальная валидация согласованности) и выхода 4 (валидация тегов) в один JSON. Этапы 2b и 4 разнесены по времени; шаг 5 выполняется после того, как оба результата готовы.
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
| Источник | Файл | Содержимое |
|
||||||
|
|----------|------|------------|
|
||||||
|
| 2b | merge.json | framework, insights, application, limitations |
|
||||||
|
| 4 | выход_valid_tag.json | tags по категориям, removed |
|
||||||
|
| 1 (опционально) | вход_главы.json | book_id, chapter_id, chapter_number, chapter_title, book_title, author — для шага 7 |
|
||||||
|
|
||||||
|
## Выход
|
||||||
|
|
||||||
|
Один JSON: все поля анализа + `tags`, `removed`. Если задан `--input-chapter`, в выход добавляются метаданные главы/книги (book_id, chapter_id, chapter_number, chapter_title, book_title, author). Этот документ передаётся в шаг 6 (генерация эмбеддингов) и в шаг 7 (payload Qdrant).
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 merge_analysis_tags.py <merge.json> <выход_valid_tag.json> [--input-chapter вход_главы.json] [-o выход.json]
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример (с метаданными для шага 7):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 merge_analysis_tags.py ../2b_финальная_валидация_согласованности/merge.json ../4_валидация_тегов/выход_valid_tag.json --input-chapter ../1_анализ_главы/вход_главы.example.json -o merged_with_tags.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Без `-o` результат выводится в stdout.
|
||||||
127
5_мерж_анализа_и_тегов/merge_analysis_tags.py
Normal file
127
5_мерж_анализа_и_тегов/merge_analysis_tags.py
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Этап 5: мерж валидированного анализа главы (2b) и валидированных тегов (4).
|
||||||
|
|
||||||
|
Вход:
|
||||||
|
- merge.json (2b): framework, insights, application, limitations
|
||||||
|
- выход_valid_tag.json (4): tags по категориям, removed
|
||||||
|
|
||||||
|
Выход: один JSON с анализом и тегами для передачи в шаг 6 (генерация эмбеддингов).
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def load_json(path: Path) -> Any:
|
||||||
|
"""Загружает JSON из файла."""
|
||||||
|
with open(path, encoding="utf-8") as f:
|
||||||
|
return json.load(f)
|
||||||
|
|
||||||
|
|
||||||
|
CHAPTER_META_KEYS = ("book_id", "chapter_id", "chapter_number", "chapter_title", "book_title", "author", "chapter_text")
|
||||||
|
|
||||||
|
|
||||||
|
def merge_analysis_and_tags(
|
||||||
|
analysis: dict[str, Any],
|
||||||
|
tags_doc: dict[str, Any],
|
||||||
|
input_chapter: dict[str, Any] | None = None,
|
||||||
|
) -> dict[str, Any]:
|
||||||
|
"""
|
||||||
|
Объединяет анализ главы и валидированные теги в один документ.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
analysis: Результат 2b (framework, insights, application, limitations).
|
||||||
|
tags_doc: Результат 4 (tags по категориям, removed).
|
||||||
|
input_chapter: Опционально — вход этапа 1 (book_id, chapter_id, chapter_number, chapter_title, book_title, author).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Документ с полями анализа, tags, removed и при наличии — метаданными главы/книги.
|
||||||
|
"""
|
||||||
|
result = dict(analysis)
|
||||||
|
result["tags"] = tags_doc.get("tags", {})
|
||||||
|
result["removed"] = tags_doc.get("removed", [])
|
||||||
|
if input_chapter:
|
||||||
|
for key in CHAPTER_META_KEYS:
|
||||||
|
if key in input_chapter and input_chapter[key] is not None:
|
||||||
|
result[key] = input_chapter[key]
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
"""Точка входа CLI."""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Мерж валидированного анализа (2b) и валидированных тегов (4) в один JSON (этап 5).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"analysis",
|
||||||
|
type=Path,
|
||||||
|
help="Путь к merge.json (выход 2b).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"tags",
|
||||||
|
type=Path,
|
||||||
|
help="Путь к выход_valid_tag.json (выход 4).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--input-chapter",
|
||||||
|
type=Path,
|
||||||
|
default=None,
|
||||||
|
help="Путь к входному JSON этапа 1 (вход_главы) — book_id, chapter_id, chapter_number, chapter_title, book_title, author, chapter_text. Если задан, эти поля попадают в выход для шагов 7 и 8.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-o",
|
||||||
|
"--output",
|
||||||
|
type=Path,
|
||||||
|
default=None,
|
||||||
|
help="Путь к выходному JSON. По умолчанию — stdout.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--indent",
|
||||||
|
type=int,
|
||||||
|
default=2,
|
||||||
|
help="Отступ для форматирования JSON (по умолчанию 2).",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.analysis.exists():
|
||||||
|
print(f"Ошибка: файл не найден: {args.analysis}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
if not args.tags.exists():
|
||||||
|
print(f"Ошибка: файл не найден: {args.tags}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
analysis = load_json(args.analysis)
|
||||||
|
tags_doc = load_json(args.tags)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Ошибка разбора JSON: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
input_chapter = None
|
||||||
|
if args.input_chapter is not None:
|
||||||
|
if not args.input_chapter.exists():
|
||||||
|
print(f"Ошибка: файл не найден: {args.input_chapter}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
try:
|
||||||
|
input_chapter = load_json(args.input_chapter)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Ошибка разбора input-chapter JSON: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
merged = merge_analysis_and_tags(analysis, tags_doc, input_chapter)
|
||||||
|
payload = json.dumps(merged, ensure_ascii=False, indent=args.indent)
|
||||||
|
|
||||||
|
if args.output is None:
|
||||||
|
print(payload)
|
||||||
|
else:
|
||||||
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
args.output.write_text(payload, encoding="utf-8")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
255
5_мерж_анализа_и_тегов/merged_with_tags.json
Normal file
255
5_мерж_анализа_и_тегов/merged_with_tags.json
Normal file
File diff suppressed because one or more lines are too long
35
6_генерация_эмбеддингов/README.md
Normal file
35
6_генерация_эмбеддингов/README.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Генерация эмбеддингов (шаг 6)
|
||||||
|
|
||||||
|
Отдельный шаг пайплайна после мержа анализа и тегов (шаг 5). В вектор превращается **валидированный анализ главы** (каркас, инсайты, применение), а не сырой текст — поиск идёт по смыслу, а не по формулировкам.
|
||||||
|
|
||||||
|
## Модель
|
||||||
|
|
||||||
|
- **По умолчанию:** **BAAI/bge-m3** (bge-m3). Мультиязычная модель, хорошая поддержка русского; размерность вектора **1024**, лимит контекста **8192 токенов** — полный анализ главы обычно укладывается без обрезки. Размер ~1.2GB, ~5–15 сек на главу.
|
||||||
|
- **Лимит входа:** 8192 токенов (bge-m3). При превышении — стратегия из `embed_input_spec.txt` (truncation или chunk + агрегация).
|
||||||
|
- **Альтернативы:** nomic-embed-text, evilfreelancer/enbeddrus (для более лёгкого режима). Модель задаётся конфигом; при смене — пересоздание коллекций Qdrant (размерность 1024 для bge-m3).
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
Выход шага 5 (мерж): валидированный анализ главы (framework, insights, application) — сериализуется в текст по спецификации `embed_input_spec.txt`. Теги в вектор не входят; они хранятся в payload Qdrant для фильтрации.
|
||||||
|
|
||||||
|
## Выход
|
||||||
|
|
||||||
|
Вектор эмбеддинга фиксированной размерности (**1024** для bge-m3). Сохраняется в Qdrant в коллекции `chapter_analyses` (коллекция создаётся с size=1024) вместе с payload (book_id, chapter_id, validation_score, tags и т.д.).
|
||||||
|
|
||||||
|
## Спецификация входа
|
||||||
|
|
||||||
|
| Файл | Назначение |
|
||||||
|
|-----------------------|----------------------------------------------------------------------------|
|
||||||
|
| embed_input_spec.txt | Рецепт построения текста для эмбеддинга: какие поля, порядок, приоритет при truncation |
|
||||||
|
|
||||||
|
## Подстановки при построении текста
|
||||||
|
|
||||||
|
- `{framework}` — сериализованный блок framework (принципы, terms, chains)
|
||||||
|
- `{insights}` — сериализованный блок insights
|
||||||
|
- `{application}` — сериализованный блок application
|
||||||
|
|
||||||
|
Ограничения и limitations в эмбеддинг по умолчанию не включаются (опционально — в конфиге). Теги — только в payload, не в тексте для эмбеддинга.
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
Вызывается после шага 5 (мерж анализа и тегов). Модель задаётся конфигом (env/конфиг); смена модели не меняет формат хранения в Qdrant, при смене — пересчёт эмбеддингов по необходимости.
|
||||||
231
6_генерация_эмбеддингов/embed_cli.py
Normal file
231
6_генерация_эмбеддингов/embed_cli.py
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
CLI для получения эмбеддинга по JSON шага 5 (мерж анализа и тегов).
|
||||||
|
|
||||||
|
На вход — путь к JSON-файлу, сформированному на этапе 5 (merged_with_tags.json),
|
||||||
|
и имя модели. Текст для эмбеддинга собирается из блоков framework, insights, application
|
||||||
|
по спецификации embed_input_spec.txt. На выход — вектор.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import urllib.error
|
||||||
|
import urllib.request
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def _serialize_framework(fw: dict[str, Any]) -> str:
|
||||||
|
"""Собирает текст секции FRAMEWORK из JSON блока framework."""
|
||||||
|
parts: list[str] = []
|
||||||
|
principles = fw.get("principles") or []
|
||||||
|
for p in principles:
|
||||||
|
line = f"Принцип: {p.get('title', '')}. Описание: {p.get('description', '')}."
|
||||||
|
if p.get("example"):
|
||||||
|
line += f" Пример: {p['example']}."
|
||||||
|
parts.append(line)
|
||||||
|
for chain in p.get("chains") or []:
|
||||||
|
c_line = "Причина: {} Механизм: {} Результат: {}.".format(
|
||||||
|
chain.get("cause", ""),
|
||||||
|
chain.get("mechanism", ""),
|
||||||
|
chain.get("result", ""),
|
||||||
|
)
|
||||||
|
parts.append(c_line)
|
||||||
|
terms = fw.get("terms") or {}
|
||||||
|
if terms:
|
||||||
|
terms_str = " ".join(f"{k} — {v}" for k, v in terms.items())
|
||||||
|
parts.append(f"Термины: {terms_str}.")
|
||||||
|
return "\n".join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
def _serialize_insights(insights: list[Any]) -> str:
|
||||||
|
"""Собирает текст секции INSIGHTS."""
|
||||||
|
parts: list[str] = []
|
||||||
|
for i in insights:
|
||||||
|
line = f"Инсайт: {i.get('title', '')}. {i.get('description', '')}."
|
||||||
|
if i.get("example"):
|
||||||
|
line += f" Пример: {i['example']}."
|
||||||
|
parts.append(line)
|
||||||
|
return "\n".join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
def _serialize_application(app: dict[str, Any]) -> str:
|
||||||
|
"""Собирает текст секции APPLICATION из блока application."""
|
||||||
|
parts: list[str] = []
|
||||||
|
techniques = app.get("techniques") or []
|
||||||
|
for t in techniques:
|
||||||
|
line = f"Техника: {t.get('name', '')}. Цель: {t.get('goal', '')}."
|
||||||
|
if t.get("steps"):
|
||||||
|
steps = t["steps"] if isinstance(t["steps"], list) else [t["steps"]]
|
||||||
|
line += f" Шаги: {'; '.join(steps)}."
|
||||||
|
if t.get("context_example"):
|
||||||
|
line += f" Контекст: {t['context_example']}."
|
||||||
|
parts.append(line)
|
||||||
|
return "\n".join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
def merged_json_to_embed_text(merged: dict[str, Any]) -> str:
|
||||||
|
"""
|
||||||
|
Собирает текст для эмбеддинга из JSON шага 5 по embed_input_spec.txt.
|
||||||
|
|
||||||
|
Входят только блоки framework, insights, application. Порядок секций:
|
||||||
|
FRAMEWORK, INSIGHTS, APPLICATION.
|
||||||
|
Limitations и теги не включаются: теги хранятся в payload Qdrant для фильтрации,
|
||||||
|
вектор строится по смыслу (принципы, инсайты, техники), не по тегам.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
merged: Документ из шага 5 (merge.json + выход_valid_tag.json).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Нормализованная строка для подачи в модель эмбеддингов.
|
||||||
|
"""
|
||||||
|
fw = merged.get("framework") or {}
|
||||||
|
insights = merged.get("insights") or []
|
||||||
|
app = merged.get("application") or {}
|
||||||
|
|
||||||
|
framework_text = _serialize_framework(fw)
|
||||||
|
insights_text = _serialize_insights(insights)
|
||||||
|
application_text = _serialize_application(app)
|
||||||
|
|
||||||
|
sections = [
|
||||||
|
"FRAMEWORK",
|
||||||
|
framework_text,
|
||||||
|
"INSIGHTS",
|
||||||
|
insights_text,
|
||||||
|
"APPLICATION",
|
||||||
|
application_text,
|
||||||
|
]
|
||||||
|
text = "\n\n".join(sections)
|
||||||
|
# Нормализация: схлопнуть множественные пробелы и переносы, обрезать по краям
|
||||||
|
text = re.sub(r"[ \t]+", " ", text)
|
||||||
|
text = re.sub(r"\n\s*\n", "\n\n", text)
|
||||||
|
return text.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def get_embedding(
|
||||||
|
base_url: str,
|
||||||
|
model: str,
|
||||||
|
text: str,
|
||||||
|
) -> list[float]:
|
||||||
|
"""
|
||||||
|
Запрашивает эмбеддинг текста у OpenAI-совместимого API.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
base_url: Базовый URL API (например http://localhost:1234/v1).
|
||||||
|
model: Имя модели эмбеддингов.
|
||||||
|
text: Текст для эмбеддинга.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Вектор эмбеддинга (список float).
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
urllib.error.HTTPError: При ошибке HTTP.
|
||||||
|
ValueError: Если в ответе нет ожидаемой структуры.
|
||||||
|
"""
|
||||||
|
url = f"{base_url.rstrip('/')}/embeddings"
|
||||||
|
payload = {
|
||||||
|
"model": model,
|
||||||
|
"input": text,
|
||||||
|
}
|
||||||
|
body = json.dumps(payload).encode("utf-8")
|
||||||
|
req = urllib.request.Request(
|
||||||
|
url,
|
||||||
|
data=body,
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
|
method="POST",
|
||||||
|
)
|
||||||
|
with urllib.request.urlopen(req, timeout=120) as resp:
|
||||||
|
data: dict[str, Any] = json.loads(resp.read().decode("utf-8"))
|
||||||
|
if "data" not in data or not data["data"]:
|
||||||
|
raise ValueError("В ответе API нет поля data с эмбеддингом")
|
||||||
|
embedding = data["data"][0].get("embedding")
|
||||||
|
if not embedding:
|
||||||
|
raise ValueError("В ответе API нет поля embedding")
|
||||||
|
return list(embedding)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
"""Точка входа CLI."""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Эмбеддинг по JSON шага 5 (мерж анализа и тегов). На вход — JSON-файл, на выход — вектор.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"input_json",
|
||||||
|
type=Path,
|
||||||
|
help="Путь к JSON-файлу шага 5 (merged_with_tags.json).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"model",
|
||||||
|
help="Имя модели эмбеддингов (например text-embedding-bge-m3).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--base-url",
|
||||||
|
default="http://localhost:1234/v1",
|
||||||
|
help="Базовый URL API (по умолчанию LM Studio).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-o",
|
||||||
|
"--output",
|
||||||
|
type=Path,
|
||||||
|
default=None,
|
||||||
|
help="Путь к файлу для записи вектора (JSON). По умолчанию — stdout.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--format",
|
||||||
|
choices=("json", "compact"),
|
||||||
|
default="json",
|
||||||
|
help="Формат вывода: json — массив, compact — числа через пробел.",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.input_json.exists():
|
||||||
|
print(f"Ошибка: файл не найден: {args.input_json}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(args.input_json, encoding="utf-8") as f:
|
||||||
|
merged = json.load(f)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Ошибка разбора JSON: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
text = merged_json_to_embed_text(merged)
|
||||||
|
if not text:
|
||||||
|
print("Ошибка: текст для эмбеддинга пуст (нет framework/insights/application).", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
vector = get_embedding(args.base_url, args.model, text)
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
print(f"Ошибка HTTP {e.code}: {e.reason}", file=sys.stderr)
|
||||||
|
if e.fp:
|
||||||
|
try:
|
||||||
|
body = e.fp.read().decode("utf-8")
|
||||||
|
print(body[:500], file=sys.stderr)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return 1
|
||||||
|
except urllib.error.URLError as e:
|
||||||
|
print(f"Ошибка запроса: {e.reason}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
except ValueError as e:
|
||||||
|
print(f"Ошибка: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if args.format == "json":
|
||||||
|
payload = json.dumps(vector, ensure_ascii=False)
|
||||||
|
else:
|
||||||
|
payload = " ".join(str(x) for x in vector)
|
||||||
|
|
||||||
|
if args.output is None:
|
||||||
|
print(payload)
|
||||||
|
else:
|
||||||
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
args.output.write_text(payload, encoding="utf-8")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
103
6_генерация_эмбеддингов/embed_input_spec.txt
Normal file
103
6_генерация_эмбеддингов/embed_input_spec.txt
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
# Спецификация входа для генерации эмбеддинга главы
|
||||||
|
|
||||||
|
Текст, который передаётся в модель эмбеддингов (по умолчанию BAAI/bge-m3), строится из **валидированного анализа главы**. Источник полей — JSON анализа по схеме из ARCHITECTURE_SUMMARY.md (блоки framework, insights, application). Цель — сохранить смысл для семантического поиска: по вектору ищут главы по смыслу (принципы, инсайты, техники), а не по сырому тексту.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧТО ВКЛЮЧАТЬ
|
||||||
|
|
||||||
|
В текст для эмбеддинга входят **только** блоки анализа:
|
||||||
|
|
||||||
|
1. **Framework (каркас):** принципы (title, description, example), terms (термин → краткое пояснение), при необходимости — ключевые цепочки cause–mechanism–result (кратко).
|
||||||
|
|
||||||
|
2. **Insights (инсайты):** title, description (и при необходимости example) по каждому инсайту. Без лишних метаполей.
|
||||||
|
|
||||||
|
3. **Application (применение):** техники — name, goal, steps (кратко или полный список), при необходимости context_example. То, по чему будет искаться «как это применить».
|
||||||
|
|
||||||
|
**Не включать:**
|
||||||
|
- Оригинальный текст главы.
|
||||||
|
- Limitations — по умолчанию не включать (опционально через конфиг).
|
||||||
|
- Теги — хранятся в payload Qdrant, в вектор не входят.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ПОРЯДОК И ФОРМАТ СЕРИАЛИЗАЦИИ
|
||||||
|
|
||||||
|
**Язык текста:** тот же, что и язык главы (или основной язык книги). Для мультиязычных коллекций — зафиксировать в конфиге (например, всегда русский / всегда язык главы).
|
||||||
|
|
||||||
|
**Порядок секций** (приоритет при truncation — сверху вниз):
|
||||||
|
|
||||||
|
```
|
||||||
|
FRAMEWORK
|
||||||
|
{framework}
|
||||||
|
|
||||||
|
INSIGHTS
|
||||||
|
{insights}
|
||||||
|
|
||||||
|
APPLICATION
|
||||||
|
{application}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Разделители:**
|
||||||
|
- Между секциями: заголовок секции (FRAMEWORK, INSIGHTS, APPLICATION) + пустая строка.
|
||||||
|
- Внутри секции: элементы разделять переносом строки или маркером «—»; не склеивать в один абзац. Пример: каждый принцип — с новой строки; каждый инсайт — с новой строки; каждая техника — с новой строки.
|
||||||
|
|
||||||
|
**Формат полей:** читаемый текст с подписями («Принцип: …», «Инсайт: …», «Техника: …») или компактный структурированный текст. Избегать сырого JSON без подписей; предпочитать человекочитаемую склейку.
|
||||||
|
|
||||||
|
**Подстановки при сборке:**
|
||||||
|
- `{framework}` — строка из JSON блока framework (принципы, terms; chains при необходимости).
|
||||||
|
- `{insights}` — строка из JSON блока insights.
|
||||||
|
- `{application}` — строка из JSON блока application.
|
||||||
|
|
||||||
|
**Пример сериализации (фрагмент):**
|
||||||
|
|
||||||
|
```
|
||||||
|
FRAMEWORK
|
||||||
|
|
||||||
|
Принцип: Правило двух минут. Описание: Если действие занимает меньше двух минут — сделай его сразу. Пример: ответ на короткий email, вынести мусор.
|
||||||
|
Термины: атомная привычка — сверхмалое действие, повторяемое ежедневно.
|
||||||
|
|
||||||
|
INSIGHTS
|
||||||
|
|
||||||
|
Инсайт: Привычки формируют идентичность. Мы меняемся не через цели, а через системы и повторяющиеся действия.
|
||||||
|
|
||||||
|
APPLICATION
|
||||||
|
|
||||||
|
Техника: Снижение барьера входа. Цель: начать действие без откладывания. Шаги: сформулировать версию привычки «на 2 минуты»; выполнять её в одно и то же время; после закрепления — расширять.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Нормализация перед подачей в модель:** схлопнуть множественные пробелы и переносы в один; обрезать пробелы по краям строк и в начале/конце итогового текста. Это уменьшает разброс из‑за форматирования.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЛИМИТ МОДЕЛИ И СТРАТЕГИЯ ПРЕВЫШЕНИЯ
|
||||||
|
|
||||||
|
- **Лимит (bge-m3):** 8192 токенов на вход. Полный анализ главы обычно укладывается. Для других моделей — лимит указывать в конфиге.
|
||||||
|
|
||||||
|
- **Если текст укладывается в лимит:** передать один сконкатенированный текст (FRAMEWORK + INSIGHTS + APPLICATION) в один вызов модели.
|
||||||
|
|
||||||
|
- **Если текст длиннее лимита** — выбрать одну из стратегий (зафиксировать в конфиге):
|
||||||
|
|
||||||
|
1. **truncate_priority:** обрезать текст до лимита. Сохранять в порядке приоритета: сначала APPLICATION (техники важны для поиска), затем INSIGHTS, затем FRAMEWORK. Отбрасывать с конца не поместившегося блока.
|
||||||
|
|
||||||
|
2. **truncate_per_section:** обрезать до лимита, сохраняя начало каждой секции. Сначала поместить начало FRAMEWORK, затем начало INSIGHTS, затем начало APPLICATION, пока не исчерпается лимит.
|
||||||
|
|
||||||
|
3. **chunk_aggregate:** разбить текст **последовательно** (с начала к концу) на чанки по лимиту; получить вектор для каждого чанка; усреднить векторы (или другой способ агрегации) и сохранить один итоговый вектор. Способ агрегации — в конфиге.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ВЫХОД
|
||||||
|
|
||||||
|
- Один вектор фиксированной размерности. Для bge-m3 — **1024**. При смене модели размерность меняется; коллекции Qdrant создавать с соответствующим size.
|
||||||
|
- Вектор сохраняется в Qdrant в коллекции `chapter_analyses`. Payload — по схеме из ARCHITECTURE_SUMMARY.md: bookId, chapterId, chapterNumber, chapterTitle, validationScore, tags и др. Текст анализа в payload при необходимости хранить отдельно или не хранить (по политике системы).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## КОНФИГУРАЦИЯ
|
||||||
|
|
||||||
|
- Модель эмбеддингов: env/конфиг (по умолчанию EMBED_MODEL=bge-m3).
|
||||||
|
- Лимит токенов модели: конфиг (для bge-m3: EMBED_MAX_TOKENS=8192).
|
||||||
|
- Размерность вектора: для bge-m3 — 1024; при смене модели задавать в конфиге и пересоздавать коллекции Qdrant.
|
||||||
|
- Стратегия при превышении: конфиг (truncate_priority | truncate_per_section | chunk_aggregate).
|
||||||
|
- Включение limitations в текст: опционально, конфиг (по умолчанию false).
|
||||||
|
- Язык сериализации (при мультиязычности): опционально, конфиг (например, chapter_lang | book_lang | fixed:ru).
|
||||||
33
7_сохранение_qdrant/README.md
Normal file
33
7_сохранение_qdrant/README.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Сохранение в Qdrant (шаг 7)
|
||||||
|
|
||||||
|
Сохранение вектора эмбеддинга (шаг 6) и метаданных в коллекцию `chapter_analyses`. Метаданные главы/книги (book_id, chapter_id, chapter_number, chapter_title, book_title, author) берутся из merged JSON — они попадают туда на шаге 5 при мерже с `--input-chapter` (входной JSON этапа 1).
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
- **merged JSON** (шаг 5): теги, анализ и метаданные главы/книги (book_id, chapter_id, chapter_number, chapter_title, book_title, author). Должны быть подмешаны при мерже через `--input-chapter` (вход этапа 1).
|
||||||
|
- **Вектор** (шаг 6): файл с JSON-массивом чисел или stdin.
|
||||||
|
- Опционально: `--validation-score`.
|
||||||
|
|
||||||
|
## Выход
|
||||||
|
|
||||||
|
Одна точка в коллекции Qdrant: id = `chapter_id`, vector = эмбеддинг, payload = bookId, chapterId, chapterNumber, chapterTitle, validationScore, tags, title, author (по схеме ARCHITECTURE_SUMMARY).
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Вектор из файла (merged должен содержать book_id, chapter_id, chapter_number, chapter_title из шага 5 с --input-chapter)
|
||||||
|
python3 save_to_qdrant.py merged_with_tags.json vector.json [--validation-score 0.95]
|
||||||
|
|
||||||
|
# Вектор из stdin (пайплайн с шагом 6)
|
||||||
|
python3 6_генерация_эмбеддингов/embed_cli.py merged_with_tags.json model_name \
|
||||||
|
| python3 7_сохранение_qdrant/save_to_qdrant.py merged_with_tags.json -
|
||||||
|
```
|
||||||
|
|
||||||
|
## Переменные окружения
|
||||||
|
|
||||||
|
| Переменная | По умолчанию | Описание |
|
||||||
|
|------------|--------------|----------|
|
||||||
|
| `QDRANT_URL` | `http://localhost:6333` | URL Qdrant |
|
||||||
|
| `QDRANT_COLLECTION_CHAPTER_ANALYSES` | `chapter_analyses` | Имя коллекции |
|
||||||
|
|
||||||
|
В Docker используйте `QDRANT_URL=http://qdrant:6333`.
|
||||||
204
7_сохранение_qdrant/save_to_qdrant.py
Normal file
204
7_сохранение_qdrant/save_to_qdrant.py
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Шаг 7: сохранение вектора эмбеддинга и payload в коллекцию Qdrant chapter_analyses.
|
||||||
|
|
||||||
|
Вход:
|
||||||
|
- merged JSON (шаг 5): теги, анализ и метаданные главы/книги (book_id, chapter_id,
|
||||||
|
chapter_number, chapter_title, book_title, author — из входного JSON этапа 1,
|
||||||
|
подмешанные при мерже через --input-chapter).
|
||||||
|
- вектор (файл или stdin): результат шага 6 (embed_cli.py).
|
||||||
|
|
||||||
|
Выход: одна точка в коллекции chapter_analyses (upsert по chapter_id).
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import urllib.error
|
||||||
|
import urllib.request
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def env(name: str, default: str) -> str:
|
||||||
|
"""Читает переменную окружения или default."""
|
||||||
|
return os.environ.get(name, default).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def tags_from_merged(merged: dict[str, Any]) -> list[dict[str, Any]]:
|
||||||
|
"""Преобразует теги из merged JSON в плоский список для payload (tag, category, confidence)."""
|
||||||
|
result: list[dict[str, Any]] = []
|
||||||
|
tags_block = merged.get("tags") or {}
|
||||||
|
for category, items in tags_block.items():
|
||||||
|
for item in items if isinstance(items, list) else []:
|
||||||
|
if isinstance(item, dict) and "tag" in item:
|
||||||
|
result.append({
|
||||||
|
"tag": item["tag"],
|
||||||
|
"category": category,
|
||||||
|
"confidence": item.get("confidence"),
|
||||||
|
})
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def payload_from_merged(merged: dict[str, Any], validation_score: float | None = None) -> dict[str, Any]:
|
||||||
|
"""
|
||||||
|
Собирает payload для Qdrant из merged JSON (шаг 5).
|
||||||
|
|
||||||
|
Ожидает в merged поля из входного JSON этапа 1: book_id, chapter_id,
|
||||||
|
chapter_number, chapter_title, book_title; опционально author.
|
||||||
|
"""
|
||||||
|
required = ("book_id", "chapter_id", "chapter_number", "chapter_title")
|
||||||
|
missing = [k for k in required if not merged.get(k)]
|
||||||
|
if missing:
|
||||||
|
raise ValueError(
|
||||||
|
f"В merged JSON отсутствуют поля (должны быть из входного JSON этапа 1, мерж с --input-chapter): {missing}"
|
||||||
|
)
|
||||||
|
payload: dict[str, Any] = {
|
||||||
|
"bookId": merged["book_id"],
|
||||||
|
"chapterId": merged["chapter_id"],
|
||||||
|
"chapterNumber": int(merged["chapter_number"]),
|
||||||
|
"chapterTitle": merged["chapter_title"],
|
||||||
|
"tags": tags_from_merged(merged),
|
||||||
|
}
|
||||||
|
if validation_score is not None:
|
||||||
|
payload["validationScore"] = validation_score
|
||||||
|
if merged.get("book_title") is not None:
|
||||||
|
payload["title"] = merged["book_title"]
|
||||||
|
if merged.get("author") is not None:
|
||||||
|
payload["author"] = merged["author"]
|
||||||
|
return payload
|
||||||
|
|
||||||
|
|
||||||
|
def load_vector(path: Path | None) -> list[float]:
|
||||||
|
"""Загружает вектор из файла или stdin (JSON-массив)."""
|
||||||
|
if path is None or str(path) == "-":
|
||||||
|
data = json.load(sys.stdin)
|
||||||
|
else:
|
||||||
|
with open(path, encoding="utf-8") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
if not isinstance(data, list):
|
||||||
|
raise ValueError("Вектор должен быть JSON-массивом чисел")
|
||||||
|
return [float(x) for x in data]
|
||||||
|
|
||||||
|
|
||||||
|
def upsert_point(
|
||||||
|
base_url: str,
|
||||||
|
collection: str,
|
||||||
|
point_id: str,
|
||||||
|
vector: list[float],
|
||||||
|
payload: dict[str, Any],
|
||||||
|
) -> dict[str, Any]:
|
||||||
|
"""Добавляет или обновляет одну точку в коллекции Qdrant."""
|
||||||
|
url = f"{base_url.rstrip('/')}/collections/{collection}/points?wait=true"
|
||||||
|
body = {
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"id": point_id,
|
||||||
|
"vector": vector,
|
||||||
|
"payload": payload,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
req_body = json.dumps(body).encode("utf-8")
|
||||||
|
req = urllib.request.Request(
|
||||||
|
url,
|
||||||
|
data=req_body,
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
|
method="PUT",
|
||||||
|
)
|
||||||
|
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||||
|
return json.loads(resp.read().decode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
"""Точка входа CLI."""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Шаг 7: сохранить вектор и payload в Qdrant (коллекция chapter_analyses).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"merged_json",
|
||||||
|
type=Path,
|
||||||
|
help="Путь к merged JSON (шаг 5) — для тегов и др.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"vector",
|
||||||
|
nargs="?",
|
||||||
|
default=None,
|
||||||
|
help="Путь к файлу с вектором (JSON-массив) или '-' для stdin.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--validation-score",
|
||||||
|
type=float,
|
||||||
|
default=None,
|
||||||
|
help="Оценка валидации (опционально).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--qdrant-url",
|
||||||
|
default=env("QDRANT_URL", "http://localhost:6333"),
|
||||||
|
help="URL Qdrant (по умолчанию из QDRANT_URL или localhost:6333).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--collection",
|
||||||
|
default=env("QDRANT_COLLECTION_CHAPTER_ANALYSES", "chapter_analyses"),
|
||||||
|
help="Имя коллекции.",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.merged_json.exists():
|
||||||
|
print(f"Ошибка: файл не найден: {args.merged_json}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(args.merged_json, encoding="utf-8") as f:
|
||||||
|
merged = json.load(f)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Ошибка разбора merged JSON: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
vector = load_vector(args.vector)
|
||||||
|
except (ValueError, FileNotFoundError) as e:
|
||||||
|
print(f"Ошибка загрузки вектора: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
payload = payload_from_merged(merged, validation_score=args.validation_score)
|
||||||
|
except ValueError as e:
|
||||||
|
print(f"Ошибка: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
chapter_id = merged["chapter_id"]
|
||||||
|
|
||||||
|
try:
|
||||||
|
result = upsert_point(
|
||||||
|
args.qdrant_url,
|
||||||
|
args.collection,
|
||||||
|
point_id=chapter_id,
|
||||||
|
vector=vector,
|
||||||
|
payload=payload,
|
||||||
|
)
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
print(f"Ошибка HTTP {e.code}: {e.reason}", file=sys.stderr)
|
||||||
|
if e.fp:
|
||||||
|
try:
|
||||||
|
print(e.fp.read().decode("utf-8")[:500], file=sys.stderr)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return 1
|
||||||
|
except urllib.error.URLError as e:
|
||||||
|
print(f"Ошибка запроса к Qdrant: {e.reason}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if result.get("status") == "ok":
|
||||||
|
print(f"Точка {chapter_id} сохранена в коллекцию {args.collection}.", flush=True)
|
||||||
|
return 0
|
||||||
|
print(f"Неожиданный ответ Qdrant: {result}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
45
8_сохранение_postgres/README.md
Normal file
45
8_сохранение_postgres/README.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Сохранение в Postgres (шаг 8)
|
||||||
|
|
||||||
|
Сохранение анализа главы и тегов в реляционную БД: книга, глава, запись в `chapter_analyses`, теги в `tags`, связи в `chapter_tags`. Вход — merged JSON (шаг 5) с метаданными из этапа 1.
|
||||||
|
|
||||||
|
## Схема
|
||||||
|
|
||||||
|
Перед первым запуском применить схему:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
psql -h localhost -U n8n -d n8n -f schema.sql
|
||||||
|
# или через docker: docker exec -i postgres psql -U n8n -d n8n < 8_сохранение_postgres/schema.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
Таблицы: `books`, `chapters`, `chapter_analyses`, `tags`, `chapter_tags` (см. ARCHITECTURE_SUMMARY.md).
|
||||||
|
|
||||||
|
## Вход
|
||||||
|
|
||||||
|
- **merged JSON** (шаг 5): book_id, chapter_id, chapter_number, chapter_title, book_title, author, framework, insights, application, limitations, tags. Метаданные должны быть подмешаны через `--input-chapter` на шаге 5.
|
||||||
|
|
||||||
|
## Действия
|
||||||
|
|
||||||
|
1. Upsert книги (books) по book_id.
|
||||||
|
2. Upsert главы (chapters) по chapter_id.
|
||||||
|
3. Insert/update анализа в chapter_analyses (analysis_result = framework + insights + application + limitations).
|
||||||
|
4. Get-or-create тегов в tags (name, category); связи в chapter_tags (chapter_id, tag_id, confidence, validated, source='ai_validation').
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt # один раз
|
||||||
|
python3 save_to_postgres.py 5_мерж_анализа_и_тегов/merged_with_tags.json [--validation-score 0.95]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Переменные окружения
|
||||||
|
|
||||||
|
| Переменная | По умолчанию | Описание |
|
||||||
|
|------------|--------------|----------|
|
||||||
|
| `DATABASE_URL` | — | Полный URL (postgresql://user:pass@host:port/dbname). Если задан, остальные игнорируются. |
|
||||||
|
| `POSTGRES_HOST` | localhost | Хост Postgres |
|
||||||
|
| `POSTGRES_PORT` | 5432 | Порт |
|
||||||
|
| `POSTGRES_USER` | n8n | Пользователь |
|
||||||
|
| `POSTGRES_PASSWORD` | n8n_password | Пароль |
|
||||||
|
| `POSTGRES_DB` | n8n | Имя БД |
|
||||||
|
|
||||||
|
В Docker используйте `POSTGRES_HOST=postgres` (имя сервиса).
|
||||||
1
8_сохранение_postgres/requirements.txt
Normal file
1
8_сохранение_postgres/requirements.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
psycopg2-binary>=2.9.9
|
||||||
252
8_сохранение_postgres/save_to_postgres.py
Normal file
252
8_сохранение_postgres/save_to_postgres.py
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Шаг 8: сохранение анализа главы и тегов в Postgres.
|
||||||
|
|
||||||
|
Вход: merged JSON (шаг 5) с полями book_id, chapter_id, chapter_number, chapter_title,
|
||||||
|
book_title, author, framework, insights, application, limitations, tags.
|
||||||
|
|
||||||
|
Действия: upsert книги и главы, запись в chapter_analyses, get-or-create тегов в tags,
|
||||||
|
связи в chapter_tags. Ожидается, что схема уже применена (schema.sql).
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import uuid
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
try:
|
||||||
|
import psycopg2
|
||||||
|
except ImportError:
|
||||||
|
print("Ошибка: установите psycopg2-binary (pip install psycopg2-binary).", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def env(name: str, default: str) -> str:
|
||||||
|
"""Читает переменную окружения или default."""
|
||||||
|
return os.environ.get(name, default).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def get_connection(database_url: str | None = None):
|
||||||
|
"""Создаёт подключение к Postgres."""
|
||||||
|
if database_url:
|
||||||
|
return psycopg2.connect(database_url)
|
||||||
|
host = env("POSTGRES_HOST", "localhost")
|
||||||
|
port = env("POSTGRES_PORT", "5432")
|
||||||
|
user = env("POSTGRES_USER", "n8n")
|
||||||
|
password = env("POSTGRES_PASSWORD", "n8n_password")
|
||||||
|
dbname = env("POSTGRES_DB", "n8n")
|
||||||
|
return psycopg2.connect(
|
||||||
|
host=host,
|
||||||
|
port=port,
|
||||||
|
user=user,
|
||||||
|
password=password,
|
||||||
|
dbname=dbname,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def upsert_book(conn, book_id: str, title: str | None, author: str | None) -> None:
|
||||||
|
"""Вставка или обновление книги."""
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(
|
||||||
|
"""
|
||||||
|
INSERT INTO books (id, title, author, updated_at)
|
||||||
|
VALUES (%s, %s, %s, NOW())
|
||||||
|
ON CONFLICT (id) DO UPDATE SET
|
||||||
|
title = COALESCE(EXCLUDED.title, books.title),
|
||||||
|
author = COALESCE(EXCLUDED.author, books.author),
|
||||||
|
updated_at = NOW()
|
||||||
|
""",
|
||||||
|
(book_id, title or "", author or ""),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def upsert_chapter(
|
||||||
|
conn,
|
||||||
|
chapter_id: str,
|
||||||
|
book_id: str,
|
||||||
|
chapter_number: int,
|
||||||
|
chapter_title: str | None,
|
||||||
|
content: str | None = None,
|
||||||
|
) -> None:
|
||||||
|
"""Вставка или обновление главы."""
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(
|
||||||
|
"""
|
||||||
|
INSERT INTO chapters (id, book_id, chapter_number, chapter_title, content)
|
||||||
|
VALUES (%s, %s, %s, %s, %s)
|
||||||
|
ON CONFLICT (id) DO UPDATE SET
|
||||||
|
book_id = EXCLUDED.book_id,
|
||||||
|
chapter_number = EXCLUDED.chapter_number,
|
||||||
|
chapter_title = COALESCE(EXCLUDED.chapter_title, chapters.chapter_title),
|
||||||
|
content = COALESCE(EXCLUDED.content, chapters.content)
|
||||||
|
""",
|
||||||
|
(chapter_id, book_id, chapter_number, chapter_title or "", content),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def upsert_chapter_analysis(
|
||||||
|
conn,
|
||||||
|
chapter_id: str,
|
||||||
|
analysis_result: dict[str, Any],
|
||||||
|
validation_score: float | None = None,
|
||||||
|
) -> None:
|
||||||
|
"""Вставка или обновление анализа главы."""
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(
|
||||||
|
"""
|
||||||
|
INSERT INTO chapter_analyses (chapter_id, analysis_result, validation_score, validated_at)
|
||||||
|
VALUES (%s, %s, %s, NOW())
|
||||||
|
ON CONFLICT (chapter_id) DO UPDATE SET
|
||||||
|
analysis_result = EXCLUDED.analysis_result,
|
||||||
|
validation_score = COALESCE(EXCLUDED.validation_score, chapter_analyses.validation_score),
|
||||||
|
validated_at = NOW()
|
||||||
|
""",
|
||||||
|
(chapter_id, json.dumps(analysis_result, ensure_ascii=False), validation_score),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_or_create_tag(conn, name: str, category: str) -> str:
|
||||||
|
"""Возвращает id тега по имени; создаёт тег при отсутствии."""
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute("SELECT id FROM tags WHERE name = %s", (name,))
|
||||||
|
row = cur.fetchone()
|
||||||
|
if row:
|
||||||
|
return str(row[0])
|
||||||
|
tag_id = str(uuid.uuid4())
|
||||||
|
cur.execute(
|
||||||
|
"INSERT INTO tags (id, name, category) VALUES (%s, %s, %s)",
|
||||||
|
(tag_id, name, category),
|
||||||
|
)
|
||||||
|
return tag_id
|
||||||
|
|
||||||
|
|
||||||
|
def upsert_chapter_tags(
|
||||||
|
conn,
|
||||||
|
chapter_id: str,
|
||||||
|
tags_flat: list[tuple[str, str, float | None]],
|
||||||
|
) -> None:
|
||||||
|
"""Связывает главу с тегами (get-or-create тегов, вставка в chapter_tags)."""
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
for name, category, confidence in tags_flat:
|
||||||
|
tag_id = get_or_create_tag(conn, name, category)
|
||||||
|
cur.execute(
|
||||||
|
"""
|
||||||
|
INSERT INTO chapter_tags (chapter_id, tag_id, confidence, validated, source)
|
||||||
|
VALUES (%s, %s, %s, true, 'ai_validation')
|
||||||
|
ON CONFLICT (chapter_id, tag_id) DO UPDATE SET
|
||||||
|
confidence = EXCLUDED.confidence,
|
||||||
|
validated = true
|
||||||
|
""",
|
||||||
|
(chapter_id, tag_id, confidence),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def tags_from_merged(merged: dict[str, Any]) -> list[tuple[str, str, float | None]]:
|
||||||
|
"""(name, category, confidence) из merged JSON."""
|
||||||
|
result: list[tuple[str, str, float | None]] = []
|
||||||
|
for category, items in (merged.get("tags") or {}).items():
|
||||||
|
for item in items if isinstance(items, list) else []:
|
||||||
|
if isinstance(item, dict) and "tag" in item:
|
||||||
|
result.append((
|
||||||
|
item["tag"],
|
||||||
|
category,
|
||||||
|
item.get("confidence"),
|
||||||
|
))
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def analysis_result_from_merged(merged: dict[str, Any]) -> dict[str, Any]:
|
||||||
|
"""Блок для chapter_analyses.analysis_result (framework, insights, application, limitations)."""
|
||||||
|
return {
|
||||||
|
"framework": merged.get("framework"),
|
||||||
|
"insights": merged.get("insights"),
|
||||||
|
"application": merged.get("application"),
|
||||||
|
"limitations": merged.get("limitations"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Шаг 8: сохранить анализ и теги в Postgres (merged JSON → books, chapters, chapter_analyses, tags, chapter_tags).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"merged_json",
|
||||||
|
type=Path,
|
||||||
|
help="Путь к merged JSON (шаг 5).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--validation-score",
|
||||||
|
type=float,
|
||||||
|
default=None,
|
||||||
|
help="Оценка валидации (опционально).",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--database-url",
|
||||||
|
default=env("DATABASE_URL", ""),
|
||||||
|
help="URL подключения к Postgres (или POSTGRES_HOST/USER/PASSWORD/DB).",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.merged_json.exists():
|
||||||
|
print(f"Ошибка: файл не найден: {args.merged_json}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(args.merged_json, encoding="utf-8") as f:
|
||||||
|
merged = json.load(f)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Ошибка разбора JSON: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
required = ("book_id", "chapter_id", "chapter_number", "chapter_title")
|
||||||
|
missing = [k for k in required if not merged.get(k)]
|
||||||
|
if missing:
|
||||||
|
print(f"Ошибка: в merged нет полей (нужен мерж с --input-chapter): {missing}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
database_url = args.database_url or None
|
||||||
|
try:
|
||||||
|
conn = get_connection(database_url)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка подключения к Postgres: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
upsert_book(
|
||||||
|
conn,
|
||||||
|
merged["book_id"],
|
||||||
|
merged.get("book_title"),
|
||||||
|
merged.get("author"),
|
||||||
|
)
|
||||||
|
upsert_chapter(
|
||||||
|
conn,
|
||||||
|
merged["chapter_id"],
|
||||||
|
merged["book_id"],
|
||||||
|
int(merged["chapter_number"]),
|
||||||
|
merged.get("chapter_title"),
|
||||||
|
merged.get("chapter_text"), # если подмешали в мерж
|
||||||
|
)
|
||||||
|
upsert_chapter_analysis(
|
||||||
|
conn,
|
||||||
|
merged["chapter_id"],
|
||||||
|
analysis_result_from_merged(merged),
|
||||||
|
args.validation_score,
|
||||||
|
)
|
||||||
|
upsert_chapter_tags(conn, merged["chapter_id"], tags_from_merged(merged))
|
||||||
|
conn.commit()
|
||||||
|
except Exception as e:
|
||||||
|
conn.rollback()
|
||||||
|
print(f"Ошибка: {e}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
finally:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
print(f"Глава {merged['chapter_id']} сохранена в Postgres (books, chapters, chapter_analyses, tags, chapter_tags).", flush=True)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
56
8_сохранение_postgres/schema.sql
Normal file
56
8_сохранение_postgres/schema.sql
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
-- Минимальная схема для этапа 8: книги, главы, анализы глав, теги, связи глава–тег.
|
||||||
|
-- Запускать один раз (например: psql -f schema.sql или через скрипт инициализации).
|
||||||
|
|
||||||
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS books (
|
||||||
|
id UUID PRIMARY KEY,
|
||||||
|
title VARCHAR(1024),
|
||||||
|
author VARCHAR(512),
|
||||||
|
metadata JSONB,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS chapters (
|
||||||
|
id UUID PRIMARY KEY,
|
||||||
|
book_id UUID NOT NULL REFERENCES books(id) ON DELETE CASCADE,
|
||||||
|
chapter_number INTEGER NOT NULL,
|
||||||
|
chapter_title VARCHAR(1024),
|
||||||
|
content TEXT,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS chapter_analyses (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
chapter_id UUID NOT NULL UNIQUE REFERENCES chapters(id) ON DELETE CASCADE,
|
||||||
|
analysis_result JSONB NOT NULL,
|
||||||
|
validation_score FLOAT,
|
||||||
|
validated_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS tags (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
name VARCHAR(512) NOT NULL UNIQUE,
|
||||||
|
category VARCHAR(64),
|
||||||
|
description TEXT,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS chapter_tags (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
chapter_id UUID NOT NULL REFERENCES chapters(id) ON DELETE CASCADE,
|
||||||
|
tag_id UUID NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
|
||||||
|
confidence FLOAT,
|
||||||
|
validated BOOLEAN DEFAULT true,
|
||||||
|
source VARCHAR(64) DEFAULT 'ai_validation',
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
UNIQUE (chapter_id, tag_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_chapters_book_id ON chapters(book_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_chapter_analyses_chapter_id ON chapter_analyses(chapter_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_chapter_tags_chapter_id ON chapter_tags(chapter_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_chapter_tags_tag_id ON chapter_tags(tag_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_tags_category ON tags(category);
|
||||||
1377
ARCHITECTURE_SUMMARY.md
Normal file
1377
ARCHITECTURE_SUMMARY.md
Normal file
File diff suppressed because it is too large
Load Diff
101
EPUB Parser Pipeline.json
Normal file
101
EPUB Parser Pipeline.json
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"name": "EPUB Parser Pipeline",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"path": "epub-upload",
|
||||||
|
"responseMode": "responseNode",
|
||||||
|
"options": {
|
||||||
|
"rawBody": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": "acc0fb8b-e1a9-41e8-a12b-a898a0b49f54",
|
||||||
|
"name": "Webhook",
|
||||||
|
"type": "n8n-nodes-base.webhook",
|
||||||
|
"typeVersion": 1.1,
|
||||||
|
"position": [
|
||||||
|
752,
|
||||||
|
32
|
||||||
|
],
|
||||||
|
"webhookId": "epub-upload-webhook"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"method": "POST",
|
||||||
|
"url": "http://epub-parser:5000/parse",
|
||||||
|
"sendBody": true,
|
||||||
|
"contentType": "multipart-form-data",
|
||||||
|
"bodyParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"parameterType": "formBinaryData",
|
||||||
|
"name": "data",
|
||||||
|
"inputDataFieldName": "data"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"id": "255ac328-6456-4ca1-89ea-6d3bb32af971",
|
||||||
|
"name": "FastAPI Request",
|
||||||
|
"type": "n8n-nodes-base.httpRequest",
|
||||||
|
"typeVersion": 4.2,
|
||||||
|
"position": [
|
||||||
|
1040,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"respondWith": "json",
|
||||||
|
"responseBody": "={{ $json }}",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"id": "2886fd4e-ebee-41ee-bc11-ca0e716b104f",
|
||||||
|
"name": "Respond to Webhook",
|
||||||
|
"type": "n8n-nodes-base.respondToWebhook",
|
||||||
|
"typeVersion": 1.1,
|
||||||
|
"position": [
|
||||||
|
1296,
|
||||||
|
32
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pinData": {},
|
||||||
|
"connections": {
|
||||||
|
"Webhook": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "FastAPI Request",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"FastAPI Request": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "Respond to Webhook",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": false,
|
||||||
|
"settings": {
|
||||||
|
"executionOrder": "v1",
|
||||||
|
"availableInMCP": false
|
||||||
|
},
|
||||||
|
"versionId": "e04355ab-d49d-4cfc-82b7-e40b90d72160",
|
||||||
|
"meta": {
|
||||||
|
"instanceId": "0627756eca94c4f84a889829afba19028b408eb6c4a023b2f7efeaae0c40f490"
|
||||||
|
},
|
||||||
|
"id": "JOTxekOa0aQppw5ckd9bC",
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
BIN
books/.DS_Store
vendored
Normal file
BIN
books/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
books/5e41a8b020384.epub
Normal file
BIN
books/5e41a8b020384.epub
Normal file
Binary file not shown.
BIN
books/Godin_S_Fioletovaya_Korova_Sdelay.epub
Normal file
BIN
books/Godin_S_Fioletovaya_Korova_Sdelay.epub
Normal file
Binary file not shown.
BIN
books/Molchanov_Strategiya-vverh-tormashkami (2).epub
Normal file
BIN
books/Molchanov_Strategiya-vverh-tormashkami (2).epub
Normal file
Binary file not shown.
BIN
books/Molchanov_Strategiya-vverh-tormashkami.epub
Normal file
BIN
books/Molchanov_Strategiya-vverh-tormashkami.epub
Normal file
Binary file not shown.
BIN
books/Terehov_A_Yetomoyibizne_Istina_V_Cene_Vse_O_Prakt.epub
Normal file
BIN
books/Terehov_A_Yetomoyibizne_Istina_V_Cene_Vse_O_Prakt.epub
Normal file
Binary file not shown.
BIN
books/overcoming-the-five-dysfunctions-of-a-team.epub
Normal file
BIN
books/overcoming-the-five-dysfunctions-of-a-team.epub
Normal file
Binary file not shown.
BIN
books/raskryvaya-gibkost-biznesa.epub
Normal file
BIN
books/raskryvaya-gibkost-biznesa.epub
Normal file
Binary file not shown.
@@ -0,0 +1,291 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Agile-трансформация. Раскрывая гибкость бизнеса",
|
||||||
|
"author": "Йорген Хессельберг",
|
||||||
|
"totalChapters": 35,
|
||||||
|
"totalCharacters": 727705,
|
||||||
|
"totalTokens": 302267
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "An Insider’s Guide to Agile Enterprise Transformation",
|
||||||
|
"characters": 14,
|
||||||
|
"tokens": 41,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Раскрывая гибкость бизнеса",
|
||||||
|
"characters": 33,
|
||||||
|
"tokens": 37,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "ИНФОРМАЦИЯОТ ИЗДАТЕЛЬСТВА",
|
||||||
|
"characters": 2007,
|
||||||
|
"tokens": 828,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "info.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Posv",
|
||||||
|
"characters": 110,
|
||||||
|
"tokens": 61,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "posv.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "ПРЕДИСЛОВИЕ БЬЯРТЕ БОГСНЕСА",
|
||||||
|
"characters": 2715,
|
||||||
|
"tokens": 1112,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "pre1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "ПРЕДИСЛОВИЕ РИЧАРДА ШЕРИДАНА",
|
||||||
|
"characters": 6254,
|
||||||
|
"tokens": 2529,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "pre2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "КОМУ СТОИТ ПРОЧИТАТЬ ЭТУ КНИГУ?",
|
||||||
|
"characters": 10176,
|
||||||
|
"tokens": 4096,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "vv.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "АРГУМЕНТЫ В ПОЛЬЗУ ГИБКОСТИ",
|
||||||
|
"characters": 297,
|
||||||
|
"tokens": 143,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "ПРОИСХОЖДЕНИЕ СОВРЕМЕННОГО МЕНЕДЖМЕНТА",
|
||||||
|
"characters": 57449,
|
||||||
|
"tokens": 23012,
|
||||||
|
"footnotesCount": 36,
|
||||||
|
"filePath": "G1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "РАЗРАБОТКА ГИБКОСТИ БИЗНЕСА: БАЛАНС ТРЕХ ВАЖНЫХ РЫЧАГОВ",
|
||||||
|
"characters": 65946,
|
||||||
|
"tokens": 26417,
|
||||||
|
"footnotesCount": 22,
|
||||||
|
"filePath": "G2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "ПЯТЬ ИЗМЕРЕНИЙ ГИБКОСТИ",
|
||||||
|
"characters": 230,
|
||||||
|
"tokens": 116,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "СОЗДАНИЕ ПРАВИЛЬНОГО ПРОДУКТА: ПРОДУКТЫ, КОТОРЫЕ ПОЛЮБЯТ ПОТРЕБИТЕЛИ",
|
||||||
|
"characters": 74330,
|
||||||
|
"tokens": 29780,
|
||||||
|
"footnotesCount": 32,
|
||||||
|
"filePath": "G3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "ФИЗИЧЕСКИЙ ДИЗАЙН РАБОЧЕГО МЕСТА",
|
||||||
|
"characters": 61729,
|
||||||
|
"tokens": 24719,
|
||||||
|
"footnotesCount": 14,
|
||||||
|
"filePath": "G4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "НЕЛЬЗЯ НЕДООЦЕНИВАТЬ ВАЖНОСТЬ ЛЮДЕЙ",
|
||||||
|
"characters": 51401,
|
||||||
|
"tokens": 20589,
|
||||||
|
"footnotesCount": 20,
|
||||||
|
"filePath": "G5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "РУКОВОДСТВО ПЯТОГО УРОВНЯ = ГИБКОЕ ЛИДЕРСТВО?",
|
||||||
|
"characters": 52810,
|
||||||
|
"tokens": 21156,
|
||||||
|
"footnotesCount": 18,
|
||||||
|
"filePath": "G6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "ВЗАИМОДЕЙСТВИЕ — «МЫ ПРЕУСПЕЛИ, РАБОТАЯ ВМЕСТЕ»",
|
||||||
|
"characters": 78382,
|
||||||
|
"tokens": 31385,
|
||||||
|
"footnotesCount": 37,
|
||||||
|
"filePath": "G7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "AGILE-ТРАНСФОРМАЦИЯ",
|
||||||
|
"characters": 329,
|
||||||
|
"tokens": 153,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "СОЗДАНИЕ РАБОЧЕЙ AGILE-ГРУППЫ В ОРГАНИЗАЦИИ",
|
||||||
|
"characters": 44146,
|
||||||
|
"tokens": 17691,
|
||||||
|
"footnotesCount": 10,
|
||||||
|
"filePath": "G8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "ОПЕРАЦИОННАЯ МОДЕЛЬ ГИБКОГО БИЗНЕСА",
|
||||||
|
"characters": 94436,
|
||||||
|
"tokens": 37803,
|
||||||
|
"footnotesCount": 23,
|
||||||
|
"filePath": "G9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "AGILE-ТРАНСФОРМАЦИЯ: СТРАТЕГИЧЕСКАЯ ДОРОЖНАЯ КАРТА",
|
||||||
|
"characters": 94378,
|
||||||
|
"tokens": 37787,
|
||||||
|
"footnotesCount": 16,
|
||||||
|
"filePath": "G10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "БЛАГОДАРНОСТИ",
|
||||||
|
"characters": 2967,
|
||||||
|
"tokens": 1209,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "thanks.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "ОБ АВТОРЕ",
|
||||||
|
"characters": 1179,
|
||||||
|
"tokens": 491,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "about.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ",
|
||||||
|
"characters": 2872,
|
||||||
|
"tokens": 2312,
|
||||||
|
"footnotesCount": 64,
|
||||||
|
"filePath": "note1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Глава 2",
|
||||||
|
"characters": 1880,
|
||||||
|
"tokens": 1516,
|
||||||
|
"footnotesCount": 38,
|
||||||
|
"filePath": "note2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Глава 3",
|
||||||
|
"characters": 2626,
|
||||||
|
"tokens": 2116,
|
||||||
|
"footnotesCount": 50,
|
||||||
|
"filePath": "note3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Глава 4",
|
||||||
|
"characters": 1578,
|
||||||
|
"tokens": 1275,
|
||||||
|
"footnotesCount": 24,
|
||||||
|
"filePath": "note4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Глава 5",
|
||||||
|
"characters": 2306,
|
||||||
|
"tokens": 1859,
|
||||||
|
"footnotesCount": 38,
|
||||||
|
"filePath": "note5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Глава 6",
|
||||||
|
"characters": 1817,
|
||||||
|
"tokens": 1467,
|
||||||
|
"footnotesCount": 36,
|
||||||
|
"filePath": "note6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Глава 7",
|
||||||
|
"characters": 3692,
|
||||||
|
"tokens": 2970,
|
||||||
|
"footnotesCount": 72,
|
||||||
|
"filePath": "note7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Глава 8",
|
||||||
|
"characters": 630,
|
||||||
|
"tokens": 515,
|
||||||
|
"footnotesCount": 16,
|
||||||
|
"filePath": "note8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Глава 9",
|
||||||
|
"characters": 2347,
|
||||||
|
"tokens": 1892,
|
||||||
|
"footnotesCount": 44,
|
||||||
|
"filePath": "note9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Глава 10",
|
||||||
|
"characters": 1801,
|
||||||
|
"tokens": 1456,
|
||||||
|
"footnotesCount": 30,
|
||||||
|
"filePath": "note10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ РЕДАКЦИИ",
|
||||||
|
"characters": 4320,
|
||||||
|
"tokens": 3484,
|
||||||
|
"footnotesCount": 50,
|
||||||
|
"filePath": "links.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "МИФ Бизнес",
|
||||||
|
"characters": 161,
|
||||||
|
"tokens": 86,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "business.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "НАД КНИГОЙ РАБОТАЛИ",
|
||||||
|
"characters": 357,
|
||||||
|
"tokens": 164,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "end.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,267 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Атомные привычки. Как приобрести хорошие привычки и избавиться от плохих",
|
||||||
|
"author": "Джеймс Клир",
|
||||||
|
"totalChapters": 32,
|
||||||
|
"totalCharacters": 387746,
|
||||||
|
"totalTokens": 155999
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Джеймс Клир Атомные привычки Как приобрести хорошие привычки и избавиться о плохих",
|
||||||
|
"characters": 82,
|
||||||
|
"tokens": 76,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "* * *",
|
||||||
|
"characters": 1038,
|
||||||
|
"tokens": 431,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Введение Моя история",
|
||||||
|
"characters": 19573,
|
||||||
|
"tokens": 7851,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Основные принципы Почему небольшие изменения приводят к грандиозным результатам",
|
||||||
|
"characters": 79,
|
||||||
|
"tokens": 76,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Удивительная сила атомных привычек",
|
||||||
|
"characters": 27731,
|
||||||
|
"tokens": 11119,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Как привычки формируют идентичность (и наоборот)",
|
||||||
|
"characters": 23868,
|
||||||
|
"tokens": 9580,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Четыре простых шага для формирования лучших привычек",
|
||||||
|
"characters": 19798,
|
||||||
|
"tokens": 7953,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Первый закон Придайте очевидности",
|
||||||
|
"characters": 33,
|
||||||
|
"tokens": 40,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Человек, который плохо выглядел",
|
||||||
|
"characters": 14776,
|
||||||
|
"tokens": 5936,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Лучший способ сформировать новую привычку",
|
||||||
|
"characters": 17468,
|
||||||
|
"tokens": 7017,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Значение мотивации преувеличено: важность окружения",
|
||||||
|
"characters": 18232,
|
||||||
|
"tokens": 7326,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Секрет самоконтроля",
|
||||||
|
"characters": 10117,
|
||||||
|
"tokens": 4067,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Второй закон Добавьте привлекательности",
|
||||||
|
"characters": 39,
|
||||||
|
"tokens": 44,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Как сделать привычку привлекательной",
|
||||||
|
"characters": 19890,
|
||||||
|
"tokens": 7984,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Роль семьи и друзей в формировании привычек",
|
||||||
|
"characters": 17527,
|
||||||
|
"tokens": 7041,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Как найти и устранить причины вредных привычек",
|
||||||
|
"characters": 15973,
|
||||||
|
"tokens": 6421,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-15.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Третий закон Упростите",
|
||||||
|
"characters": 9908,
|
||||||
|
"tokens": 3985,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-16.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Закон наименьшего усилия",
|
||||||
|
"characters": 17359,
|
||||||
|
"tokens": 6966,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-17.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Правило двух минут",
|
||||||
|
"characters": 11986,
|
||||||
|
"tokens": 4815,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-18.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Как сделать хорошие привычки неизбежными, а плохие – невозможными",
|
||||||
|
"characters": 12059,
|
||||||
|
"tokens": 4863,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-19.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Четвертый закон Привнесите удовольствие",
|
||||||
|
"characters": 39,
|
||||||
|
"tokens": 44,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-20.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Главное правило изменения поведения",
|
||||||
|
"characters": 20125,
|
||||||
|
"tokens": 8078,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-21.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Хорошие привычки каждый день",
|
||||||
|
"characters": 18060,
|
||||||
|
"tokens": 7249,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-22.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Как друзья могут помочь в овладении привычками",
|
||||||
|
"characters": 11540,
|
||||||
|
"tokens": 4648,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-23.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Правда о таланте (когда гены важны, а когда нет)",
|
||||||
|
"characters": 20896,
|
||||||
|
"tokens": 8391,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-24.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Правило Златовласки: как оставаться мотивированным в жизни и на работе",
|
||||||
|
"characters": 12960,
|
||||||
|
"tokens": 5226,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-25.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Обратная сторона хороших привычек",
|
||||||
|
"characters": 16591,
|
||||||
|
"tokens": 6663,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-26.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Заключение Секрет: как достичь долговременных результатов",
|
||||||
|
"characters": 4561,
|
||||||
|
"tokens": 1860,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-27.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Приложения",
|
||||||
|
"characters": 11535,
|
||||||
|
"tokens": 4632,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-28.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Благодарности",
|
||||||
|
"characters": 3878,
|
||||||
|
"tokens": 1570,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-29.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "От издательства",
|
||||||
|
"characters": 385,
|
||||||
|
"tokens": 174,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-30.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Примечания",
|
||||||
|
"characters": 9640,
|
||||||
|
"tokens": 3873,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,243 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Бизнес с нуля: Метод Lean Startup для быстрого тестирования идей и выбора бизнес-модели",
|
||||||
|
"author": "Эрик Рис",
|
||||||
|
"totalChapters": 29,
|
||||||
|
"totalCharacters": 501340,
|
||||||
|
"totalTokens": 201309
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Content03",
|
||||||
|
"characters": 5588,
|
||||||
|
"tokens": 2257,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content03.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Content04",
|
||||||
|
"characters": 16,
|
||||||
|
"tokens": 28,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content04.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Content0",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 21,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Content01",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 22,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content01.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Content02",
|
||||||
|
"characters": 832,
|
||||||
|
"tokens": 354,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content02.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Истоки системы «экономичный стартап»",
|
||||||
|
"characters": 20081,
|
||||||
|
"tokens": 8065,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content05.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "ВИДЕНИЕ",
|
||||||
|
"characters": 7,
|
||||||
|
"tokens": 23,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content_1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Как возникла система «экономичный стартап»",
|
||||||
|
"characters": 13962,
|
||||||
|
"tokens": 5618,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Кого можно назвать предпринимателем?",
|
||||||
|
"characters": 21001,
|
||||||
|
"tokens": 8432,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Кого можно назвать предпринимателем?",
|
||||||
|
"characters": 33221,
|
||||||
|
"tokens": 13320,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Хотите долгосрочных изменений? Экспериментируйте!",
|
||||||
|
"characters": 30391,
|
||||||
|
"tokens": 12193,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "САДИМСЯ ЗА РУЛЬ",
|
||||||
|
"characters": 8,
|
||||||
|
"tokens": 28,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content_2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "От видения к практике",
|
||||||
|
"characters": 5527,
|
||||||
|
"tokens": 2236,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Стратегия основана на предположениях",
|
||||||
|
"characters": 21948,
|
||||||
|
"tokens": 8811,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Тестирование",
|
||||||
|
"characters": 40666,
|
||||||
|
"tokens": 16288,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Как работает учет инноваций: три обучающих этапа",
|
||||||
|
"characters": 59200,
|
||||||
|
"tokens": 23717,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Учет инноваций ускоряет процесс",
|
||||||
|
"characters": 51652,
|
||||||
|
"tokens": 20690,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "НАБИРАЕМ СКОРОСТЬ",
|
||||||
|
"characters": 9,
|
||||||
|
"tokens": 28,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content_3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Как запустить механизм",
|
||||||
|
"characters": 5837,
|
||||||
|
"tokens": 2361,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Подход небольших партий в сфере предпринимательства",
|
||||||
|
"characters": 37655,
|
||||||
|
"tokens": 15101,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Как добиться роста?",
|
||||||
|
"characters": 29714,
|
||||||
|
"tokens": 11911,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Построение адаптивной организации",
|
||||||
|
"characters": 48018,
|
||||||
|
"tokens": 19239,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Создание инноваций",
|
||||||
|
"characters": 33465,
|
||||||
|
"tokens": 13412,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Эпилог: никаких потерь",
|
||||||
|
"characters": 22522,
|
||||||
|
"tokens": 9035,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Присоединяйтесь к движению",
|
||||||
|
"characters": 4440,
|
||||||
|
"tokens": 1805,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Список литературы",
|
||||||
|
"characters": 2753,
|
||||||
|
"tokens": 1126,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Благодарности",
|
||||||
|
"characters": 7794,
|
||||||
|
"tokens": 3141,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Link2",
|
||||||
|
"characters": 70,
|
||||||
|
"tokens": 46,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/link2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Link",
|
||||||
|
"characters": 4963,
|
||||||
|
"tokens": 2001,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/link.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
843
books/statistics/Вдохновленные_statistics.json
Normal file
843
books/statistics/Вдохновленные_statistics.json
Normal file
@@ -0,0 +1,843 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Вдохновленные",
|
||||||
|
"author": "Марти Каган",
|
||||||
|
"totalChapters": 104,
|
||||||
|
"totalCharacters": 493083,
|
||||||
|
"totalTokens": 201021
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Эту книгу хорошо дополняют:",
|
||||||
|
"characters": 147,
|
||||||
|
"tokens": 82,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "tb.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "HOW TO CREATE TECH PRODUCTS CUSTOMERS LOVE",
|
||||||
|
"characters": 20,
|
||||||
|
"tokens": 38,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "ВСЕ, ЧТО НУЖНО ЗНАТЬ ПРОДАКТ-МЕНЕДЖЕРУ",
|
||||||
|
"characters": 35,
|
||||||
|
"tokens": 43,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Информация от издательства",
|
||||||
|
"characters": 1508,
|
||||||
|
"tokens": 629,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "info.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Res",
|
||||||
|
"characters": 9202,
|
||||||
|
"tokens": 3696,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "res.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Epi",
|
||||||
|
"characters": 681,
|
||||||
|
"tokens": 288,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "epi.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "ПРЕДИСЛОВИЕ",
|
||||||
|
"characters": 4350,
|
||||||
|
"tokens": 1759,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "pre.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "УРОКИ ЛУЧШИХ ТЕХНОЛОГИЧЕСКИХ КОМПАНИЙ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 29,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Ch1 0",
|
||||||
|
"characters": 5429,
|
||||||
|
"tokens": 2189,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-0.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "КТО СТОИТ ЗА КАЖДЫМ ОТЛИЧНЫМ ПРОДУКТОМ",
|
||||||
|
"characters": 2367,
|
||||||
|
"tokens": 975,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "ВЫСОКОТЕХНОЛОГИЧНЫЕ ПРОДУКТЫ И СЕРВИСЫ",
|
||||||
|
"characters": 1535,
|
||||||
|
"tokens": 643,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "СТАРТАПЫ: КАК ДОСТИЧЬ СООТВЕТСТВИЯ «ПРОДУКТ — РЫНОК»",
|
||||||
|
"characters": 2288,
|
||||||
|
"tokens": 949,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "КОМПАНИИ НА СТАДИИ РОСТА: УСПЕШНОЕ МАСШТАБИРОВАНИЕ",
|
||||||
|
"characters": 2092,
|
||||||
|
"tokens": 870,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "КОРПОРАЦИИ: НЕПРЕРЫВНЫЕ ПРОДУКТОВЫЕ ИННОВАЦИИ",
|
||||||
|
"characters": 3080,
|
||||||
|
"tokens": 1264,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "ФУНДАМЕНТАЛЬНЫЕ ПРИЧИНЫ НЕУДАЧ В РАБОТЕ НАД ПРОДУКТОМ",
|
||||||
|
"characters": 13298,
|
||||||
|
"tokens": 5354,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "LEAN И AGILE И НЕ ТОЛЬКО",
|
||||||
|
"characters": 3944,
|
||||||
|
"tokens": 1600,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "НЕПРЕРЫВНОЕ ИССЛЕДОВАНИЕ И ВЫВЕДЕНИЕ ПРОДУКТА НА РЫНОК",
|
||||||
|
"characters": 9468,
|
||||||
|
"tokens": 3822,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "g8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "ПРАВИЛЬНЫЕ ЛЮДИ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 21,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Ch2 0",
|
||||||
|
"characters": 578,
|
||||||
|
"tokens": 250,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2-0.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "ПРОДУКТОВЫЕ КОМАНДЫ",
|
||||||
|
"characters": 293,
|
||||||
|
"tokens": 142,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2-01.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ СИЛЬНЫХ ПРОДУКТОВЫХ КОМАНД",
|
||||||
|
"characters": 13976,
|
||||||
|
"tokens": 5618,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "g9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "ДОСКОНАЛЬНОЕ ЗНАНИЕ ПОТРЕБИТЕЛЯ",
|
||||||
|
"characters": 22156,
|
||||||
|
"tokens": 8889,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "КОМПЛЕКСНЫЙ ОПЫТ ВЗАИМОДЕЙСТВИЯ",
|
||||||
|
"characters": 11519,
|
||||||
|
"tokens": 4634,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "ИНЖЕНЕРЫ-ПРОГРАММИСТЫ",
|
||||||
|
"characters": 6166,
|
||||||
|
"tokens": 2489,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "ПРОДУКТОВЫЙ МАРКЕТОЛОГ",
|
||||||
|
"characters": 4627,
|
||||||
|
"tokens": 1873,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "ВСПОМОГАТЕЛЬНЫЕ РОЛИ",
|
||||||
|
"characters": 4836,
|
||||||
|
"tokens": 1957,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "ЗНАКОМЬТЕСЬ: ДЖЕЙН МЭННИНГ ИЗ GOOGLE",
|
||||||
|
"characters": 3982,
|
||||||
|
"tokens": 1621,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g15.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "МАСШТАБИРОВАНИЕ: ПЕРСОНАЛ",
|
||||||
|
"characters": 807,
|
||||||
|
"tokens": 350,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2-02.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "ЛИДЕРСТВО В УПРАВЛЕНИИ ПРОДУКТОМ",
|
||||||
|
"characters": 6828,
|
||||||
|
"tokens": 2758,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g16.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "ДИРЕКТОР ПО ПРОДУКТУ",
|
||||||
|
"characters": 12891,
|
||||||
|
"tokens": 5179,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g17.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "ДИРЕКТОР ПО ТЕХНОЛОГИЯМ",
|
||||||
|
"characters": 5581,
|
||||||
|
"tokens": 2256,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g18.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "ОПЕРАЦИОННЫЙ МЕНЕДЖЕР С ТЕХНИЧЕСКИМИ НАВЫКАМИ",
|
||||||
|
"characters": 2045,
|
||||||
|
"tokens": 851,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g19.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "СТРУКТУРИРОВАНИЕ ПРОДУКТОВЫХ КОМАНД",
|
||||||
|
"characters": 18241,
|
||||||
|
"tokens": 7325,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g20.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "ЗНАКОМЬТЕСЬ: ЛИА ХИКМАН ИЗ ADOBE",
|
||||||
|
"characters": 7178,
|
||||||
|
"tokens": 2898,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g21.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "ПРАВИЛЬНЫЙ ПРОДУКТ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 22,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Ch3 0",
|
||||||
|
"characters": 220,
|
||||||
|
"tokens": 107,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3-0.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "ДОРОЖНЫЕ КАРТЫ ПРОДУКТА",
|
||||||
|
"characters": 2777,
|
||||||
|
"tokens": 1137,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3-01.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "ПРОБЛЕМЫ ДОРОЖНЫХ КАРТ ПРОДУКТА",
|
||||||
|
"characters": 4086,
|
||||||
|
"tokens": 1661,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g22.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "АЛЬТЕРНАТИВА ДОРОЖНЫМ КАРТАМ",
|
||||||
|
"characters": 10593,
|
||||||
|
"tokens": 4263,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g23.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "ВИДЕНИЕ ПРОДУКТА",
|
||||||
|
"characters": 157,
|
||||||
|
"tokens": 86,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3-02.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "ВИДЕНИЕ ПРОДУКТА И СТРАТЕГИЯ ЕГО РАЗВИТИЯ",
|
||||||
|
"characters": 8604,
|
||||||
|
"tokens": 3472,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g24.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ СОЗДАНИЯ ВИДЕНИЯ ПРОДУКТА",
|
||||||
|
"characters": 4099,
|
||||||
|
"tokens": 1667,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g25.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ СТРАТЕГИИ РАЗВИТИЯ ПРОДУКТА",
|
||||||
|
"characters": 2150,
|
||||||
|
"tokens": 889,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g26.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 44,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ ПРОДУКТА",
|
||||||
|
"characters": 1762,
|
||||||
|
"tokens": 725,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g27.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 45,
|
||||||
|
"chapterTitle": "ЦЕЛИ СОЗДАНИЯ ПРОДУКТА",
|
||||||
|
"characters": 2616,
|
||||||
|
"tokens": 1072,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3-03.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 46,
|
||||||
|
"chapterTitle": "ГЛАВА 28",
|
||||||
|
"characters": 3532,
|
||||||
|
"tokens": 1430,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g28.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 47,
|
||||||
|
"chapterTitle": "ЦЕЛИ ПРОДУКТОВОЙ КОМАНДЫ",
|
||||||
|
"characters": 5736,
|
||||||
|
"tokens": 2318,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g29.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 48,
|
||||||
|
"chapterTitle": "МАСШТАБИРОВАНИЕ: ПРОДУКТ",
|
||||||
|
"characters": 1140,
|
||||||
|
"tokens": 483,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch3-04.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 49,
|
||||||
|
"chapterTitle": "ЦЕЛИ СОЗДАНИЯ ПРОДУКТА И МАСШТАБИРОВАНИЕ",
|
||||||
|
"characters": 4576,
|
||||||
|
"tokens": 1861,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g30.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 50,
|
||||||
|
"chapterTitle": "ПРОДВИЖЕНИЕ ПРОДУКТА",
|
||||||
|
"characters": 5145,
|
||||||
|
"tokens": 2081,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g31.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 51,
|
||||||
|
"chapterTitle": "ЗНАКОМЬТЕСЬ: АЛЕКС ПРЕССЛАНД ИЗ BBC",
|
||||||
|
"characters": 3534,
|
||||||
|
"tokens": 1442,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g32.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 52,
|
||||||
|
"chapterTitle": "ПРАВИЛЬНЫЙ ПРОЦЕСС",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 22,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 53,
|
||||||
|
"chapterTitle": "Ch4 0",
|
||||||
|
"characters": 1217,
|
||||||
|
"tokens": 505,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-0.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 54,
|
||||||
|
"chapterTitle": "ИССЛЕДОВАНИЕ ПРОДУКТА",
|
||||||
|
"characters": 6046,
|
||||||
|
"tokens": 2444,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-01.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 55,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ ИССЛЕДОВАНИЯ ПРОДУКТА",
|
||||||
|
"characters": 10219,
|
||||||
|
"tokens": 4114,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g33.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 56,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ИССЛЕДОВАНИЯ ПРОДУКТА: ОБЗОР",
|
||||||
|
"characters": 5362,
|
||||||
|
"tokens": 2173,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g34.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 57,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ДЛЯ ФОРМУЛИРОВАНИЯ ЗАДАЧ",
|
||||||
|
"characters": 6111,
|
||||||
|
"tokens": 2475,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-02.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 58,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ДЛЯ ОЦЕНКИ ВОЗМОЖНОСТЕЙ",
|
||||||
|
"characters": 3281,
|
||||||
|
"tokens": 1339,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g35.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 59,
|
||||||
|
"chapterTitle": "МЕТОДИКА «ПИСЬМО КЛИЕНТА»",
|
||||||
|
"characters": 4894,
|
||||||
|
"tokens": 1982,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g36.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 60,
|
||||||
|
"chapterTitle": "МЕТОДИКА «КОНЦЕПЦИЯ СТАРТАПА»",
|
||||||
|
"characters": 7759,
|
||||||
|
"tokens": 3129,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g37.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 61,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ПЛАНИРОВАНИЯ",
|
||||||
|
"characters": 1009,
|
||||||
|
"tokens": 429,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-03.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 62,
|
||||||
|
"chapterTitle": "«КАРТА ИСТОРИИ»",
|
||||||
|
"characters": 3221,
|
||||||
|
"tokens": 1309,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g38.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 63,
|
||||||
|
"chapterTitle": "ПРОГРАММА ПО ИССЛЕДОВАНИЮ ПОТРЕБИТЕЛЕЙ",
|
||||||
|
"characters": 20618,
|
||||||
|
"tokens": 8277,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g39.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 64,
|
||||||
|
"chapterTitle": "ЗНАКОМЬТЕСЬ: МАРТИНА ЛАУЧЕНГКО ИЗ MICROSOFT",
|
||||||
|
"characters": 5241,
|
||||||
|
"tokens": 2128,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g40.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 65,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ДЛЯ ПОИСКА ИДЕЙ",
|
||||||
|
"characters": 1650,
|
||||||
|
"tokens": 687,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-04.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 66,
|
||||||
|
"chapterTitle": "ИНТЕРВЬЮ С ПОЛЬЗОВАТЕЛЕМ",
|
||||||
|
"characters": 4885,
|
||||||
|
"tokens": 1978,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g41.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 67,
|
||||||
|
"chapterTitle": "КОНСЬЕРЖ-ТЕСТ",
|
||||||
|
"characters": 1802,
|
||||||
|
"tokens": 740,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g42.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 68,
|
||||||
|
"chapterTitle": "СИЛА «НЕПРАВИЛЬНОГО» ПОВЕДЕНИЯ ПОТРЕБИТЕЛЯ",
|
||||||
|
"characters": 4440,
|
||||||
|
"tokens": 1807,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g43.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 69,
|
||||||
|
"chapterTitle": "ГЛАВА 44",
|
||||||
|
"characters": 1795,
|
||||||
|
"tokens": 736,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g44.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 70,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ДЛЯ ПРОТОТИПИРОВАНИЯ",
|
||||||
|
"characters": 4042,
|
||||||
|
"tokens": 1645,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-05.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 71,
|
||||||
|
"chapterTitle": "ГЛАВА 45",
|
||||||
|
"characters": 2348,
|
||||||
|
"tokens": 957,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g45.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 72,
|
||||||
|
"chapterTitle": "ПРОТОТИПЫ ДЛЯ ТЕСТИРОВАНИЯ РЕАЛИЗУЕМОСТИ",
|
||||||
|
"characters": 3612,
|
||||||
|
"tokens": 1475,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g46.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 73,
|
||||||
|
"chapterTitle": "ПОЛЬЗОВАТЕЛЬСКИЕ ПРОТОТИПЫ",
|
||||||
|
"characters": 3587,
|
||||||
|
"tokens": 1459,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g47.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 74,
|
||||||
|
"chapterTitle": "ПРОТОТИПЫ НА РЕАЛЬНЫХ ДАННЫХ",
|
||||||
|
"characters": 3491,
|
||||||
|
"tokens": 1422,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g48.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 75,
|
||||||
|
"chapterTitle": "СМЕШАННЫЕ ПРОТОТИПЫ",
|
||||||
|
"characters": 2837,
|
||||||
|
"tokens": 1156,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g49.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 76,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ДЛЯ ТЕСТИРОВАНИЯ НА ЭТАПЕ ИССЛЕДОВАНИЯ ПРОДУКТА",
|
||||||
|
"characters": 2420,
|
||||||
|
"tokens": 1008,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-06.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 77,
|
||||||
|
"chapterTitle": "КАК ПОДОБРАТЬ ПОЛЬЗОВАТЕЛЕЙ ДЛЯ УЧАСТИЯ В ТЕСТИРОВАНИИ",
|
||||||
|
"characters": 14989,
|
||||||
|
"tokens": 6031,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g50.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 78,
|
||||||
|
"chapterTitle": "КАЧЕСТВЕННОЕ ТЕСТИРОВАНИЕ ЦЕННОСТИ",
|
||||||
|
"characters": 2751,
|
||||||
|
"tokens": 1128,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g51.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 79,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ТЕСТИРОВАНИЯ СПРОСА",
|
||||||
|
"characters": 10509,
|
||||||
|
"tokens": 4229,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g52.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 80,
|
||||||
|
"chapterTitle": "КАЧЕСТВЕННЫЕ МЕТОДИКИ ТЕСТИРОВАНИЯ ЦЕННОСТИ",
|
||||||
|
"characters": 7978,
|
||||||
|
"tokens": 3223,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g53.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 81,
|
||||||
|
"chapterTitle": "КОЛИЧЕСТВЕННЫЕ МЕТОДИКИ ТЕСТИРОВАНИЯ ЦЕННОСТИ",
|
||||||
|
"characters": 16188,
|
||||||
|
"tokens": 6508,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g54.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 82,
|
||||||
|
"chapterTitle": "ТЕСТИРОВАНИЕ РЕАЛИЗУЕМОСТИ",
|
||||||
|
"characters": 5955,
|
||||||
|
"tokens": 2407,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g55.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 83,
|
||||||
|
"chapterTitle": "ТЕСТИРОВАНИЕ БИЗНЕС-ЖИЗНЕСПОСОБНОСТИ",
|
||||||
|
"characters": 10480,
|
||||||
|
"tokens": 4221,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g56.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 84,
|
||||||
|
"chapterTitle": "ЗНАКОМЬТЕСЬ: КЕЙТ АРНОЛЬД ИЗ NETFLIX",
|
||||||
|
"characters": 4855,
|
||||||
|
"tokens": 1971,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g57.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 85,
|
||||||
|
"chapterTitle": "МЕТОДИКИ ДЛЯ ПРЕОБРАЗОВАНИЙ",
|
||||||
|
"characters": 937,
|
||||||
|
"tokens": 402,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-07.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 86,
|
||||||
|
"chapterTitle": "СПРИНТ НА ЭТАПЕ ИССЛЕДОВАНИЯ ПРОДУКТА",
|
||||||
|
"characters": 7790,
|
||||||
|
"tokens": 3145,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g58.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 87,
|
||||||
|
"chapterTitle": "ПИЛОТНЫЕ КОМАНДЫ",
|
||||||
|
"characters": 2454,
|
||||||
|
"tokens": 1002,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g59.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 88,
|
||||||
|
"chapterTitle": "ОТКАЗ ОТ ДОРОЖНЫХ КАРТ",
|
||||||
|
"characters": 2357,
|
||||||
|
"tokens": 965,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g60.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 89,
|
||||||
|
"chapterTitle": "МАСШТАБИРОВАНИЕ: ПРОЦЕСС",
|
||||||
|
"characters": 1875,
|
||||||
|
"tokens": 777,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch4-08.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 90,
|
||||||
|
"chapterTitle": "КТО ТАКИЕ ЗАИНТЕРЕСОВАННЫЕ СТОРОНЫ",
|
||||||
|
"characters": 14251,
|
||||||
|
"tokens": 5728,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g61.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 91,
|
||||||
|
"chapterTitle": "РАСПРОСТРАНЕНИЕ НОВЫХ ЗНАНИЙ О ПРОДУКТЕ",
|
||||||
|
"characters": 2559,
|
||||||
|
"tokens": 1053,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g62.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 92,
|
||||||
|
"chapterTitle": "ЗНАКОМЬТЕСЬ: КАМИЛЛА ХЕРСТ ИЗ APPLE",
|
||||||
|
"characters": 3673,
|
||||||
|
"tokens": 1498,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g63.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 93,
|
||||||
|
"chapterTitle": "ЧАСТЬ V",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 17,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 94,
|
||||||
|
"chapterTitle": "Ch5 0",
|
||||||
|
"characters": 696,
|
||||||
|
"tokens": 297,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch5-0.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 95,
|
||||||
|
"chapterTitle": "ХОРОШАЯ ИЛИ ПЛОХАЯ ПРОДУКТОВАЯ КОМАНДА",
|
||||||
|
"characters": 6159,
|
||||||
|
"tokens": 2493,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g64.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 96,
|
||||||
|
"chapterTitle": "ПРИЧИНЫ ПРОБЛЕМ С ИННОВАЦИЯМИ",
|
||||||
|
"characters": 4923,
|
||||||
|
"tokens": 1995,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g65.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 97,
|
||||||
|
"chapterTitle": "ПРИЧИНЫ ПРОБЛЕМ С ТЕМПАМИ РАЗРАБОТКИ",
|
||||||
|
"characters": 3592,
|
||||||
|
"tokens": 1465,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g66.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 98,
|
||||||
|
"chapterTitle": "СОЗДАНИЕ СИЛЬНОЙ ПРОДУКТОВОЙ КУЛЬТУРЫ",
|
||||||
|
"characters": 5137,
|
||||||
|
"tokens": 2083,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g67.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 99,
|
||||||
|
"chapterTitle": "БЛАГОДАРНОСТИ",
|
||||||
|
"characters": 2863,
|
||||||
|
"tokens": 1164,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "th.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 100,
|
||||||
|
"chapterTitle": "ОБ АВТОРЕ",
|
||||||
|
"characters": 1885,
|
||||||
|
"tokens": 774,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "about.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 101,
|
||||||
|
"chapterTitle": "УЗНАЙТЕ БОЛЬШЕ",
|
||||||
|
"characters": 1099,
|
||||||
|
"tokens": 460,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "more.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 102,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ",
|
||||||
|
"characters": 2813,
|
||||||
|
"tokens": 2266,
|
||||||
|
"footnotesCount": 34,
|
||||||
|
"filePath": "links.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 103,
|
||||||
|
"chapterTitle": "МИФ Бизнес",
|
||||||
|
"characters": 161,
|
||||||
|
"tokens": 87,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "business.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 104,
|
||||||
|
"chapterTitle": "НАД КНИГОЙ РАБОТАЛИ",
|
||||||
|
"characters": 392,
|
||||||
|
"tokens": 179,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "end.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
291
books/statistics/Великие по собственному выбору_statistics.json
Normal file
291
books/statistics/Великие по собственному выбору_statistics.json
Normal file
@@ -0,0 +1,291 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Великие по собственному выбору",
|
||||||
|
"author": "Джим Коллинз & Мортен Хансен",
|
||||||
|
"totalChapters": 35,
|
||||||
|
"totalCharacters": 557715,
|
||||||
|
"totalTokens": 227225
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Информация от издательства",
|
||||||
|
"characters": 1175,
|
||||||
|
"tokens": 498,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/info.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Epi",
|
||||||
|
"characters": 175,
|
||||||
|
"tokens": 88,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/epi.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Величие посреди хаоса",
|
||||||
|
"characters": 20370,
|
||||||
|
"tokens": 8180,
|
||||||
|
"footnotesCount": 7,
|
||||||
|
"filePath": "Text/gl1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Вы Амундсен или Скотт?",
|
||||||
|
"characters": 50407,
|
||||||
|
"tokens": 20200,
|
||||||
|
"footnotesCount": 13,
|
||||||
|
"filePath": "Text/gl2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Двадцатимильный марш",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 25,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Двадцатимильный марш Джона Брауна",
|
||||||
|
"characters": 49679,
|
||||||
|
"tokens": 19903,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "Text/gl3-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Сначала пули, ядра потом",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 26,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Сюрприз, большой сюрприз",
|
||||||
|
"characters": 55550,
|
||||||
|
"tokens": 22249,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/gl4-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Лидерство над линией смерти",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 27,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Не все моменты в жизни равноценны",
|
||||||
|
"characters": 45592,
|
||||||
|
"tokens": 18276,
|
||||||
|
"footnotesCount": 8,
|
||||||
|
"filePath": "Text/gl5-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Глава 6",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 19,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "С фанатичной дисциплиной придерживаться рецепта СМаК",
|
||||||
|
"characters": 45866,
|
||||||
|
"tokens": 18385,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl6-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Удача или опыт?",
|
||||||
|
"characters": 60149,
|
||||||
|
"tokens": 24091,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/gl7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "ЭПИЛОГ",
|
||||||
|
"characters": 4114,
|
||||||
|
"tokens": 1667,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/epilog.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Часто задаваемые вопросы",
|
||||||
|
"characters": 24967,
|
||||||
|
"tokens": 10014,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/faq.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ ИССЛЕДОВАНИЯ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 28,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/princip.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Методология",
|
||||||
|
"characters": 20109,
|
||||||
|
"tokens": 8073,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/methodology.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Отбор компаний в группу 10×",
|
||||||
|
"characters": 7163,
|
||||||
|
"tokens": 2894,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/otbor.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Отбор компаний для сравнения",
|
||||||
|
"characters": 5200,
|
||||||
|
"tokens": 2111,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/otbor2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Двадцатимильный марш",
|
||||||
|
"characters": 3175,
|
||||||
|
"tokens": 1299,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/20miles.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Анализ инноваций",
|
||||||
|
"characters": 5059,
|
||||||
|
"tokens": 2053,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/analyse_inn.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Сначала пули, ядра потом",
|
||||||
|
"characters": 4138,
|
||||||
|
"tokens": 1683,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "Text/puli.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Анализ рисков по ликвидности и балансу",
|
||||||
|
"characters": 3369,
|
||||||
|
"tokens": 1390,
|
||||||
|
"footnotesCount": 4,
|
||||||
|
"filePath": "Text/analyse_risk.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Анализ категорий риска",
|
||||||
|
"characters": 4389,
|
||||||
|
"tokens": 1790,
|
||||||
|
"footnotesCount": 3,
|
||||||
|
"filePath": "Text/analyse_cat.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Анализ скорости",
|
||||||
|
"characters": 6479,
|
||||||
|
"tokens": 2629,
|
||||||
|
"footnotesCount": 7,
|
||||||
|
"filePath": "Text/analyse-speed.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Анализ рецепта СМаК",
|
||||||
|
"characters": 2841,
|
||||||
|
"tokens": 1169,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/analyse-smak.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Анализ удачи",
|
||||||
|
"characters": 8063,
|
||||||
|
"tokens": 3259,
|
||||||
|
"footnotesCount": 5,
|
||||||
|
"filePath": "Text/analyse-lucky.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Анализ Зала Славы хоккея",
|
||||||
|
"characters": 1859,
|
||||||
|
"tokens": 770,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "Text/zal.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ",
|
||||||
|
"characters": 101705,
|
||||||
|
"tokens": 40705,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/notes.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "БЛАГОДАРНОСТИ",
|
||||||
|
"characters": 7161,
|
||||||
|
"tokens": 2889,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/thanks.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "ОБ АВТОРЕ",
|
||||||
|
"characters": 568,
|
||||||
|
"tokens": 250,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/author.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Links",
|
||||||
|
"characters": 7488,
|
||||||
|
"tokens": 6136,
|
||||||
|
"footnotesCount": 118,
|
||||||
|
"filePath": "Text/links.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Над книгой работали",
|
||||||
|
"characters": 302,
|
||||||
|
"tokens": 144,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/end.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Books",
|
||||||
|
"characters": 10270,
|
||||||
|
"tokens": 4129,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/books.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Максимально полезные книги от издательства «Манн, Иванов и Фербер»",
|
||||||
|
"characters": 333,
|
||||||
|
"tokens": 176,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/max.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Всё о бизнесе за два часа: Секреты юристов и бухгалтеров",
|
||||||
|
"author": "Елена Ёлгина, Елена Смолякова, Александр Мельников",
|
||||||
|
"totalChapters": 18,
|
||||||
|
"totalCharacters": 363207,
|
||||||
|
"totalTokens": 145842
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Content01",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 24,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content01.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Dsc",
|
||||||
|
"characters": 897,
|
||||||
|
"tokens": 375,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/dsc.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "ИСПОЛЬЗОВАННЫЕ СОКРАЩЕНИЯ",
|
||||||
|
"characters": 1316,
|
||||||
|
"tokens": 557,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content03.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "ВВЕДЕНИЕ",
|
||||||
|
"characters": 2559,
|
||||||
|
"tokens": 1047,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content04.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "1. ИП или юридическое лицо? АО или ООО?",
|
||||||
|
"characters": 63381,
|
||||||
|
"tokens": 25387,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "УПРОЩЕННАЯ СИСТЕМА НАЛОГООБЛОЖЕНИЯ (УСН)",
|
||||||
|
"characters": 39504,
|
||||||
|
"tokens": 15837,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "ОБЩАЯ СИСТЕМА НАЛОГООБЛОЖЕНИЯ (ОСН)",
|
||||||
|
"characters": 66926,
|
||||||
|
"tokens": 26804,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "СТРАХОВЫЕ ВЗНОСЫ И НДФЛ: «ЗАРПЛАТНЫЕ НАЛОГИ»",
|
||||||
|
"characters": 26378,
|
||||||
|
"tokens": 10588,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "КАК ВЛИТЬ ДЕНЬГИ В БИЗНЕС?",
|
||||||
|
"characters": 7863,
|
||||||
|
"tokens": 3175,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "ДОХОДЫ ОТ БИЗНЕСА: КАК ИХ ПОЛУЧИТЬ В СВОЙ КАРМАН?",
|
||||||
|
"characters": 12079,
|
||||||
|
"tokens": 4870,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "3.1. Какие выгоды франшиза дает собственнику?",
|
||||||
|
"characters": 19093,
|
||||||
|
"tokens": 7675,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "1. Зачем нужен бухгалтерский учет?",
|
||||||
|
"characters": 18384,
|
||||||
|
"tokens": 7386,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "3. Кассового аппарата нет, а касса есть?",
|
||||||
|
"characters": 21867,
|
||||||
|
"tokens": 8782,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "2. Как выплачивать зарплату?",
|
||||||
|
"characters": 22452,
|
||||||
|
"tokens": 9012,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "БИЗНЕС-КЕЙС. НЕКОТОРЫЕ ПОДРОБНОСТИ И РАЗЪЯСНЕНИЯ",
|
||||||
|
"characters": 48842,
|
||||||
|
"tokens": 19576,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "ЗАКЛЮЧЕНИЕ",
|
||||||
|
"characters": 3013,
|
||||||
|
"tokens": 1230,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content05.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Список нормативных документов",
|
||||||
|
"characters": 8163,
|
||||||
|
"tokens": 3297,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content06.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Content02",
|
||||||
|
"characters": 490,
|
||||||
|
"tokens": 220,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content02.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,347 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Гроуинг 1.0. 22 маркетинговых действия для роста бизнеса",
|
||||||
|
"author": "ИГОРЬ МАНН",
|
||||||
|
"totalChapters": 42,
|
||||||
|
"totalCharacters": 119573,
|
||||||
|
"totalTokens": 49104
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Гроуинг Епаб",
|
||||||
|
"characters": 897,
|
||||||
|
"tokens": 385,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 1",
|
||||||
|
"characters": 926,
|
||||||
|
"tokens": 399,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 2",
|
||||||
|
"characters": 5116,
|
||||||
|
"tokens": 2118,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 3",
|
||||||
|
"characters": 10562,
|
||||||
|
"tokens": 4253,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 4",
|
||||||
|
"characters": 1378,
|
||||||
|
"tokens": 580,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 5",
|
||||||
|
"characters": 4134,
|
||||||
|
"tokens": 1682,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 6",
|
||||||
|
"characters": 4207,
|
||||||
|
"tokens": 1711,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 7",
|
||||||
|
"characters": 28,
|
||||||
|
"tokens": 40,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 8",
|
||||||
|
"characters": 1267,
|
||||||
|
"tokens": 535,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 9",
|
||||||
|
"characters": 6558,
|
||||||
|
"tokens": 2653,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 10",
|
||||||
|
"characters": 4569,
|
||||||
|
"tokens": 1857,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 11",
|
||||||
|
"characters": 818,
|
||||||
|
"tokens": 357,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 12",
|
||||||
|
"characters": 1764,
|
||||||
|
"tokens": 735,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 13",
|
||||||
|
"characters": 2986,
|
||||||
|
"tokens": 1224,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 14",
|
||||||
|
"characters": 558,
|
||||||
|
"tokens": 253,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 15",
|
||||||
|
"characters": 1400,
|
||||||
|
"tokens": 590,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-15.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 16",
|
||||||
|
"characters": 4366,
|
||||||
|
"tokens": 1776,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-16.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 17",
|
||||||
|
"characters": 3167,
|
||||||
|
"tokens": 1296,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-17.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 18",
|
||||||
|
"characters": 11225,
|
||||||
|
"tokens": 4520,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-18.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 19",
|
||||||
|
"characters": 1338,
|
||||||
|
"tokens": 565,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-19.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 20",
|
||||||
|
"characters": 1682,
|
||||||
|
"tokens": 702,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-20.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 21",
|
||||||
|
"characters": 2305,
|
||||||
|
"tokens": 952,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-21.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 22",
|
||||||
|
"characters": 548,
|
||||||
|
"tokens": 249,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-22.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 23",
|
||||||
|
"characters": 1514,
|
||||||
|
"tokens": 635,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-23.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 24",
|
||||||
|
"characters": 4573,
|
||||||
|
"tokens": 1859,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-24.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 25",
|
||||||
|
"characters": 946,
|
||||||
|
"tokens": 408,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-25.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 26",
|
||||||
|
"characters": 2235,
|
||||||
|
"tokens": 924,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-26.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 27",
|
||||||
|
"characters": 3300,
|
||||||
|
"tokens": 1350,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-27.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 28",
|
||||||
|
"characters": 692,
|
||||||
|
"tokens": 306,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-28.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 29",
|
||||||
|
"characters": 7153,
|
||||||
|
"tokens": 2891,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-29.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 30",
|
||||||
|
"characters": 2829,
|
||||||
|
"tokens": 1161,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-30.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 31",
|
||||||
|
"characters": 2857,
|
||||||
|
"tokens": 1172,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-31.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 32",
|
||||||
|
"characters": 4493,
|
||||||
|
"tokens": 1827,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-32.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 33",
|
||||||
|
"characters": 2801,
|
||||||
|
"tokens": 1150,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-33.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 34",
|
||||||
|
"characters": 1880,
|
||||||
|
"tokens": 782,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-34.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 35",
|
||||||
|
"characters": 2314,
|
||||||
|
"tokens": 955,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-35.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 36",
|
||||||
|
"characters": 1344,
|
||||||
|
"tokens": 567,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-36.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 37",
|
||||||
|
"characters": 1831,
|
||||||
|
"tokens": 762,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-37.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 38",
|
||||||
|
"characters": 3615,
|
||||||
|
"tokens": 1476,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-38.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 39",
|
||||||
|
"characters": 2344,
|
||||||
|
"tokens": 967,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-39.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 40",
|
||||||
|
"characters": 801,
|
||||||
|
"tokens": 350,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-40.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "Гроуинг Епаб 41",
|
||||||
|
"characters": 252,
|
||||||
|
"tokens": 130,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_-_ЕПАБ-41.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,243 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Думай как миллионер. 17 уроков состоятельности для тех, кто готов разбогатеть",
|
||||||
|
"author": "Т. Харс Экер",
|
||||||
|
"totalChapters": 29,
|
||||||
|
"totalCharacters": 309740,
|
||||||
|
"totalTokens": 124976
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Т. Харв Экер Думай как миллионер. 17 уроков состоятельности для тех, кто готов разбогатеть",
|
||||||
|
"characters": 16252,
|
||||||
|
"tokens": 6552,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Почему финансовая программа столь важна?",
|
||||||
|
"characters": 8822,
|
||||||
|
"tokens": 3560,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Что такое финансовая программа и как она формируется?",
|
||||||
|
"characters": 6775,
|
||||||
|
"tokens": 2747,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Воздействие первое: вербальное программирование",
|
||||||
|
"characters": 7645,
|
||||||
|
"tokens": 3092,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Шаг к переменам: вербальное программирование",
|
||||||
|
"characters": 15152,
|
||||||
|
"tokens": 6093,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Воздействие третье: личный опыт",
|
||||||
|
"characters": 7012,
|
||||||
|
"tokens": 2832,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "На что же ориентирована ваша финансовая программа?",
|
||||||
|
"characters": 15708,
|
||||||
|
"tokens": 6319,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Семнадцать различий в мышлении и поступках богатых, бедных и представителей среднего класса",
|
||||||
|
"characters": 8056,
|
||||||
|
"tokens": 3274,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Первый признак жертвы: обвинения",
|
||||||
|
"characters": 6086,
|
||||||
|
"tokens": 2462,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Третий признак жертвы: жалобы",
|
||||||
|
"characters": 6040,
|
||||||
|
"tokens": 2443,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 5189,
|
||||||
|
"tokens": 2104,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Урок состоятельности № 3 Богатые становятся богатыми. Бедные хотят стать богатыми",
|
||||||
|
"characters": 11054,
|
||||||
|
"tokens": 4470,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Урок состоятельности № 4 Богатые мыслят глобально. Бедные мыслят мелко",
|
||||||
|
"characters": 8961,
|
||||||
|
"tokens": 3629,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Урок состоятельности № 5 Богатые рассматривают возможности. Бедные зациклены на препятствиях",
|
||||||
|
"characters": 12701,
|
||||||
|
"tokens": 5133,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 16013,
|
||||||
|
"tokens": 6434,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 11257,
|
||||||
|
"tokens": 4531,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 7211,
|
||||||
|
"tokens": 2913,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Урок состоятельности № 9 Богатые люди выше своих проблем. Бедные преувеличивают свои проблемы",
|
||||||
|
"characters": 7232,
|
||||||
|
"tokens": 2946,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Урок состоятельности № 10 Богатые умеют принимать подарки судьбы. Бедные не умеют",
|
||||||
|
"characters": 18680,
|
||||||
|
"tokens": 7521,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 12612,
|
||||||
|
"tokens": 5073,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 7933,
|
||||||
|
"tokens": 3202,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Можно не только купить пирожное, но и съесть его!",
|
||||||
|
"characters": 5607,
|
||||||
|
"tokens": 2278,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Урок состоятельности № 13 Богатых заботит собственный капитал. Бедных заботит сумма оклада",
|
||||||
|
"characters": 11487,
|
||||||
|
"tokens": 4647,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 15892,
|
||||||
|
"tokens": 6385,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Урок состоятельности № 15 На богатых работают их деньги. Бедные работают ради денег",
|
||||||
|
"characters": 21640,
|
||||||
|
"tokens": 8706,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Урок состоятельности № 16 Богатые действуют без опаски. Бедных останавливает страх",
|
||||||
|
"characters": 17571,
|
||||||
|
"tokens": 7077,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Практикум начинающего миллионера",
|
||||||
|
"characters": 16118,
|
||||||
|
"tokens": 6476,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Вместо заключения «Что же мне, черт возьми, теперь делать?»",
|
||||||
|
"characters": 4916,
|
||||||
|
"tokens": 2006,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Примечания",
|
||||||
|
"characters": 118,
|
||||||
|
"tokens": 71,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "contentnotes0.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,283 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Истина в цене. Все о практическом ценообразовании, прибыли, выручке и клиентах",
|
||||||
|
"author": "Антон Терехов",
|
||||||
|
"totalChapters": 34,
|
||||||
|
"totalCharacters": 394362,
|
||||||
|
"totalTokens": 159061
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Антон Терехов Истина в цене. Все о практическом ценообразовании, прибыли, выручке и клиентах",
|
||||||
|
"characters": 8303,
|
||||||
|
"tokens": 3373,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Глава 1.1. Какова ваша цель – прибыль, доход или количество клиентов?",
|
||||||
|
"characters": 8197,
|
||||||
|
"tokens": 3321,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Глава 1.2. Психологический коридор цен. Несколько вопросов себе самому, своим клиентам и сотрудникам",
|
||||||
|
"characters": 7160,
|
||||||
|
"tokens": 2920,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Глава 1.3. Рассчитываем целевую цену",
|
||||||
|
"characters": 16826,
|
||||||
|
"tokens": 6760,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Глава 1.4. Единица измерения – основа ценообразования",
|
||||||
|
"characters": 14131,
|
||||||
|
"tokens": 5689,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Глава 1.5. Ментальная бухгалтерия",
|
||||||
|
"characters": 16163,
|
||||||
|
"tokens": 6494,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Глава 1.6. Премиальные и люксовые цены. Почему кажется, что высокая цена гарантирует высокое качество",
|
||||||
|
"characters": 14654,
|
||||||
|
"tokens": 5917,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Глава 1.7. Низкие и сверхнизкие цены. Применять с аккуратностью",
|
||||||
|
"characters": 20924,
|
||||||
|
"tokens": 8410,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Глава 1.8. Постоянные и переменные издержки, юнит-экономика и убийственная скидка",
|
||||||
|
"characters": 15350,
|
||||||
|
"tokens": 6188,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Глава 1.9. Унылый отель и неценовая зависимость спроса",
|
||||||
|
"characters": 10291,
|
||||||
|
"tokens": 4153,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Глава 1.10. Лучше бы ты бежал за такси",
|
||||||
|
"characters": 11091,
|
||||||
|
"tokens": 4468,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Глава 1.11. Почему не надо торговать на маркетплейсах",
|
||||||
|
"characters": 7088,
|
||||||
|
"tokens": 2873,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Глава 2.1. Основная задача скидок и фиктивный прайс-лист",
|
||||||
|
"characters": 10006,
|
||||||
|
"tokens": 4041,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Глава 2.2. Ценовые якоря и эффект золотой середины",
|
||||||
|
"characters": 10279,
|
||||||
|
"tokens": 4148,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Глава 2.3. Польза и потеря. Почему балльные программы лояльности лучше, чем дисконтные. Почему картой платить невыгодно Польза и потеря…",
|
||||||
|
"characters": 14909,
|
||||||
|
"tokens": 6034,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Глава 2.4. Как увеличить прибыль с помощью бандлирования",
|
||||||
|
"characters": 11483,
|
||||||
|
"tokens": 4632,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Глава 2.5. Составные продукты и кросс-сейл",
|
||||||
|
"characters": 13377,
|
||||||
|
"tokens": 5383,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Глава 2.6. Добро пожаловать в мышеловку! Ассортимент бесплатных сыров",
|
||||||
|
"characters": 9727,
|
||||||
|
"tokens": 3934,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Глава 2.7. Динамическое ценообразование. Продаем квотами",
|
||||||
|
"characters": 18235,
|
||||||
|
"tokens": 7333,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Заметка 1. Все, что вокруг цены",
|
||||||
|
"characters": 13882,
|
||||||
|
"tokens": 5581,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Часть 3 Цены и клиенты. Ценовая дискриминация",
|
||||||
|
"characters": 10807,
|
||||||
|
"tokens": 4357,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Глава 3.2. Три типа ценовой дискриминации и их инструменты",
|
||||||
|
"characters": 7873,
|
||||||
|
"tokens": 3189,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Глава 3.3. Юридические вопросы ценовой дискриминации",
|
||||||
|
"characters": 11769,
|
||||||
|
"tokens": 4744,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Глава 3.5. Клиенты сами сортируют себя по платежеспособности",
|
||||||
|
"characters": 11713,
|
||||||
|
"tokens": 4726,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Глава 3.7. Почему не надо отбирать скидки у хороших клиентов",
|
||||||
|
"characters": 9938,
|
||||||
|
"tokens": 4016,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Часть 4 Ценообразование в модели подписки",
|
||||||
|
"characters": 7979,
|
||||||
|
"tokens": 3224,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Глава 4.2. Понятие тарифа. Распутываем запутанное",
|
||||||
|
"characters": 5616,
|
||||||
|
"tokens": 2282,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Глава 4.3. Экономика подписки",
|
||||||
|
"characters": 9474,
|
||||||
|
"tokens": 3817,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Глава 4.4. Самая короткая глава о том, как продавать подписку",
|
||||||
|
"characters": 7061,
|
||||||
|
"tokens": 2865,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content28.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Глава 4.6. Постоянные и переменные издержки, квоты и успех модели подписки",
|
||||||
|
"characters": 9039,
|
||||||
|
"tokens": 3661,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content29.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Глава 4.7. Принципы ценообразования в экосистемах",
|
||||||
|
"characters": 10546,
|
||||||
|
"tokens": 4254,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content30.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Приложение. Особенности ценообразования в сфере технологичных B2B-услуг",
|
||||||
|
"characters": 37711,
|
||||||
|
"tokens": 15129,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content31.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Об авторе",
|
||||||
|
"characters": 804,
|
||||||
|
"tokens": 341,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content32.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Сноски",
|
||||||
|
"characters": 1956,
|
||||||
|
"tokens": 804,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "contentnotes0.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,259 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "История настоящего предпринимателя",
|
||||||
|
"author": "Александр Долгов",
|
||||||
|
"totalChapters": 31,
|
||||||
|
"totalCharacters": 445204,
|
||||||
|
"totalTokens": 178922
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "История настоящего предпринимателя Александр Долгов",
|
||||||
|
"characters": 23574,
|
||||||
|
"tokens": 9465,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 35308,
|
||||||
|
"tokens": 14152,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 21186,
|
||||||
|
"tokens": 8503,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Сильный оффер",
|
||||||
|
"characters": 9776,
|
||||||
|
"tokens": 3931,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Как проводить собеседования",
|
||||||
|
"characters": 7568,
|
||||||
|
"tokens": 3053,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 30537,
|
||||||
|
"tokens": 12243,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 26791,
|
||||||
|
"tokens": 10745,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 26492,
|
||||||
|
"tokens": 10625,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 15170,
|
||||||
|
"tokens": 6097,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Перелом",
|
||||||
|
"characters": 9864,
|
||||||
|
"tokens": 3963,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 27570,
|
||||||
|
"tokens": 11058,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Глава 9. Франчайзинг – новый MBA",
|
||||||
|
"characters": 15118,
|
||||||
|
"tokens": 6076,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 9696,
|
||||||
|
"tokens": 3908,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Сделка",
|
||||||
|
"characters": 9949,
|
||||||
|
"tokens": 3998,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Глава 11. Семейный бизнес",
|
||||||
|
"characters": 13077,
|
||||||
|
"tokens": 5257,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Глава 12. Правило «трех ногтей»",
|
||||||
|
"characters": 13401,
|
||||||
|
"tokens": 5389,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 5387,
|
||||||
|
"tokens": 2184,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Глава 13. Налоги",
|
||||||
|
"characters": 8709,
|
||||||
|
"tokens": 3506,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Налогообложение для самых маленьких",
|
||||||
|
"characters": 9774,
|
||||||
|
"tokens": 3940,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Прибыль Налоги НДФЛ Прибыль",
|
||||||
|
"characters": 5451,
|
||||||
|
"tokens": 2207,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 19927,
|
||||||
|
"tokens": 8000,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 26057,
|
||||||
|
"tokens": 10452,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя, который хочет что-либо производить в России",
|
||||||
|
"characters": 8225,
|
||||||
|
"tokens": 3338,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Маркетплейсы",
|
||||||
|
"characters": 6727,
|
||||||
|
"tokens": 2711,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Социальные сети",
|
||||||
|
"characters": 6452,
|
||||||
|
"tokens": 2603,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Контентный маркетинг",
|
||||||
|
"characters": 7068,
|
||||||
|
"tokens": 2852,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Кейсы",
|
||||||
|
"characters": 5569,
|
||||||
|
"tokens": 2246,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 9417,
|
||||||
|
"tokens": 3796,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Осознанные инвестиции",
|
||||||
|
"characters": 7937,
|
||||||
|
"tokens": 3199,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content28.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Репутация и инвестиции",
|
||||||
|
"characters": 8598,
|
||||||
|
"tokens": 3464,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content29.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Правила настоящего предпринимателя",
|
||||||
|
"characters": 14829,
|
||||||
|
"tokens": 5961,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content30.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "На уровень выше. 25 правил вежливых и успешных людей",
|
||||||
|
"author": "Ольга Владимировна Шевелева",
|
||||||
|
"totalChapters": 23,
|
||||||
|
"totalCharacters": 254019,
|
||||||
|
"totalTokens": 102181
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Ольга Шевелева На уровень выше. 25 правил вежливых и успешных людей",
|
||||||
|
"characters": 7964,
|
||||||
|
"tokens": 3227,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Приветствие и прощание",
|
||||||
|
"characters": 5979,
|
||||||
|
"tokens": 2415,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Представление",
|
||||||
|
"characters": 7098,
|
||||||
|
"tokens": 2860,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Формы обращения",
|
||||||
|
"characters": 8382,
|
||||||
|
"tokens": 3374,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Рукопожатие",
|
||||||
|
"characters": 6943,
|
||||||
|
"tokens": 2797,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Визитные карточки",
|
||||||
|
"characters": 11178,
|
||||||
|
"tokens": 4493,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Поведение у двери, в лифте, на лестнице, при рассадке в автомобиле",
|
||||||
|
"characters": 5621,
|
||||||
|
"tokens": 2290,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Общение по телефону",
|
||||||
|
"characters": 15738,
|
||||||
|
"tokens": 6318,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Время ответа на деловые письма",
|
||||||
|
"characters": 10915,
|
||||||
|
"tokens": 4394,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Благодарность",
|
||||||
|
"characters": 32757,
|
||||||
|
"tokens": 13123,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Аксессуары",
|
||||||
|
"characters": 24684,
|
||||||
|
"tokens": 9894,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Прическа",
|
||||||
|
"characters": 7454,
|
||||||
|
"tokens": 3001,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Макияж/Наличие или отсутствие бороды",
|
||||||
|
"characters": 12688,
|
||||||
|
"tokens": 5106,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Аромат парфюмерии",
|
||||||
|
"characters": 11202,
|
||||||
|
"tokens": 4503,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Верхняя одежда",
|
||||||
|
"characters": 6367,
|
||||||
|
"tokens": 2568,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Сменная обувь",
|
||||||
|
"characters": 5772,
|
||||||
|
"tokens": 2330,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Положение сумки или портфеля",
|
||||||
|
"characters": 18301,
|
||||||
|
"tokens": 7348,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Рассадка во время деловых встреч",
|
||||||
|
"characters": 6973,
|
||||||
|
"tokens": 2818,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Кофе-брейк и предложение напитков",
|
||||||
|
"characters": 11107,
|
||||||
|
"tokens": 4472,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Business meal",
|
||||||
|
"characters": 17000,
|
||||||
|
"tokens": 6822,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Поведение на приемах",
|
||||||
|
"characters": 14280,
|
||||||
|
"tokens": 5737,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Заключение",
|
||||||
|
"characters": 3965,
|
||||||
|
"tokens": 1607,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Примечания",
|
||||||
|
"characters": 1651,
|
||||||
|
"tokens": 684,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "contentnotes0.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,267 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Онлайн-бизнес: юридическая упаковка и сопровождение интернет-проектов",
|
||||||
|
"author": "Елена Федорук",
|
||||||
|
"totalChapters": 32,
|
||||||
|
"totalCharacters": 325761,
|
||||||
|
"totalTokens": 131380
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Кто такой инфоюрист и что он может сделать для онлайн-проекта?",
|
||||||
|
"characters": 23536,
|
||||||
|
"tokens": 9454,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Онлайн-бизнес",
|
||||||
|
"characters": 5476,
|
||||||
|
"tokens": 2211,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Что нужно знать для юридического сопровождения онлайн-проекта",
|
||||||
|
"characters": 5230,
|
||||||
|
"tokens": 2132,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "1. Как юридически закрепить отношения между продюсером и экспертом?",
|
||||||
|
"characters": 6814,
|
||||||
|
"tokens": 2767,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "2. Партнерство с иностранным элементом",
|
||||||
|
"characters": 8043,
|
||||||
|
"tokens": 3248,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "3. Пять вопросов про авторские права для составления договора",
|
||||||
|
"characters": 6557,
|
||||||
|
"tokens": 2662,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "5. Чего нет в шаблонах договоров?",
|
||||||
|
"characters": 8225,
|
||||||
|
"tokens": 3319,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "7. 6 самых распространенных ошибок в договоре продюсера и эксперта",
|
||||||
|
"characters": 8523,
|
||||||
|
"tokens": 3451,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "9. Особенности юридического оформления онлайн-проектов с привлеченными инвестициями",
|
||||||
|
"characters": 17135,
|
||||||
|
"tokens": 6903,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Бизнес-старт в онлайне. Выбор организационно- правовой формы",
|
||||||
|
"characters": 7156,
|
||||||
|
"tokens": 2902,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "3. Что мы знаем об ИП?",
|
||||||
|
"characters": 12241,
|
||||||
|
"tokens": 4921,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Выбор системы налогообложения",
|
||||||
|
"characters": 9199,
|
||||||
|
"tokens": 3707,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "1. Налоговые каникулы",
|
||||||
|
"characters": 7469,
|
||||||
|
"tokens": 3012,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "1. Какие договоры экономически выгодно заключать с контрагентами?",
|
||||||
|
"characters": 12906,
|
||||||
|
"tokens": 5205,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "3. Юридическая сила электронной переписки",
|
||||||
|
"characters": 7654,
|
||||||
|
"tokens": 3094,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "4. Аналоги собственноручной подписи",
|
||||||
|
"characters": 5504,
|
||||||
|
"tokens": 2232,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "2. Необходимый минимум документов для сайта",
|
||||||
|
"characters": 20316,
|
||||||
|
"tokens": 8160,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "4. Обработка персональных данных пользователей сайта",
|
||||||
|
"characters": 19762,
|
||||||
|
"tokens": 7941,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "5. Как правильно размещать документы на сайте",
|
||||||
|
"characters": 7419,
|
||||||
|
"tokens": 3002,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "1. Что именно признается рекламой?",
|
||||||
|
"characters": 5965,
|
||||||
|
"tokens": 2416,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "5. Лайфхаки от рекламщиков, которые помогут похвалить себя и при этом действовать в рамках закона",
|
||||||
|
"characters": 10632,
|
||||||
|
"tokens": 4307,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Правовой аудит онлайн-проекта",
|
||||||
|
"characters": 7693,
|
||||||
|
"tokens": 3105,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Взаимодействие с клиентами. Возвраты",
|
||||||
|
"characters": 13912,
|
||||||
|
"tokens": 5595,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Защита интеллектуальной собственности и деловой репутации в интернете",
|
||||||
|
"characters": 7856,
|
||||||
|
"tokens": 3186,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "3. Передача авторских прав в онлайн-бизнесе",
|
||||||
|
"characters": 9906,
|
||||||
|
"tokens": 3996,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "4. Как защитить авторские права?",
|
||||||
|
"characters": 9342,
|
||||||
|
"tokens": 3765,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "5. Как доказать собственное авторство?",
|
||||||
|
"characters": 5290,
|
||||||
|
"tokens": 2148,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "8. Три мифа о защите авторского права",
|
||||||
|
"characters": 6493,
|
||||||
|
"tokens": 2628,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "11. Авторское право на фотографии",
|
||||||
|
"characters": 15456,
|
||||||
|
"tokens": 6212,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content28.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "О лицензировании образовательной деятельности",
|
||||||
|
"characters": 14076,
|
||||||
|
"tokens": 5665,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content29.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Заключение",
|
||||||
|
"characters": 16574,
|
||||||
|
"tokens": 6650,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content30.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Примечания",
|
||||||
|
"characters": 3401,
|
||||||
|
"tokens": 1384,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "contentnotes0.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,371 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Планируй. Как правильно планировать каждый год своей жиз-ни и сделать максимум запланированного",
|
||||||
|
"author": "Игорь Манн",
|
||||||
|
"totalChapters": 45,
|
||||||
|
"totalCharacters": 111982,
|
||||||
|
"totalTokens": 46375
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1",
|
||||||
|
"characters": 402,
|
||||||
|
"tokens": 192,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 1",
|
||||||
|
"characters": 677,
|
||||||
|
"tokens": 304,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 2",
|
||||||
|
"characters": 4781,
|
||||||
|
"tokens": 1946,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 3",
|
||||||
|
"characters": 1630,
|
||||||
|
"tokens": 686,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 4",
|
||||||
|
"characters": 592,
|
||||||
|
"tokens": 270,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 5",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 34,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 6",
|
||||||
|
"characters": 8924,
|
||||||
|
"tokens": 3603,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 7",
|
||||||
|
"characters": 10954,
|
||||||
|
"tokens": 4415,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 8",
|
||||||
|
"characters": 6465,
|
||||||
|
"tokens": 2620,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 9",
|
||||||
|
"characters": 8421,
|
||||||
|
"tokens": 3403,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 10",
|
||||||
|
"characters": 2828,
|
||||||
|
"tokens": 1167,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 11",
|
||||||
|
"characters": 1475,
|
||||||
|
"tokens": 626,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 12",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 36,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 13",
|
||||||
|
"characters": 1995,
|
||||||
|
"tokens": 834,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 14",
|
||||||
|
"characters": 4648,
|
||||||
|
"tokens": 1895,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 15",
|
||||||
|
"characters": 6452,
|
||||||
|
"tokens": 2616,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-15.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 16",
|
||||||
|
"characters": 12181,
|
||||||
|
"tokens": 4908,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-16.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 17",
|
||||||
|
"characters": 8269,
|
||||||
|
"tokens": 3343,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-17.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 18",
|
||||||
|
"characters": 589,
|
||||||
|
"tokens": 271,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-18.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 19",
|
||||||
|
"characters": 539,
|
||||||
|
"tokens": 251,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-19.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 20",
|
||||||
|
"characters": 10,
|
||||||
|
"tokens": 40,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-20.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 21",
|
||||||
|
"characters": 554,
|
||||||
|
"tokens": 257,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-21.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 22",
|
||||||
|
"characters": 3056,
|
||||||
|
"tokens": 1258,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-22.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 23",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 36,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-23.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 24",
|
||||||
|
"characters": 5769,
|
||||||
|
"tokens": 2343,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-24.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 25",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 36,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-25.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 26",
|
||||||
|
"characters": 8049,
|
||||||
|
"tokens": 3255,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-26.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 27",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 36,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-27.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 28",
|
||||||
|
"characters": 9549,
|
||||||
|
"tokens": 3855,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-28.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 29",
|
||||||
|
"characters": 1878,
|
||||||
|
"tokens": 787,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-29.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 30",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 36,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-30.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 31",
|
||||||
|
"characters": 801,
|
||||||
|
"tokens": 356,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-31.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 32",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 36,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-32.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 33",
|
||||||
|
"characters": 255,
|
||||||
|
"tokens": 138,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-33.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 34",
|
||||||
|
"characters": 20,
|
||||||
|
"tokens": 44,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-34.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 35",
|
||||||
|
"characters": 47,
|
||||||
|
"tokens": 54,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-35.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 36",
|
||||||
|
"characters": 12,
|
||||||
|
"tokens": 40,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-36.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 37",
|
||||||
|
"characters": 24,
|
||||||
|
"tokens": 45,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-37.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 38",
|
||||||
|
"characters": 17,
|
||||||
|
"tokens": 42,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-38.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 39",
|
||||||
|
"characters": 24,
|
||||||
|
"tokens": 45,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-39.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 40",
|
||||||
|
"characters": 28,
|
||||||
|
"tokens": 47,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-40.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 41",
|
||||||
|
"characters": 20,
|
||||||
|
"tokens": 44,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-41.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 42",
|
||||||
|
"characters": 19,
|
||||||
|
"tokens": 43,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-42.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 44,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 43",
|
||||||
|
"characters": 14,
|
||||||
|
"tokens": 41,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-43.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 45,
|
||||||
|
"chapterTitle": "Гроуинг 1.1 Epub 1 44",
|
||||||
|
"characters": 14,
|
||||||
|
"tokens": 41,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Гроуинг_1.1_EPUB-1-44.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,291 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "По собственному выбору: от хорошего к великому",
|
||||||
|
"author": "Джим Коллинз & Мортен Хансен",
|
||||||
|
"totalChapters": 35,
|
||||||
|
"totalCharacters": 549997,
|
||||||
|
"totalTokens": 224125
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Информация от издательства",
|
||||||
|
"characters": 1241,
|
||||||
|
"tokens": 524,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/info.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Предисловие к русскому изданию",
|
||||||
|
"characters": 2646,
|
||||||
|
"tokens": 1089,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/predis.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Epi",
|
||||||
|
"characters": 175,
|
||||||
|
"tokens": 88,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/epi.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Величие посреди хаоса",
|
||||||
|
"characters": 20337,
|
||||||
|
"tokens": 8165,
|
||||||
|
"footnotesCount": 6,
|
||||||
|
"filePath": "Text/gl1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "ВЫ АМУНДСЕН ИЛИ СКОТТ?",
|
||||||
|
"characters": 50406,
|
||||||
|
"tokens": 20201,
|
||||||
|
"footnotesCount": 14,
|
||||||
|
"filePath": "Text/gl2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Двадцатимильный марш",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 25,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "ДВАДЦАТИМИЛЬНЫЙ МАРШ ДЖОНА БРАУНА",
|
||||||
|
"characters": 49679,
|
||||||
|
"tokens": 19903,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "Text/gl3-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Сначала пули, ядра потом",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 26,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "СЮРПРИЗ, БОЛЬШОЙ СЮРПРИЗ",
|
||||||
|
"characters": 55550,
|
||||||
|
"tokens": 22249,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/gl4-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Лидерство над линией смерти",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 27,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "НЕ ВСЕ МОМЕНТЫ В ЖИЗНИ РАВНОЦЕННЫ",
|
||||||
|
"characters": 45565,
|
||||||
|
"tokens": 18266,
|
||||||
|
"footnotesCount": 8,
|
||||||
|
"filePath": "Text/gl5-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Глава 6",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 19,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "С ФАНАТИЧНОЙ ДИСЦИПЛИНОЙ ПРИДЕРЖИВАТЬСЯ РЕЦЕПТА СМАК",
|
||||||
|
"characters": 45857,
|
||||||
|
"tokens": 18381,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/gl6-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "УДАЧА ИЛИ ОПЫТ?",
|
||||||
|
"characters": 60131,
|
||||||
|
"tokens": 24084,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/gl7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "ЭПИЛОГ",
|
||||||
|
"characters": 4114,
|
||||||
|
"tokens": 1667,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/epilog.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ",
|
||||||
|
"characters": 24968,
|
||||||
|
"tokens": 10015,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/faq.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "ПРИНЦИПЫ ИССЛЕДОВАНИЯ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 28,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/princip.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "МЕТОДОЛОГИЯ",
|
||||||
|
"characters": 20090,
|
||||||
|
"tokens": 8066,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/methodology.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "ОТБОР КОМПАНИЙ В ГРУППУ 10×",
|
||||||
|
"characters": 7163,
|
||||||
|
"tokens": 2894,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/otbor.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "ОТБОР КОМПАНИЙ ДЛЯ СРАВНЕНИЯ",
|
||||||
|
"characters": 5200,
|
||||||
|
"tokens": 2111,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/otbor2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "ДВАДЦАТИМИЛЬНЫЙ МАРШ",
|
||||||
|
"characters": 3164,
|
||||||
|
"tokens": 1294,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/20miles.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "АНАЛИЗ ИННОВАЦИЙ",
|
||||||
|
"characters": 5054,
|
||||||
|
"tokens": 2051,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/analyse_inn.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "СНАЧАЛА ПУЛИ, ЯДРА ПОТОМ",
|
||||||
|
"characters": 4138,
|
||||||
|
"tokens": 1683,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "Text/puli.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "АНАЛИЗ РИСКОВ ПО ЛИКВИДНОСТИ И БАЛАНСУ",
|
||||||
|
"characters": 3364,
|
||||||
|
"tokens": 1388,
|
||||||
|
"footnotesCount": 4,
|
||||||
|
"filePath": "Text/analyse_risk.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "АНАЛИЗ КАТЕГОРИЙ РИСКА",
|
||||||
|
"characters": 4389,
|
||||||
|
"tokens": 1790,
|
||||||
|
"footnotesCount": 3,
|
||||||
|
"filePath": "Text/analyse_cat.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "АНАЛИЗ СКОРОСТИ",
|
||||||
|
"characters": 6462,
|
||||||
|
"tokens": 2622,
|
||||||
|
"footnotesCount": 7,
|
||||||
|
"filePath": "Text/analyse-speed.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "АНАЛИЗ РЕЦЕПТА СМАК",
|
||||||
|
"characters": 2843,
|
||||||
|
"tokens": 1170,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "Text/analyse-smak.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "АНАЛИЗ УДАЧИ",
|
||||||
|
"characters": 8117,
|
||||||
|
"tokens": 3280,
|
||||||
|
"footnotesCount": 5,
|
||||||
|
"filePath": "Text/analyse-lucky.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "АНАЛИЗ ЗАЛА СЛАВЫ ХОККЕЯ",
|
||||||
|
"characters": 1859,
|
||||||
|
"tokens": 770,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "Text/zal.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ",
|
||||||
|
"characters": 101705,
|
||||||
|
"tokens": 40705,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/notes.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "БЛАГОДАРНОСТИ",
|
||||||
|
"characters": 7161,
|
||||||
|
"tokens": 2889,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/thanks.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "ОБ АВТОРЕ",
|
||||||
|
"characters": 568,
|
||||||
|
"tokens": 250,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/author.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Links",
|
||||||
|
"characters": 7488,
|
||||||
|
"tokens": 6136,
|
||||||
|
"footnotesCount": 118,
|
||||||
|
"filePath": "Text/links.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "МИФ Бизнес",
|
||||||
|
"characters": 161,
|
||||||
|
"tokens": 85,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/max.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Над книгой работали",
|
||||||
|
"characters": 402,
|
||||||
|
"tokens": 184,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/end.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,299 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Пять пороков команды: практика преодоления",
|
||||||
|
"author": "Патрик Ленсиони",
|
||||||
|
"totalChapters": 36,
|
||||||
|
"totalCharacters": 194733,
|
||||||
|
"totalTokens": 79211
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "OVERCOMING THE FIVE DYSFUNCTIONS OF A TEAM",
|
||||||
|
"characters": 25,
|
||||||
|
"tokens": 40,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "ПЯТЬ ПОРОКОВ КОМАНДЫ: ПРАКТИКА ПРЕОДОЛЕНИЯ",
|
||||||
|
"characters": 37,
|
||||||
|
"tokens": 44,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Информацияот издательства",
|
||||||
|
"characters": 1427,
|
||||||
|
"tokens": 595,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "inf.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Posv",
|
||||||
|
"characters": 150,
|
||||||
|
"tokens": 77,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "posv.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "ДЛЯ ЧЕГО ЭТА КНИГА?",
|
||||||
|
"characters": 1789,
|
||||||
|
"tokens": 736,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "vv.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "ОПРЕДЕЛИМСЯ С ПОНЯТИЯМИ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 23,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "C11",
|
||||||
|
"characters": 229,
|
||||||
|
"tokens": 107,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "АРГУМЕНТЫ В ПОЛЬЗУ КОМАНДНОЙ РАБОТЫ",
|
||||||
|
"characters": 3335,
|
||||||
|
"tokens": 1362,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "КОРОТКО О ПРЕДЛАГАЕМОЙ МОДЕЛИ",
|
||||||
|
"characters": 2383,
|
||||||
|
"tokens": 978,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Вопрос 1: «А действительно ли мы команда?»",
|
||||||
|
"characters": 2245,
|
||||||
|
"tokens": 928,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "БОРЬБА С ПЯТЬЮ ПОРОКАМИ КОМАНДЫ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 26,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "C21",
|
||||||
|
"characters": 294,
|
||||||
|
"tokens": 133,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C21.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "БОРЬБА С ПОРОКОМ 1",
|
||||||
|
"characters": 33480,
|
||||||
|
"tokens": 13413,
|
||||||
|
"footnotesCount": 4,
|
||||||
|
"filePath": "g4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Как управлять конфликтной ситуацией",
|
||||||
|
"characters": 21618,
|
||||||
|
"tokens": 8675,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "БОРЬБА С ПОРОКОМ 3",
|
||||||
|
"characters": 13300,
|
||||||
|
"tokens": 5341,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "ИСТОРИЯ О НЕДОСТАТКЕ ТРЕБОВАТЕЛЬНОСТИ",
|
||||||
|
"characters": 12022,
|
||||||
|
"tokens": 4836,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "ИСТОРИЯ О ПРЕОБЛАДАНИИ ИНДИВИДУАЛЬНОГО НАД КОМАНДНЫМ",
|
||||||
|
"characters": 17651,
|
||||||
|
"tokens": 7094,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "ОТВЕТЫ НА ВОПРОСЫ. ПРЕДВОСХИЩАЯ ТРУДНОСТИ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 30,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "C31",
|
||||||
|
"characters": 312,
|
||||||
|
"tokens": 140,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C31.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Сколько времени занимает формирование команды?",
|
||||||
|
"characters": 7831,
|
||||||
|
"tokens": 3164,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "g9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "ВОЗРАЖЕНИЯ УЧАСТНИКОВ ДИСКУССИИ",
|
||||||
|
"characters": 5433,
|
||||||
|
"tokens": 2200,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "ПРЕПЯТСТВИЯ, КОТОРЫХ НАДО ИЗБЕГАТЬ",
|
||||||
|
"characters": 10085,
|
||||||
|
"tokens": 4062,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "КАК СФОРМИРОВАТЬ КОМАНДУ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 23,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "C41",
|
||||||
|
"characters": 158,
|
||||||
|
"tokens": 79,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C41.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "ПЛАН ДЕЙСТВИЙ ПО ФОРМИРОВАНИЮ КОМАНДЫ",
|
||||||
|
"characters": 5396,
|
||||||
|
"tokens": 2187,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "ПЕРВАЯ ВЫЕЗДНАЯ ВСТРЕЧА",
|
||||||
|
"characters": 6938,
|
||||||
|
"tokens": 2799,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "ПОДРОБНЕЕ О ПРИЕМАХ И УПРАЖНЕНИЯХ",
|
||||||
|
"characters": 29991,
|
||||||
|
"tokens": 12024,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "ГЛОССАРИЙ",
|
||||||
|
"characters": 8034,
|
||||||
|
"tokens": 3233,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "gloss.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "ИСТОЧНИКИ",
|
||||||
|
"characters": 3700,
|
||||||
|
"tokens": 1498,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ist.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "СЛОВА БЛАГОДАРНОСТИ",
|
||||||
|
"characters": 1710,
|
||||||
|
"tokens": 705,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "th.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "ОБ АВТОРЕ",
|
||||||
|
"characters": 2314,
|
||||||
|
"tokens": 945,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "about.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Пять пороков команды",
|
||||||
|
"characters": 536,
|
||||||
|
"tokens": 236,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "r1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Сердце компании",
|
||||||
|
"characters": 579,
|
||||||
|
"tokens": 251,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "r2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ",
|
||||||
|
"characters": 1203,
|
||||||
|
"tokens": 976,
|
||||||
|
"footnotesCount": 18,
|
||||||
|
"filePath": "links.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "МИФ Бизнес",
|
||||||
|
"characters": 161,
|
||||||
|
"tokens": 83,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "biz.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "НАД КНИГОЙ РАБОТАЛИ",
|
||||||
|
"characters": 367,
|
||||||
|
"tokens": 168,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "end.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Рисуй, чтобы победить: проверенный способ руководить, продавать, изобретать и обучать",
|
||||||
|
"author": "Дэн Роэм",
|
||||||
|
"totalChapters": 17,
|
||||||
|
"totalCharacters": 147803,
|
||||||
|
"totalTokens": 59596
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Дэн Роэм Рисуй, чтобы победить. Проверенный способ руководить, продавать, изобретать и обучать",
|
||||||
|
"characters": 94,
|
||||||
|
"tokens": 87,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "* * *",
|
||||||
|
"characters": 569,
|
||||||
|
"tokens": 243,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Ch1 2",
|
||||||
|
"characters": 34,
|
||||||
|
"tokens": 29,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Запуск",
|
||||||
|
"characters": 1784,
|
||||||
|
"tokens": 729,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Глава 1. Рисуйте так, словно от этого зависит ваша жизнь",
|
||||||
|
"characters": 10237,
|
||||||
|
"tokens": 4130,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Глава 2. Побеждает тот, кто лучше рисует",
|
||||||
|
"characters": 17648,
|
||||||
|
"tokens": 7089,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Глава 3. Сначала нарисуйте круг, потом дайте ему имя",
|
||||||
|
"characters": 11682,
|
||||||
|
"tokens": 4706,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Глава 4. Взгляд указывает, разум повинуется",
|
||||||
|
"characters": 14219,
|
||||||
|
"tokens": 5718,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Глава 5. Начните с вопроса «кто?»",
|
||||||
|
"characters": 14575,
|
||||||
|
"tokens": 5857,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Глава 6. Чтобы руководить, нарисуйте вашу цель",
|
||||||
|
"characters": 17871,
|
||||||
|
"tokens": 7180,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Глава 7. Чтобы продавать, рисуйте вместе",
|
||||||
|
"characters": 15255,
|
||||||
|
"tokens": 6133,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Глава 8. Чтобы изобретать, нарисуйте мир вверх тормашками",
|
||||||
|
"characters": 17765,
|
||||||
|
"tokens": 7143,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Глава 9. Чтобы научить, нарисуйте историю",
|
||||||
|
"characters": 13131,
|
||||||
|
"tokens": 5283,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Глава 10. Когда не знаете, что делать, – рисуйте",
|
||||||
|
"characters": 6681,
|
||||||
|
"tokens": 2706,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Благодарности",
|
||||||
|
"characters": 4954,
|
||||||
|
"tokens": 2001,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Эту книгу хорошо дополняют:",
|
||||||
|
"characters": 128,
|
||||||
|
"tokens": 76,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch1-15.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Сноски",
|
||||||
|
"characters": 1176,
|
||||||
|
"tokens": 486,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "ch2.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,755 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Стартап. Настольная книга основателя",
|
||||||
|
"author": "Стив Бланк, Боб Дорф",
|
||||||
|
"totalChapters": 93,
|
||||||
|
"totalCharacters": 925726,
|
||||||
|
"totalTokens": 372955
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Section00",
|
||||||
|
"characters": 1102,
|
||||||
|
"tokens": 464,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section00.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Section01",
|
||||||
|
"characters": 8771,
|
||||||
|
"tokens": 3532,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section01.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Section02",
|
||||||
|
"characters": 1786,
|
||||||
|
"tokens": 738,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section02.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Section03",
|
||||||
|
"characters": 8806,
|
||||||
|
"tokens": 3546,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section03.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Section04",
|
||||||
|
"characters": 3424,
|
||||||
|
"tokens": 1393,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section04.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Section05",
|
||||||
|
"characters": 10173,
|
||||||
|
"tokens": 4093,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section05.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Section06",
|
||||||
|
"characters": 6412,
|
||||||
|
"tokens": 2588,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section06.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Section07",
|
||||||
|
"characters": 6694,
|
||||||
|
"tokens": 2701,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section07.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Section08",
|
||||||
|
"characters": 12351,
|
||||||
|
"tokens": 4964,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section08.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Путь к озарению: модель развития потребителей Манифест развития потребителей",
|
||||||
|
"characters": 94,
|
||||||
|
"tokens": 88,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section09.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Section10",
|
||||||
|
"characters": 35939,
|
||||||
|
"tokens": 14399,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Section11",
|
||||||
|
"characters": 23733,
|
||||||
|
"tokens": 9517,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Section111",
|
||||||
|
"characters": 36942,
|
||||||
|
"tokens": 14802,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section111.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Введение к этапу выявления потребителей Глава 4 Выявление потребителей",
|
||||||
|
"characters": 379,
|
||||||
|
"tokens": 200,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Section13",
|
||||||
|
"characters": 41,
|
||||||
|
"tokens": 40,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Section1301",
|
||||||
|
"characters": 23426,
|
||||||
|
"tokens": 9397,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section1301.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 97760,
|
||||||
|
"tokens": 39133,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Section1401",
|
||||||
|
"characters": 266,
|
||||||
|
"tokens": 133,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section1401.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Section1402",
|
||||||
|
"characters": 97441,
|
||||||
|
"tokens": 39003,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section1402.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 62191,
|
||||||
|
"tokens": 24905,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 53472,
|
||||||
|
"tokens": 21417,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 27287,
|
||||||
|
"tokens": 10943,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Введение к этапу верификации потребителей Глава 9 Верификация потребителей",
|
||||||
|
"characters": 360,
|
||||||
|
"tokens": 194,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Введение к этапу верификации потребителей Во время путешествия мы обычно забываем его цель",
|
||||||
|
"characters": 23873,
|
||||||
|
"tokens": 9606,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 97584,
|
||||||
|
"tokens": 39063,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 86770,
|
||||||
|
"tokens": 34738,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 24160,
|
||||||
|
"tokens": 9694,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 57355,
|
||||||
|
"tokens": 22972,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Section25",
|
||||||
|
"characters": 16946,
|
||||||
|
"tokens": 6802,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Section26",
|
||||||
|
"characters": 316,
|
||||||
|
"tokens": 150,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Section001",
|
||||||
|
"characters": 1495,
|
||||||
|
"tokens": 624,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section001.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Section0001",
|
||||||
|
"characters": 1033,
|
||||||
|
"tokens": 440,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0001.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Section0002",
|
||||||
|
"characters": 1586,
|
||||||
|
"tokens": 661,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0002.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Section0003",
|
||||||
|
"characters": 1365,
|
||||||
|
"tokens": 573,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0003.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Section0004",
|
||||||
|
"characters": 1646,
|
||||||
|
"tokens": 685,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0004.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Section0005",
|
||||||
|
"characters": 1621,
|
||||||
|
"tokens": 675,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0005.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "Section0006",
|
||||||
|
"characters": 843,
|
||||||
|
"tokens": 364,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0006.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "Section0007",
|
||||||
|
"characters": 1229,
|
||||||
|
"tokens": 518,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0007.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "Section0008",
|
||||||
|
"characters": 1079,
|
||||||
|
"tokens": 458,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0008.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "Section0009",
|
||||||
|
"characters": 1101,
|
||||||
|
"tokens": 467,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0009.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "Section0010",
|
||||||
|
"characters": 684,
|
||||||
|
"tokens": 300,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0010.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "Section0011",
|
||||||
|
"characters": 729,
|
||||||
|
"tokens": 318,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0011.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "Section0012",
|
||||||
|
"characters": 817,
|
||||||
|
"tokens": 353,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0012.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 44,
|
||||||
|
"chapterTitle": "Section0013",
|
||||||
|
"characters": 584,
|
||||||
|
"tokens": 260,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0013.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 45,
|
||||||
|
"chapterTitle": "Section0014",
|
||||||
|
"characters": 687,
|
||||||
|
"tokens": 301,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0014.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 46,
|
||||||
|
"chapterTitle": "Section0015",
|
||||||
|
"characters": 701,
|
||||||
|
"tokens": 307,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0015.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 47,
|
||||||
|
"chapterTitle": "Section0016",
|
||||||
|
"characters": 920,
|
||||||
|
"tokens": 395,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0016.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 48,
|
||||||
|
"chapterTitle": "Section0017",
|
||||||
|
"characters": 888,
|
||||||
|
"tokens": 382,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0017.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 49,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 1169,
|
||||||
|
"tokens": 498,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0018.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 50,
|
||||||
|
"chapterTitle": "Section0019",
|
||||||
|
"characters": 1043,
|
||||||
|
"tokens": 444,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0019.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 51,
|
||||||
|
"chapterTitle": "Section0020",
|
||||||
|
"characters": 1327,
|
||||||
|
"tokens": 557,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0020.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 52,
|
||||||
|
"chapterTitle": "Section0021",
|
||||||
|
"characters": 998,
|
||||||
|
"tokens": 426,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0021.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 53,
|
||||||
|
"chapterTitle": "Section0022",
|
||||||
|
"characters": 961,
|
||||||
|
"tokens": 411,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0022.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 54,
|
||||||
|
"chapterTitle": "Section0023",
|
||||||
|
"characters": 1141,
|
||||||
|
"tokens": 483,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0023.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 55,
|
||||||
|
"chapterTitle": "Section0024",
|
||||||
|
"characters": 699,
|
||||||
|
"tokens": 306,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0024.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 56,
|
||||||
|
"chapterTitle": "Section0025",
|
||||||
|
"characters": 556,
|
||||||
|
"tokens": 249,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0025.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 57,
|
||||||
|
"chapterTitle": "Section0026",
|
||||||
|
"characters": 1212,
|
||||||
|
"tokens": 511,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0026.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 58,
|
||||||
|
"chapterTitle": "Section0027",
|
||||||
|
"characters": 800,
|
||||||
|
"tokens": 347,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0027.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 59,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 1081,
|
||||||
|
"tokens": 463,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0028.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 60,
|
||||||
|
"chapterTitle": "Выявление потребителей",
|
||||||
|
"characters": 928,
|
||||||
|
"tokens": 402,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0029.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 61,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 618,
|
||||||
|
"tokens": 279,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0030.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 62,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 1686,
|
||||||
|
"tokens": 706,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0031.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 63,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 988,
|
||||||
|
"tokens": 427,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0032.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 64,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 655,
|
||||||
|
"tokens": 294,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0033.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 65,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 892,
|
||||||
|
"tokens": 388,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0034.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 66,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 1144,
|
||||||
|
"tokens": 489,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0035.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 67,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 1103,
|
||||||
|
"tokens": 473,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0036.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 68,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 599,
|
||||||
|
"tokens": 271,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0037.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 69,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 638,
|
||||||
|
"tokens": 287,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0038.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 70,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 722,
|
||||||
|
"tokens": 320,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0039.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 71,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 466,
|
||||||
|
"tokens": 218,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0040.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 72,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 689,
|
||||||
|
"tokens": 307,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0041.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 73,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 931,
|
||||||
|
"tokens": 404,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0042.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 74,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 732,
|
||||||
|
"tokens": 324,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0043.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 75,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 661,
|
||||||
|
"tokens": 296,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0044.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 76,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 1005,
|
||||||
|
"tokens": 434,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0045.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 77,
|
||||||
|
"chapterTitle": "Section0046",
|
||||||
|
"characters": 584,
|
||||||
|
"tokens": 260,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0046.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 78,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 609,
|
||||||
|
"tokens": 275,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0047.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 79,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 448,
|
||||||
|
"tokens": 211,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0048.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 80,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 642,
|
||||||
|
"tokens": 288,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0049.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 81,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 676,
|
||||||
|
"tokens": 302,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0050.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 82,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 752,
|
||||||
|
"tokens": 332,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0051.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 83,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 1212,
|
||||||
|
"tokens": 516,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0052.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 84,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 572,
|
||||||
|
"tokens": 260,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0053.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 85,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 1044,
|
||||||
|
"tokens": 449,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0054.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 86,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 736,
|
||||||
|
"tokens": 326,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0055.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 87,
|
||||||
|
"chapterTitle": "Верификация потребителей",
|
||||||
|
"characters": 809,
|
||||||
|
"tokens": 355,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0056.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 88,
|
||||||
|
"chapterTitle": "Section27",
|
||||||
|
"characters": 21503,
|
||||||
|
"tokens": 8625,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 89,
|
||||||
|
"chapterTitle": "Section28",
|
||||||
|
"characters": 10016,
|
||||||
|
"tokens": 4030,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section28.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 90,
|
||||||
|
"chapterTitle": "Section29",
|
||||||
|
"characters": 9430,
|
||||||
|
"tokens": 3796,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section29.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 91,
|
||||||
|
"chapterTitle": "Section30",
|
||||||
|
"characters": 6115,
|
||||||
|
"tokens": 2470,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section30.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 92,
|
||||||
|
"chapterTitle": "Section31",
|
||||||
|
"characters": 146,
|
||||||
|
"tokens": 82,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section31.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 93,
|
||||||
|
"chapterTitle": "Link",
|
||||||
|
"characters": 126,
|
||||||
|
"tokens": 68,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/link.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,355 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Стратегия вверх тормашками. Нестандартный подход к маркетингу для малого и среднего бизнеса, который сэкономит вам деньги, время и нервы",
|
||||||
|
"author": "Николай Викторович Молчанов",
|
||||||
|
"totalChapters": 43,
|
||||||
|
"totalCharacters": 293937,
|
||||||
|
"totalTokens": 119060
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Глава 1 Используем психологию – Подводим потребителя к нужному нам выбору",
|
||||||
|
"characters": 5006,
|
||||||
|
"tokens": 2047,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Окружаем «нужный» вариант точками экстремума",
|
||||||
|
"characters": 5734,
|
||||||
|
"tokens": 2326,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Предъявляем «нужный» вариант в правильной последовательности",
|
||||||
|
"characters": 6555,
|
||||||
|
"tokens": 2662,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Делаем цену привлекательной – учитываем особенности восприятия стоимости",
|
||||||
|
"characters": 5789,
|
||||||
|
"tokens": 2359,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Находим и демонстрируем сигналы качества",
|
||||||
|
"characters": 12211,
|
||||||
|
"tokens": 4916,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Глава 2 Используем психологию – Убеждаем покупателя в правильности выбора",
|
||||||
|
"characters": 13520,
|
||||||
|
"tokens": 5453,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Используем эффективную структуру и приемы коммуникации с клиентами",
|
||||||
|
"characters": 5532,
|
||||||
|
"tokens": 2254,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Резонирующий фокус",
|
||||||
|
"characters": 5498,
|
||||||
|
"tokens": 2222,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Акцентируем внимание не только на преимуществах покупки, но и на угрозах в случае отказа от нее",
|
||||||
|
"characters": 5053,
|
||||||
|
"tokens": 2075,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Контролируем: мы предлагаем выбрать что-то или отказаться от чего-то",
|
||||||
|
"characters": 10044,
|
||||||
|
"tokens": 4060,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Глава 3 Перекрываем каналы утечки выручки",
|
||||||
|
"characters": 9698,
|
||||||
|
"tokens": 3912,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Самая распространенная проблема «входа» в воронку продаж – о компании знают, но не те, кто надо",
|
||||||
|
"characters": 5519,
|
||||||
|
"tokens": 2262,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Самый забытый этап – жизнь после покупки",
|
||||||
|
"characters": 8557,
|
||||||
|
"tokens": 3455,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Часть II Готовимся к росту – укрепляем положение на рынке",
|
||||||
|
"characters": 6257,
|
||||||
|
"tokens": 2541,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Правила проведения сегментации потребителей",
|
||||||
|
"characters": 5837,
|
||||||
|
"tokens": 2368,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Вычисляем «мертвые души» среди лояльных клиентов",
|
||||||
|
"characters": 6409,
|
||||||
|
"tokens": 2599,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Глава 5 Достигаем превосходства над конкурентами",
|
||||||
|
"characters": 5818,
|
||||||
|
"tokens": 2363,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Определяем временной горизонт анализа",
|
||||||
|
"characters": 9057,
|
||||||
|
"tokens": 3653,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Определяем конкурентные силы",
|
||||||
|
"characters": 5350,
|
||||||
|
"tokens": 2168,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Оцениваем имеющиеся конкурентные преимущества",
|
||||||
|
"characters": 7262,
|
||||||
|
"tokens": 2939,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Выбираем основу для конкурентного преимущества",
|
||||||
|
"characters": 6550,
|
||||||
|
"tokens": 2655,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Находим свое конкурентное преимущество",
|
||||||
|
"characters": 9944,
|
||||||
|
"tokens": 4009,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Проверяем проблемы ценовой политики",
|
||||||
|
"characters": 6039,
|
||||||
|
"tokens": 2446,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Запускаем процесс ценообразования",
|
||||||
|
"characters": 5661,
|
||||||
|
"tokens": 2294,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Решаем вопрос с политикой скидок",
|
||||||
|
"characters": 9693,
|
||||||
|
"tokens": 3906,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Часть III Устремляемся в счастливое будущее – завоевываем рынки и потребителей",
|
||||||
|
"characters": 9156,
|
||||||
|
"tokens": 3710,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Обезвреживаем бомбу оптимистичного планирования",
|
||||||
|
"characters": 6450,
|
||||||
|
"tokens": 2615,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Повышаем точность прогнозирования",
|
||||||
|
"characters": 5671,
|
||||||
|
"tokens": 2298,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Глава 8 Выходим на новые рынки",
|
||||||
|
"characters": 7586,
|
||||||
|
"tokens": 3063,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content28.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Создаем маркетинговые возможности",
|
||||||
|
"characters": 4856,
|
||||||
|
"tokens": 1972,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content29.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Запускаем новые продукты",
|
||||||
|
"characters": 5262,
|
||||||
|
"tokens": 2130,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content30.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Инновация привлекательна, но с точки зрения компании",
|
||||||
|
"characters": 7096,
|
||||||
|
"tokens": 2875,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content31.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Новый продукт понятен, привлекателен, но требует изменить поведение потребителя",
|
||||||
|
"characters": 7364,
|
||||||
|
"tokens": 2993,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content32.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Создайте собственный миф",
|
||||||
|
"characters": 4951,
|
||||||
|
"tokens": 2006,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content33.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Сохраняйте позиционирование, выходя в новые сегменты рынка",
|
||||||
|
"characters": 5691,
|
||||||
|
"tokens": 2316,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content34.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Вступаем в борьбу с конкурентами",
|
||||||
|
"characters": 5128,
|
||||||
|
"tokens": 2080,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content35.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "Глава 9 Готовим ответственного за изменения",
|
||||||
|
"characters": 8503,
|
||||||
|
"tokens": 3435,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content36.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "Учимся принимать верные решения",
|
||||||
|
"characters": 8395,
|
||||||
|
"tokens": 3387,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content37.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "Не принимайте пустяковых решений",
|
||||||
|
"characters": 10870,
|
||||||
|
"tokens": 4377,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content38.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "Решаем – верить ли цифрам",
|
||||||
|
"characters": 5917,
|
||||||
|
"tokens": 2393,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content39.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "Вместо заключения История производителя туалетной бумаги",
|
||||||
|
"characters": 5092,
|
||||||
|
"tokens": 2075,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content40.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "Избегайте стратегии верблюда",
|
||||||
|
"characters": 3277,
|
||||||
|
"tokens": 1338,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content41.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "Сноски",
|
||||||
|
"characters": 79,
|
||||||
|
"tokens": 53,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "contentnotes0.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,275 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Управление цепочками поставок и логистикой — простыми словами: Методы и практика планирования, построения, обслуживания, контроля и расширения системы перевозок и снабжения",
|
||||||
|
"author": "Пол Майерсон",
|
||||||
|
"totalChapters": 33,
|
||||||
|
"totalCharacters": 563591,
|
||||||
|
"totalTokens": 226469
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Content01",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 22,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content01.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Desc",
|
||||||
|
"characters": 897,
|
||||||
|
"tokens": 374,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/desc.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Content03",
|
||||||
|
"characters": 3103,
|
||||||
|
"tokens": 1263,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content03.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Content04",
|
||||||
|
"characters": 288,
|
||||||
|
"tokens": 137,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content04.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Предисловие к русскому изданию",
|
||||||
|
"characters": 3113,
|
||||||
|
"tokens": 1276,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content05.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Управление цепочками поставок и логистикой: общая информация",
|
||||||
|
"characters": 7,
|
||||||
|
"tokens": 42,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/chast1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Интегрированная цепочка поставок с добавленной ценностью",
|
||||||
|
"characters": 20935,
|
||||||
|
"tokens": 8414,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Подробнее о цепочке поставок",
|
||||||
|
"characters": 31749,
|
||||||
|
"tokens": 12728,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Планирование в рамках цепочки поставок",
|
||||||
|
"characters": 8,
|
||||||
|
"tokens": 34,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/chast2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "«Полный газ, смотрим в зеркало заднего вида» — таким было прогнозирование раньше",
|
||||||
|
"characters": 33358,
|
||||||
|
"tokens": 13393,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Планирование и контроль запасов",
|
||||||
|
"characters": 30024,
|
||||||
|
"tokens": 12039,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Совокупное и календарное планирование",
|
||||||
|
"characters": 37184,
|
||||||
|
"tokens": 14905,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Функционирование цепочки поставок",
|
||||||
|
"characters": 9,
|
||||||
|
"tokens": 33,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/chast3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Снабжение в цепочке поставок",
|
||||||
|
"characters": 29761,
|
||||||
|
"tokens": 11933,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Транспортные системы",
|
||||||
|
"characters": 48575,
|
||||||
|
"tokens": 19456,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Управление складскими операциями",
|
||||||
|
"characters": 41449,
|
||||||
|
"tokens": 16609,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Управление заказами и отношениями с клиентами",
|
||||||
|
"characters": 16485,
|
||||||
|
"tokens": 6630,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Обратная логистика и устойчивое развитие",
|
||||||
|
"characters": 31764,
|
||||||
|
"tokens": 12740,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Операции в глобальных цепях поставок и управление рисками",
|
||||||
|
"characters": 28157,
|
||||||
|
"tokens": 11303,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Интеграция и сотрудничество по цепочкам поставок",
|
||||||
|
"characters": 8,
|
||||||
|
"tokens": 39,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/chast4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Партнеры по цепочкам поставок",
|
||||||
|
"characters": 22428,
|
||||||
|
"tokens": 9001,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Интеграция цепочек поставок через системы сотрудничества",
|
||||||
|
"characters": 22004,
|
||||||
|
"tokens": 8842,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Технологии для цепочек поставок",
|
||||||
|
"characters": 27582,
|
||||||
|
"tokens": 11063,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Проектирование сетей цепочек поставок и логистики",
|
||||||
|
"characters": 7,
|
||||||
|
"tokens": 38,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/chast5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Выбор места для склада",
|
||||||
|
"characters": 36189,
|
||||||
|
"tokens": 14502,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Решения по зонированию склада",
|
||||||
|
"characters": 24674,
|
||||||
|
"tokens": 9899,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Измерение, контроль и совершенствование цепочек поставок и логистики",
|
||||||
|
"characters": 8,
|
||||||
|
"tokens": 47,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/chast6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Показатели и средства измерения",
|
||||||
|
"characters": 19056,
|
||||||
|
"tokens": 7653,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Бережливое и гибкое мышление в цепочках поставок и логистике",
|
||||||
|
"characters": 33058,
|
||||||
|
"tokens": 13266,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Перспективы управления цепочками поставок и логистикой",
|
||||||
|
"characters": 17545,
|
||||||
|
"tokens": 7058,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Section0001",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 27,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/Section0001.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Link",
|
||||||
|
"characters": 3484,
|
||||||
|
"tokens": 1409,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/link.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Content02",
|
||||||
|
"characters": 682,
|
||||||
|
"tokens": 294,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "Text/content02.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,395 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Управляя кризисом. Как выращивать успешные компании",
|
||||||
|
"author": "Дмитрий Симоненко",
|
||||||
|
"totalChapters": 48,
|
||||||
|
"totalCharacters": 369691,
|
||||||
|
"totalTokens": 149275
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Дмитрий Симоненко Управляя кризисом: Как выращивать успешные компании",
|
||||||
|
"characters": 5482,
|
||||||
|
"tokens": 2235,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Зачем покупают бизнес?",
|
||||||
|
"characters": 5896,
|
||||||
|
"tokens": 2382,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Глава 1 Зачем и для кого я пишу эту книгу?",
|
||||||
|
"characters": 7776,
|
||||||
|
"tokens": 3142,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Чему не научат в бизнес-школах",
|
||||||
|
"characters": 6528,
|
||||||
|
"tokens": 2639,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Зачем нужна эта книга?",
|
||||||
|
"characters": 9835,
|
||||||
|
"tokens": 3958,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Что с этим делать?",
|
||||||
|
"characters": 8431,
|
||||||
|
"tokens": 3395,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Точка опоры предпринимателя",
|
||||||
|
"characters": 21302,
|
||||||
|
"tokens": 8546,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Глава 3 Где брать идеи и как превращать их в бизнес?",
|
||||||
|
"characters": 6323,
|
||||||
|
"tokens": 2565,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Крутая идея – плохое решение",
|
||||||
|
"characters": 9821,
|
||||||
|
"tokens": 3955,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Конкурентное преимущество: время и место",
|
||||||
|
"characters": 7145,
|
||||||
|
"tokens": 2890,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Глава 4 Как написать бизнес-план на $100 млн?",
|
||||||
|
"characters": 8442,
|
||||||
|
"tokens": 3411,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "От кофемолки к роботам",
|
||||||
|
"characters": 5894,
|
||||||
|
"tokens": 2382,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Роботы: техзадание и первые клиенты",
|
||||||
|
"characters": 8068,
|
||||||
|
"tokens": 3258,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Глава 5 Как нанять и удержать лучших людей",
|
||||||
|
"characters": 5102,
|
||||||
|
"tokens": 2073,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Лубянка и французский заговор",
|
||||||
|
"characters": 8844,
|
||||||
|
"tokens": 3565,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Почему Ирландия?",
|
||||||
|
"characters": 6111,
|
||||||
|
"tokens": 2467,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Женщины и амбиции",
|
||||||
|
"characters": 7536,
|
||||||
|
"tokens": 3037,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Итоги: как найти и нанять лучших людей",
|
||||||
|
"characters": 6837,
|
||||||
|
"tokens": 2766,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Балу – учитель и систематизатор",
|
||||||
|
"characters": 8741,
|
||||||
|
"tokens": 3525,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Кто и когда нужен?",
|
||||||
|
"characters": 6035,
|
||||||
|
"tokens": 2438,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Итоги: 4 этапа создания команды мечты",
|
||||||
|
"characters": 5482,
|
||||||
|
"tokens": 2223,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Глава 7 СКольких вынесет Боливар? / Партнеры и стейкхолдеры",
|
||||||
|
"characters": 7174,
|
||||||
|
"tokens": 2909,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Как правильно выбирать партнеров и инвесторов",
|
||||||
|
"characters": 6502,
|
||||||
|
"tokens": 2635,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Глава 8 Инвестиции: умные деньги и токсичные инвесторы",
|
||||||
|
"characters": 8352,
|
||||||
|
"tokens": 3378,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Ангелы и демоны",
|
||||||
|
"characters": 5428,
|
||||||
|
"tokens": 2194,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Бизнес-ангел мошенник: как я привлек деньги в Plesk",
|
||||||
|
"characters": 7745,
|
||||||
|
"tokens": 3135,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Венчурные фонды",
|
||||||
|
"characters": 7702,
|
||||||
|
"tokens": 3103,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Итоги: глупые и умные деньги",
|
||||||
|
"characters": 11463,
|
||||||
|
"tokens": 4613,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content27.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Глава 9 Сколько денег нужно для бизнеса и когда их привлекать?",
|
||||||
|
"characters": 6073,
|
||||||
|
"tokens": 2470,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content28.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Квант инвестиций: сколько нужно денег?",
|
||||||
|
"characters": 7848,
|
||||||
|
"tokens": 3171,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content29.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Кэшаут: как вынуть деньги и не пустить бизнес под откос?",
|
||||||
|
"characters": 10032,
|
||||||
|
"tokens": 4051,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content30.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Глава 10 Кто я такой?",
|
||||||
|
"characters": 8612,
|
||||||
|
"tokens": 3469,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content31.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Позитивный взгляд и иллюзии",
|
||||||
|
"characters": 5460,
|
||||||
|
"tokens": 2211,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content32.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "видов конкурентных преимуществ",
|
||||||
|
"characters": 5869,
|
||||||
|
"tokens": 2376,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content33.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Глава 11 Как создать высокотехнологичное производство?",
|
||||||
|
"characters": 8490,
|
||||||
|
"tokens": 3434,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content34.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Как это работает?",
|
||||||
|
"characters": 7398,
|
||||||
|
"tokens": 2982,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content35.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "Незнание есть благословение?",
|
||||||
|
"characters": 6937,
|
||||||
|
"tokens": 2802,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content36.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "Глава 12 Как выйти на международный уровень (И стоит ли)?",
|
||||||
|
"characters": 8643,
|
||||||
|
"tokens": 3496,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content37.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "Стратегия развития",
|
||||||
|
"characters": 8681,
|
||||||
|
"tokens": 3496,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content38.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "Сильные стороны России",
|
||||||
|
"characters": 7642,
|
||||||
|
"tokens": 3081,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content39.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "Глава 13 Проблема роста?",
|
||||||
|
"characters": 5809,
|
||||||
|
"tokens": 2349,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content40.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "Кризис № 1. Как стать предпринимателем",
|
||||||
|
"characters": 6608,
|
||||||
|
"tokens": 2675,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content41.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "Кризис № 2. Проблема роста",
|
||||||
|
"characters": 6077,
|
||||||
|
"tokens": 2457,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content42.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 44,
|
||||||
|
"chapterTitle": "Нужно ли бизнесмену МВА?",
|
||||||
|
"characters": 5935,
|
||||||
|
"tokens": 2400,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content43.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 45,
|
||||||
|
"chapterTitle": "Глава 14 Как продать компанию?",
|
||||||
|
"characters": 6882,
|
||||||
|
"tokens": 2781,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content44.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 46,
|
||||||
|
"chapterTitle": "Зачем покупать бизнес?",
|
||||||
|
"characters": 5825,
|
||||||
|
"tokens": 2355,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content45.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 47,
|
||||||
|
"chapterTitle": "Как подготовить бизнес к продаже?",
|
||||||
|
"characters": 7628,
|
||||||
|
"tokens": 3081,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content46.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 48,
|
||||||
|
"chapterTitle": "Заключение",
|
||||||
|
"characters": 13245,
|
||||||
|
"tokens": 5319,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content47.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Фиолетовая корова. Сделайте свой бизнес выдающимся!",
|
||||||
|
"author": "Сет Годин",
|
||||||
|
"totalChapters": 28,
|
||||||
|
"totalCharacters": 208945,
|
||||||
|
"totalTokens": 84453
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Сет Годин Фиолетовая корова. Сделайте свой бизнес выдающимся!",
|
||||||
|
"characters": 5342,
|
||||||
|
"tokens": 2176,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content0.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Величайшая идея нарезанного хлеба",
|
||||||
|
"characters": 5170,
|
||||||
|
"tokens": 2097,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content1.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Почему вам нужна Фиолетовая корова",
|
||||||
|
"characters": 8074,
|
||||||
|
"tokens": 3258,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content2.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Смерть телевизионнопромышленного комплекса",
|
||||||
|
"characters": 7067,
|
||||||
|
"tokens": 2858,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content3.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "ПРЕДСТАВЛЯЕМ НОВОЕ ИМЯ KPMG В КОНСАЛТИНГЕ И НОВУЮ ЭРУ В УПРАВЛЕНИИ",
|
||||||
|
"characters": 5999,
|
||||||
|
"tokens": 2441,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content4.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Пример: что должен делать Tide?",
|
||||||
|
"characters": 6163,
|
||||||
|
"tokens": 2493,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content5.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Проникновение на рынок",
|
||||||
|
"characters": 5564,
|
||||||
|
"tokens": 2249,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content6.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Идеи, которые распространяются и побеждают",
|
||||||
|
"characters": 5489,
|
||||||
|
"tokens": 2227,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content7.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Кто слушает?",
|
||||||
|
"characters": 5697,
|
||||||
|
"tokens": 2298,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content8.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Кого это волнует?",
|
||||||
|
"characters": 7680,
|
||||||
|
"tokens": 3094,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content9.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Проблема с Коровой…",
|
||||||
|
"characters": 11749,
|
||||||
|
"tokens": 4723,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content10.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Прогнозы, доходы и Фиолетовая корова",
|
||||||
|
"characters": 10900,
|
||||||
|
"tokens": 4391,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content11.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Анализ эффективности на массовом рынке",
|
||||||
|
"characters": 7115,
|
||||||
|
"tokens": 2878,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content12.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Преимущества Фиолетовой коровы",
|
||||||
|
"characters": 5292,
|
||||||
|
"tokens": 2145,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content13.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "Антоним слова «выдающийся»",
|
||||||
|
"characters": 6267,
|
||||||
|
"tokens": 2533,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content14.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Семьдесят два альбома группы Pearl Jam",
|
||||||
|
"characters": 5539,
|
||||||
|
"tokens": 2247,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content15.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Пример: почтовая служба США",
|
||||||
|
"characters": 5268,
|
||||||
|
"tokens": 2134,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content16.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Пример: как компания Dutch Boy перевернула весь лакокрасочный бизнес",
|
||||||
|
"characters": 5751,
|
||||||
|
"tokens": 2344,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content17.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Продавайте то, что покупают (и о чем говорят)",
|
||||||
|
"characters": 6557,
|
||||||
|
"tokens": 2657,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content18.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Магический цикл Фиолетовой коровы",
|
||||||
|
"characters": 6625,
|
||||||
|
"tokens": 2680,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content19.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Что сегодня означает выражение «заниматься маркетингом»?",
|
||||||
|
"characters": 10495,
|
||||||
|
"tokens": 4237,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content20.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Нужно ли быть возмутительным и скандальным, чтобы стать выдающимся?",
|
||||||
|
"characters": 6783,
|
||||||
|
"tokens": 2756,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content21.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Что должны делать в Hallmark.com?",
|
||||||
|
"characters": 6292,
|
||||||
|
"tokens": 2546,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content22.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Пример: Трейси, специалист по печати и рекламе",
|
||||||
|
"characters": 5558,
|
||||||
|
"tokens": 2258,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content23.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Обязательно ли «вкладывать душу»?",
|
||||||
|
"characters": 9550,
|
||||||
|
"tokens": 3850,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content24.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Реальные факты",
|
||||||
|
"characters": 27628,
|
||||||
|
"tokens": 11073,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content25.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Соль – совсем не скучный продукт, или Еще восемь способов заставить работать Фиолетовую корову",
|
||||||
|
"characters": 4731,
|
||||||
|
"tokens": 1946,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "content26.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Примечания",
|
||||||
|
"characters": 4600,
|
||||||
|
"tokens": 1864,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "contentnotes0.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,579 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Чему я научился, потеряв миллион долларов",
|
||||||
|
"author": "Джим Пол, Брендан Мойнихан",
|
||||||
|
"totalChapters": 71,
|
||||||
|
"totalCharacters": 346154,
|
||||||
|
"totalTokens": 143210
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "Предисловие",
|
||||||
|
"characters": 3558,
|
||||||
|
"tokens": 1445,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "index_split_000.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "Предисловие к изданию Columbia Business School publishing",
|
||||||
|
"characters": 3378,
|
||||||
|
"tokens": 1391,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "index_split_001.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Зачем писать книгу о проигрыше?",
|
||||||
|
"characters": 9846,
|
||||||
|
"tokens": 3968,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "index_split_002.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Записки трейдера",
|
||||||
|
"characters": 5989,
|
||||||
|
"tokens": 2419,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_003.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "Голодное детство",
|
||||||
|
"characters": 11269,
|
||||||
|
"tokens": 4531,
|
||||||
|
"footnotesCount": 4,
|
||||||
|
"filePath": "index_split_004.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "Джин — это напиток или игра?",
|
||||||
|
"characters": 41227,
|
||||||
|
"tokens": 16519,
|
||||||
|
"footnotesCount": 5,
|
||||||
|
"filePath": "index_split_005.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "Как работать на бирже",
|
||||||
|
"characters": 15896,
|
||||||
|
"tokens": 6384,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "index_split_006.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "Фиаско арабского скакуна",
|
||||||
|
"characters": 36627,
|
||||||
|
"tokens": 14677,
|
||||||
|
"footnotesCount": 11,
|
||||||
|
"filePath": "index_split_007.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "Как зарабатывают профессионалы?",
|
||||||
|
"characters": 9576,
|
||||||
|
"tokens": 3860,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_008.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "Плевать на традиции?",
|
||||||
|
"characters": 9541,
|
||||||
|
"tokens": 3842,
|
||||||
|
"footnotesCount": 3,
|
||||||
|
"filePath": "index_split_009.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "Как потеря на рынке становится внутренней",
|
||||||
|
"characters": 25321,
|
||||||
|
"tokens": 10162,
|
||||||
|
"footnotesCount": 3,
|
||||||
|
"filePath": "index_split_010.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "Как поведенческие характеристики определяют суть деятельности",
|
||||||
|
"characters": 30941,
|
||||||
|
"tokens": 12418,
|
||||||
|
"footnotesCount": 4,
|
||||||
|
"filePath": "index_split_011.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "Общепринятый взгляд на поведение толпы",
|
||||||
|
"characters": 29415,
|
||||||
|
"tokens": 11799,
|
||||||
|
"footnotesCount": 8,
|
||||||
|
"filePath": "index_split_012.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "Как действовать в условиях неопределенности",
|
||||||
|
"characters": 63379,
|
||||||
|
"tokens": 25386,
|
||||||
|
"footnotesCount": 9,
|
||||||
|
"filePath": "index_split_013.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "А что если...",
|
||||||
|
"characters": 13029,
|
||||||
|
"tokens": 5234,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "index_split_014.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "Постскриптум",
|
||||||
|
"characters": 19609,
|
||||||
|
"tokens": 7865,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "index_split_015.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "Приложение",
|
||||||
|
"characters": 3933,
|
||||||
|
"tokens": 1595,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "index_split_016.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "Примечания",
|
||||||
|
"characters": 6139,
|
||||||
|
"tokens": 2501,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_017.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "Index Split 018",
|
||||||
|
"characters": 111,
|
||||||
|
"tokens": 112,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_018.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "Index Split 019",
|
||||||
|
"characters": 88,
|
||||||
|
"tokens": 94,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_019.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "Index Split 020",
|
||||||
|
"characters": 57,
|
||||||
|
"tokens": 68,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_020.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "Index Split 021",
|
||||||
|
"characters": 59,
|
||||||
|
"tokens": 70,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_021.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "Index Split 022",
|
||||||
|
"characters": 178,
|
||||||
|
"tokens": 166,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_022.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "Index Split 023",
|
||||||
|
"characters": 90,
|
||||||
|
"tokens": 96,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_023.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "Index Split 024",
|
||||||
|
"characters": 184,
|
||||||
|
"tokens": 170,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_024.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "Index Split 025",
|
||||||
|
"characters": 93,
|
||||||
|
"tokens": 98,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_025.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "Index Split 026",
|
||||||
|
"characters": 124,
|
||||||
|
"tokens": 122,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_026.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "Index Split 027",
|
||||||
|
"characters": 100,
|
||||||
|
"tokens": 104,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_027.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "Index Split 028",
|
||||||
|
"characters": 147,
|
||||||
|
"tokens": 140,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_028.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "Index Split 029",
|
||||||
|
"characters": 175,
|
||||||
|
"tokens": 164,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_029.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "Index Split 030",
|
||||||
|
"characters": 92,
|
||||||
|
"tokens": 96,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_030.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "Index Split 031",
|
||||||
|
"characters": 92,
|
||||||
|
"tokens": 96,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_031.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "Index Split 032",
|
||||||
|
"characters": 220,
|
||||||
|
"tokens": 200,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_032.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "Index Split 033",
|
||||||
|
"characters": 65,
|
||||||
|
"tokens": 76,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_033.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "Index Split 034",
|
||||||
|
"characters": 85,
|
||||||
|
"tokens": 92,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_034.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "Index Split 035",
|
||||||
|
"characters": 154,
|
||||||
|
"tokens": 146,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_035.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "Index Split 036",
|
||||||
|
"characters": 137,
|
||||||
|
"tokens": 132,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_036.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "Index Split 037",
|
||||||
|
"characters": 57,
|
||||||
|
"tokens": 68,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_037.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "Index Split 038",
|
||||||
|
"characters": 158,
|
||||||
|
"tokens": 150,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_038.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "Index Split 039",
|
||||||
|
"characters": 111,
|
||||||
|
"tokens": 112,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_039.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "Index Split 040",
|
||||||
|
"characters": 94,
|
||||||
|
"tokens": 98,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_040.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "Index Split 041",
|
||||||
|
"characters": 94,
|
||||||
|
"tokens": 98,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_041.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "Index Split 042",
|
||||||
|
"characters": 201,
|
||||||
|
"tokens": 184,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_042.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 44,
|
||||||
|
"chapterTitle": "Index Split 043",
|
||||||
|
"characters": 213,
|
||||||
|
"tokens": 194,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_043.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 45,
|
||||||
|
"chapterTitle": "Index Split 044",
|
||||||
|
"characters": 227,
|
||||||
|
"tokens": 204,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_044.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 46,
|
||||||
|
"chapterTitle": "Index Split 045",
|
||||||
|
"characters": 55,
|
||||||
|
"tokens": 68,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_045.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 47,
|
||||||
|
"chapterTitle": "Index Split 046",
|
||||||
|
"characters": 170,
|
||||||
|
"tokens": 160,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_046.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 48,
|
||||||
|
"chapterTitle": "Index Split 047",
|
||||||
|
"characters": 143,
|
||||||
|
"tokens": 138,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_047.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 49,
|
||||||
|
"chapterTitle": "Index Split 048",
|
||||||
|
"characters": 149,
|
||||||
|
"tokens": 142,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_048.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 50,
|
||||||
|
"chapterTitle": "Index Split 049",
|
||||||
|
"characters": 116,
|
||||||
|
"tokens": 116,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_049.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 51,
|
||||||
|
"chapterTitle": "Index Split 050",
|
||||||
|
"characters": 137,
|
||||||
|
"tokens": 132,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_050.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 52,
|
||||||
|
"chapterTitle": "Index Split 051",
|
||||||
|
"characters": 136,
|
||||||
|
"tokens": 132,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_051.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 53,
|
||||||
|
"chapterTitle": "Index Split 052",
|
||||||
|
"characters": 118,
|
||||||
|
"tokens": 118,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_052.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 54,
|
||||||
|
"chapterTitle": "Index Split 053",
|
||||||
|
"characters": 87,
|
||||||
|
"tokens": 92,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_053.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 55,
|
||||||
|
"chapterTitle": "Index Split 054",
|
||||||
|
"characters": 78,
|
||||||
|
"tokens": 86,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_054.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 56,
|
||||||
|
"chapterTitle": "Index Split 055",
|
||||||
|
"characters": 127,
|
||||||
|
"tokens": 124,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_055.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 57,
|
||||||
|
"chapterTitle": "Index Split 056",
|
||||||
|
"characters": 189,
|
||||||
|
"tokens": 174,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_056.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 58,
|
||||||
|
"chapterTitle": "Index Split 057",
|
||||||
|
"characters": 72,
|
||||||
|
"tokens": 80,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_057.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 59,
|
||||||
|
"chapterTitle": "Index Split 058",
|
||||||
|
"characters": 415,
|
||||||
|
"tokens": 356,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_058.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 60,
|
||||||
|
"chapterTitle": "Index Split 059",
|
||||||
|
"characters": 182,
|
||||||
|
"tokens": 168,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_059.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 61,
|
||||||
|
"chapterTitle": "Index Split 060",
|
||||||
|
"characters": 195,
|
||||||
|
"tokens": 180,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_060.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 62,
|
||||||
|
"chapterTitle": "Index Split 061",
|
||||||
|
"characters": 264,
|
||||||
|
"tokens": 234,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_061.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 63,
|
||||||
|
"chapterTitle": "Index Split 062",
|
||||||
|
"characters": 207,
|
||||||
|
"tokens": 188,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_062.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 64,
|
||||||
|
"chapterTitle": "Index Split 063",
|
||||||
|
"characters": 235,
|
||||||
|
"tokens": 212,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_063.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 65,
|
||||||
|
"chapterTitle": "Index Split 064",
|
||||||
|
"characters": 266,
|
||||||
|
"tokens": 236,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_064.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 66,
|
||||||
|
"chapterTitle": "Index Split 065",
|
||||||
|
"characters": 80,
|
||||||
|
"tokens": 88,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_065.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 67,
|
||||||
|
"chapterTitle": "Index Split 066",
|
||||||
|
"characters": 137,
|
||||||
|
"tokens": 132,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_066.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 68,
|
||||||
|
"chapterTitle": "Index Split 067",
|
||||||
|
"characters": 103,
|
||||||
|
"tokens": 106,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_067.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 69,
|
||||||
|
"chapterTitle": "Index Split 068",
|
||||||
|
"characters": 91,
|
||||||
|
"tokens": 96,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_068.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 70,
|
||||||
|
"chapterTitle": "Index Split 069",
|
||||||
|
"characters": 168,
|
||||||
|
"tokens": 158,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_069.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 71,
|
||||||
|
"chapterTitle": "Index Split 070",
|
||||||
|
"characters": 155,
|
||||||
|
"tokens": 148,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "index_split_070.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
547
books/statistics/Шесть гениев команды_statistics.json
Normal file
547
books/statistics/Шесть гениев команды_statistics.json
Normal file
@@ -0,0 +1,547 @@
|
|||||||
|
{
|
||||||
|
"book": {
|
||||||
|
"title": "Шесть гениев команды",
|
||||||
|
"author": "Патрик Ленсиони",
|
||||||
|
"totalChapters": 67,
|
||||||
|
"totalCharacters": 211676,
|
||||||
|
"totalTokens": 86019
|
||||||
|
},
|
||||||
|
"chapters": [
|
||||||
|
{
|
||||||
|
"chapterNumber": 1,
|
||||||
|
"chapterTitle": "A BETTER WAY TO UNDERSTAND YOUR GIFTS, YOUR FRUSTRATIONS, AND YOUR TEAM",
|
||||||
|
"characters": 60,
|
||||||
|
"tokens": 66,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 2,
|
||||||
|
"chapterTitle": "КАК СПОСОБНОСТИ КАЖДОГО УСИЛИВАЮТ ОБЩИЙ РЕЗУЛЬТАТ",
|
||||||
|
"characters": 37,
|
||||||
|
"tokens": 47,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "t2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 3,
|
||||||
|
"chapterTitle": "Информацияот издательства",
|
||||||
|
"characters": 1250,
|
||||||
|
"tokens": 525,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "inf.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 4,
|
||||||
|
"chapterTitle": "Posv",
|
||||||
|
"characters": 115,
|
||||||
|
"tokens": 63,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "posv.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 5,
|
||||||
|
"chapterTitle": "ВВЕДЕНИЕ",
|
||||||
|
"characters": 2935,
|
||||||
|
"tokens": 1191,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "vv.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 6,
|
||||||
|
"chapterTitle": "ПРИТЧА",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 16,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 7,
|
||||||
|
"chapterTitle": "J. O. B.",
|
||||||
|
"characters": 1179,
|
||||||
|
"tokens": 488,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 8,
|
||||||
|
"chapterTitle": "РАБОТА",
|
||||||
|
"characters": 1411,
|
||||||
|
"tokens": 580,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 9,
|
||||||
|
"chapterTitle": "ГАЗОНОКОСИЛЬЩИК",
|
||||||
|
"characters": 1272,
|
||||||
|
"tokens": 528,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 10,
|
||||||
|
"chapterTitle": "G4",
|
||||||
|
"characters": 2683,
|
||||||
|
"tokens": 1087,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g4.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 11,
|
||||||
|
"chapterTitle": "НЕОПРЕДЕЛЕННОСТЬ",
|
||||||
|
"characters": 2164,
|
||||||
|
"tokens": 885,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g5.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 12,
|
||||||
|
"chapterTitle": "НОВЫЙ ФАЛЬСТАРТ",
|
||||||
|
"characters": 1124,
|
||||||
|
"tokens": 469,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g6.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 13,
|
||||||
|
"chapterTitle": "ВОСКРЕСНАЯ ТОСКА",
|
||||||
|
"characters": 979,
|
||||||
|
"tokens": 411,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g7.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 14,
|
||||||
|
"chapterTitle": "ОТЧАЯНИЕ",
|
||||||
|
"characters": 2123,
|
||||||
|
"tokens": 866,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g8.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 15,
|
||||||
|
"chapterTitle": "БЛАЖЕННОЕ НЕВЕДЕНИЕ",
|
||||||
|
"characters": 2080,
|
||||||
|
"tokens": 853,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g9.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 16,
|
||||||
|
"chapterTitle": "МОНТАЖ",
|
||||||
|
"characters": 770,
|
||||||
|
"tokens": 325,
|
||||||
|
"footnotesCount": 1,
|
||||||
|
"filePath": "g10.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 17,
|
||||||
|
"chapterTitle": "ПОЗДРАВЛЯЕМ, У ВАС ВСЕ ПЛОХО",
|
||||||
|
"characters": 5390,
|
||||||
|
"tokens": 2182,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g11.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 18,
|
||||||
|
"chapterTitle": "РЕКРУТЕР",
|
||||||
|
"characters": 1212,
|
||||||
|
"tokens": 502,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g12.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 19,
|
||||||
|
"chapterTitle": "МОНТАЖ-2",
|
||||||
|
"characters": 1125,
|
||||||
|
"tokens": 468,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g13.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 20,
|
||||||
|
"chapterTitle": "СЛИЯНИЕ",
|
||||||
|
"characters": 2243,
|
||||||
|
"tokens": 914,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g14.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 21,
|
||||||
|
"chapterTitle": "ПРИЗНАНИЕ",
|
||||||
|
"characters": 3666,
|
||||||
|
"tokens": 1484,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g15.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 22,
|
||||||
|
"chapterTitle": "ПЕРЕДЫШКА",
|
||||||
|
"characters": 4276,
|
||||||
|
"tokens": 1728,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g16.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 23,
|
||||||
|
"chapterTitle": "СВАРЛИВОСТЬ",
|
||||||
|
"characters": 1678,
|
||||||
|
"tokens": 690,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g17.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 24,
|
||||||
|
"chapterTitle": "ВОПРОС",
|
||||||
|
"characters": 3722,
|
||||||
|
"tokens": 1505,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g18.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 25,
|
||||||
|
"chapterTitle": "В ТУМАНЕ",
|
||||||
|
"characters": 3012,
|
||||||
|
"tokens": 1222,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g19.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 26,
|
||||||
|
"chapterTitle": "ДОПРОС С ПРИСТРАСТИЕМ",
|
||||||
|
"characters": 1718,
|
||||||
|
"tokens": 710,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g20.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 27,
|
||||||
|
"chapterTitle": "ФРАГМЕНТАРНО",
|
||||||
|
"characters": 3117,
|
||||||
|
"tokens": 1265,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g21.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 28,
|
||||||
|
"chapterTitle": "ВЕСЬ АССОРТИМЕНТ",
|
||||||
|
"characters": 4278,
|
||||||
|
"tokens": 1732,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g22.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 29,
|
||||||
|
"chapterTitle": "УТОЧНЕНИЕ",
|
||||||
|
"characters": 2313,
|
||||||
|
"tokens": 943,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g23.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 30,
|
||||||
|
"chapterTitle": "ПРОРЫВ",
|
||||||
|
"characters": 3125,
|
||||||
|
"tokens": 1267,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g24.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 31,
|
||||||
|
"chapterTitle": "ТРИГГЕР",
|
||||||
|
"characters": 2243,
|
||||||
|
"tokens": 914,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g25.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 32,
|
||||||
|
"chapterTitle": "ПОДГОНЯЛЬЩИК",
|
||||||
|
"characters": 2231,
|
||||||
|
"tokens": 911,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g26.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 33,
|
||||||
|
"chapterTitle": "СПЕЦИФИКА",
|
||||||
|
"characters": 1759,
|
||||||
|
"tokens": 721,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g27.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 34,
|
||||||
|
"chapterTitle": "ПОРЯДОК ВЕЩЕЙ",
|
||||||
|
"characters": 9282,
|
||||||
|
"tokens": 3732,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g28.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 35,
|
||||||
|
"chapterTitle": "ПОДВОДИМ ИТОГИ",
|
||||||
|
"characters": 2178,
|
||||||
|
"tokens": 891,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g29.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 36,
|
||||||
|
"chapterTitle": "ВЫСТУПЛЕНИЕ НА БИС",
|
||||||
|
"characters": 4278,
|
||||||
|
"tokens": 1733,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g30.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 37,
|
||||||
|
"chapterTitle": "НА УСКОРЕННОЙ ПЕРЕМОТКЕ",
|
||||||
|
"characters": 6982,
|
||||||
|
"tokens": 2816,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g31.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 38,
|
||||||
|
"chapterTitle": "КОНТЕКСТ",
|
||||||
|
"characters": 5648,
|
||||||
|
"tokens": 2277,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g32.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 39,
|
||||||
|
"chapterTitle": "ИСТИНА ГДЕ-ТО РЯДОМ",
|
||||||
|
"characters": 5244,
|
||||||
|
"tokens": 2119,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g33.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 40,
|
||||||
|
"chapterTitle": "ВНЕДРЕНИЕ В ЖИЗНЬ",
|
||||||
|
"characters": 4438,
|
||||||
|
"tokens": 1796,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g34.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 41,
|
||||||
|
"chapterTitle": "КОМИТЕТ",
|
||||||
|
"characters": 5893,
|
||||||
|
"tokens": 2374,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g35.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 42,
|
||||||
|
"chapterTitle": "ЦЕРКОВНЫЕ ГЕНИИ",
|
||||||
|
"characters": 4898,
|
||||||
|
"tokens": 1980,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g36.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 43,
|
||||||
|
"chapterTitle": "РЕАЛЬНОСТЬ",
|
||||||
|
"characters": 3544,
|
||||||
|
"tokens": 1436,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g37.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 44,
|
||||||
|
"chapterTitle": "ДОПРОС",
|
||||||
|
"characters": 1775,
|
||||||
|
"tokens": 727,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g38.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 45,
|
||||||
|
"chapterTitle": "ВИРУСНЫЙ ОХВАТ",
|
||||||
|
"characters": 1574,
|
||||||
|
"tokens": 649,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g39.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 46,
|
||||||
|
"chapterTitle": "СПАСЕНИЕ",
|
||||||
|
"characters": 5584,
|
||||||
|
"tokens": 2251,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g40.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 47,
|
||||||
|
"chapterTitle": "ДИАГНОЗ",
|
||||||
|
"characters": 5379,
|
||||||
|
"tokens": 2168,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g41.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 48,
|
||||||
|
"chapterTitle": "ПРОВЕРКА НА ДЕЛЕ",
|
||||||
|
"characters": 1641,
|
||||||
|
"tokens": 677,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g42.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 49,
|
||||||
|
"chapterTitle": "ВСТРЕЧА С КЛИЕНТАМИ",
|
||||||
|
"characters": 7038,
|
||||||
|
"tokens": 2837,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g43.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 50,
|
||||||
|
"chapterTitle": "ЭНТУЗИАЗМ",
|
||||||
|
"characters": 2730,
|
||||||
|
"tokens": 1110,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g44.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 51,
|
||||||
|
"chapterTitle": "ВСТРЕЧА С КОЛЛЕКТИВОМ",
|
||||||
|
"characters": 6412,
|
||||||
|
"tokens": 2587,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g45.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 52,
|
||||||
|
"chapterTitle": "СКАЧОК ВПЕРЕД",
|
||||||
|
"characters": 2436,
|
||||||
|
"tokens": 994,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g46.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 53,
|
||||||
|
"chapterTitle": "ЭПИЛОГ",
|
||||||
|
"characters": 1900,
|
||||||
|
"tokens": 777,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g47.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 54,
|
||||||
|
"chapterTitle": "СХЕМА В ДЕЙСТВИИ",
|
||||||
|
"characters": 0,
|
||||||
|
"tokens": 20,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "C2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 55,
|
||||||
|
"chapterTitle": "ЧТО ТАКОЕ РАБОТА?",
|
||||||
|
"characters": 3891,
|
||||||
|
"tokens": 1577,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g48.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 56,
|
||||||
|
"chapterTitle": "МОДЕЛЬ И ТИПИРОВАНИЕ",
|
||||||
|
"characters": 13271,
|
||||||
|
"tokens": 5331,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g49.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 57,
|
||||||
|
"chapterTitle": "КАРТА КОМАНДНОЙ РАБОТЫ",
|
||||||
|
"characters": 23493,
|
||||||
|
"tokens": 9420,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g50.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 58,
|
||||||
|
"chapterTitle": "ТИПЫ ТАЛАНТОВ И ЗДОРОВЬЕ ОРГАНИЗАЦИИ",
|
||||||
|
"characters": 2927,
|
||||||
|
"tokens": 1199,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g51.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 59,
|
||||||
|
"chapterTitle": "МОИ НАДЕЖДЫ НА БУДУЩЕЕ",
|
||||||
|
"characters": 6765,
|
||||||
|
"tokens": 2729,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "g52.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 60,
|
||||||
|
"chapterTitle": "БЛАГОДАРНОСТИ",
|
||||||
|
"characters": 1364,
|
||||||
|
"tokens": 564,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "th.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 61,
|
||||||
|
"chapterTitle": "ОБ АВТОРЕ",
|
||||||
|
"characters": 1499,
|
||||||
|
"tokens": 619,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "about.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 62,
|
||||||
|
"chapterTitle": "ПРИМЕЧАНИЯ",
|
||||||
|
"characters": 49,
|
||||||
|
"tokens": 59,
|
||||||
|
"footnotesCount": 2,
|
||||||
|
"filePath": "links.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 63,
|
||||||
|
"chapterTitle": "Пять пороков команды",
|
||||||
|
"characters": 536,
|
||||||
|
"tokens": 236,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "r1.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 64,
|
||||||
|
"chapterTitle": "Пять пороков команды",
|
||||||
|
"characters": 653,
|
||||||
|
"tokens": 283,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "r2.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 65,
|
||||||
|
"chapterTitle": "Сердце компании",
|
||||||
|
"characters": 579,
|
||||||
|
"tokens": 251,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "r3.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 66,
|
||||||
|
"chapterTitle": "МИФ Бизнес",
|
||||||
|
"characters": 161,
|
||||||
|
"tokens": 83,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "biz.xhtml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"chapterNumber": 67,
|
||||||
|
"chapterTitle": "НАД КНИГОЙ РАБОТАЛИ",
|
||||||
|
"characters": 344,
|
||||||
|
"tokens": 159,
|
||||||
|
"footnotesCount": 0,
|
||||||
|
"filePath": "end.xhtml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
BIN
books/Бизнес с нуля. Метод Lean Startup.epub
Normal file
BIN
books/Бизнес с нуля. Метод Lean Startup.epub
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
books/Как работает Google.epub
Normal file
BIN
books/Как работает Google.epub
Normal file
Binary file not shown.
Binary file not shown.
BIN
books/Мельников_Все_о_бизнесе_за_два_часа.epub
Normal file
BIN
books/Мельников_Все_о_бизнесе_за_два_часа.epub
Normal file
Binary file not shown.
BIN
books/Симоненко. Управляя кризисом.epub
Normal file
BIN
books/Симоненко. Управляя кризисом.epub
Normal file
Binary file not shown.
BIN
books/СтартUp_Настольная_книга_основателя.epub
Normal file
BIN
books/СтартUp_Настольная_книга_основателя.epub
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user