tokimikichika / find
Text analysis library for counting words, characters, sentences and paragraph
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/tokimikichika/find
Requires
- php: >=8.0
- slim/psr7: 1.6
- slim/slim: 4.12
- tokimikichika/htmlsanitizer: ^0.1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^10.0
README
Tokimikichika/find — текстовый анализатор (PHP + Slim, Vue, Docker)
Мини‑библиотека и сервис для анализа текста: считает слова, символы, предложения и параграфы, средние длины и топ слов. Бэкенд на PHP (Slim 4, PHP‑FPM), фронтенд на Vue (Vite), контейнеризация через Docker Compose.
Структура
backend/ # PHP (Slim) приложение и библиотека
public/index.php # Входная точка Slim (PSR-7)
src/ # Классы анализа текста и контроллеры
composer.json # Зависимости PHP
frontend/ # Vue (Vite) фронтенд
src/ # Компоненты
vite.config.js # Прокси /api в dev-режиме
docker/
nginx.conf # Конфиг Nginx для prod
docker-compose.yml #
Быстрый старт (Docker)
- Собрать и запустить:
docker compose up -d --build
- Открыть фронтенд:
http://localhost:6123
Фронт раздаётся Nginx, запросы /api
проксируются в PHP‑FPM на backend/public/index.php
.
Локальная разработка (без Docker)
-
Backend
- Установка зависимостей:
cd backend composer install
- Запуск Slim через встроенный сервер PHP (документ‑руут
public
):php -S localhost:8080 -t public
- Проверка API:
curl -s -X POST http://localhost:8080/api/v1/analyze/text \ -H "Content-Type: application/json" \ -d '{"text":"Привет мир! Hello world."}'
- Установка зависимостей:
-
Frontend
- Dev‑сервер Vite (прокси на
/api
→http://localhost:8080
):cd frontend npm ci npm run dev
- Открыть URL Vite (
http://localhost:6173
).
- Dev‑сервер Vite (прокси на
Тестирование (PHPUnit)
cd backend composer test-unit # отчёт покрытия composer test-coverage
API
- POST
/api/v1/analyze/text
- Тело:
{ "text": "строка" }
- Успех (пример):
{ "source": "text", "words": 6, "characters": 28, "sentences": 2, "paragraphs": 1, "avg_word_length": 4.2, "avg_sentence_length": 3.0, "top_words": [{ "word": "hello", "count": 1 }] }
- Ошибка 400:
{ "error": "Text is required" }
- Тело:
Продакшен‑сборка фронтенда
Сборка выполняется в Dockerfile фронта (npm run build
→ dist/
), далее Nginx раздаёт статику и проксирует /api
в php‑fpm.
Лицензия: MIT