Перейти к содержимому
getnextpdf.com

Pro редакция

Classifier — глубокий справочник

Эта страница — справочник контрактного уровня для классификатора документов NextPDF Pro. Поверхность состоит из одного оркестратора, NextPDF\Pro\Classifier\DocumentClassifier, и его сотрудников: StructureAnalyzer, LanguageDetector и стратегии ClassifierInterface с реализацией по умолчанию HeuristicClassifier. Результаты приходят как неизменяемый ClassificationResult, несущий DocumentType, уверенность в диапазоне [0.0, 1.0], обнаруженные значения ClassificationFeature и код языка ISO 639-1. Классификация основана на правилах и детерминирована: без вывода модели, без случайности, без сетевого вызова, без доступа к файловой системе. Эта страница описывает публичный API, контракт наблюдаемого поведения и режимы отказа.

Эта возможность поставляется в NextPDF Pro (nextpdf/pro) и активируется лицензионным конвертом уровня Pro. Развёртывание без этого права доступа не загружает классы этой возможности. Сравнить редакции и получить лицензию.

Никакой флаг возможности времени выполнения не ограничивает этот модуль. Классы классификатора доступны всегда, когда установлен nextpdf/pro.

СимволПараметрыПоведение по умолчаниюВозвращаетБросает или отказывает сПримечания
DocumentClassifierконструктор: StructureAnalyzer, LanguageDetector, ClassifierInterfaceОркеструет анализ структуры, классификацию стратегией и определение языкаfinal; внедряйте сотрудников только для пользовательских стратегий
DocumentClassifier::create()нетСоздаёт сотрудников по умолчанию со стратегией HeuristicClassifierselfДетерминированная конфигурация по умолчанию
DocumentClassifier::classifyFromText()$text, $pdfData = ''Пустой $pdfData использует пустую структуру; непустые сырые байты добавляют структурные сигналыClassificationResultНе бросает; разреженный вход снижает уверенностьОпределение языка всегда выполняется по $text
DocumentClassifier::classifyFromFile()string $pdfDataСканирует потоки содержимого, восстанавливает текст §9.4, анализирует структуру, классифицируетClassificationResultНе бросает; нечитаемые потоки уменьшают объём восстановленного текстаОграниченное сканирование байтов, а не полный разбор PDF
ClassifierInterface::classify()$text, StructureAnalysis $structureКонтракт стратегии, потребляемый оркестраторомClassificationResultОпределяется реализациейТочка расширения для пользовательских стратегий классификации
ClassifierInterface::supports()string $contentTypeПроверка типа содержимого для составных классификаторовboolПринимает MIME-тип или дескриптор содержимого
HeuristicClassifierнетСтратегия по умолчанию: словари ключевых слов плюс структурные эвристикиНе бросаетfinal; supports() принимает application/pdf и text/plain
StructureAnalyzer::analyze()string $pdfDataСканирование сырых байтов регулярными выражениями; без полного разбора PDFStructureAnalysisНе бросаетСчитает страницы, изображения, шрифты; обнаруживает поля форм и подписей
LanguageDetector::detect()string $textСопоставление триграммных профилей с предварительной проверкой диапазона письменностей CJKnon-empty-string, код ISO 639-1Не бросаетОткатывается к en ниже порога принятия
LanguageDetector::detectWithConfidence()string $textКак detect(), но с открытой уверенностьюarray{language: non-empty-string, confidence: float}Не бросаетКороткий текст возвращает en с уверенностью 0.0
ClassificationResultконструктор: $type, $confidence, $features, $language, $metadata = []Неизменяемый объект-значениеfinal readonly; metadata несёт scores и method
ClassificationResult::isConfident()float $threshold = 0.7Сравнивает уверенность с порогомboolДокументированный барьер для маршрутизации на ручную проверку
StructureAnalysisконструктор: $pageCount, $imageCount, $fontCount, $hasFormFields, $hasSignatureFields, $imageDensity, $detectedFeaturesНеизменяемый объект-значение, создаваемый StructureAnalyzerfinal readonly; imageDensity — изображений на страницу
DocumentTypeперечисление на основе строк, 12 вариантовВарианты: Invoice, Contract, Form, Report, Letter, Receipt, Legal, Medical, Financial, Technical, Academic, Otherбазовые значения invoiceotherlabel() возвращает человекочитаемое имя
ClassificationFeatureперечисление на основе строк, 7 вариантовВарианты: HasTables, HasHeaders, HasSignatures, HasLogos, HasBarcodes, HasForms, IsScannedбазовые значения has_tablesis_scannedСтруктурные сигналы, подаваемые в классификацию
public static function create(): self
public function classifyFromText(string $text, string $pdfData = ''): ClassificationResult
public function classifyFromFile(string $pdfData): ClassificationResult
public function classify(string $text, StructureAnalysis $structure): ClassificationResult;
public function supports(string $contentType): bool;
public function analyze(string $pdfData): StructureAnalysis
public function detect(string $text): string
public function detectWithConfidence(string $text): array
public function __construct(
public DocumentType $type,
public float $confidence,
public array $features,
public string $language,
public array $metadata = [],
) {}
public function isConfident(float $threshold = 0.7): bool

DocumentClassifier выполняет анализ структуры, затем классификацию стратегией, затем определение языка и собирает ClassificationResult. Стратегия предоставляет тип, уверенность, признаки и метаданные; детектор предоставляет язык. classifyFromText() без байтов PDF подставляет пустую структуру: ноль страниц, нулевые счётчики, никаких признаков. classifyFromFile() выводит и структуру, и текст из одних и тех же сырых байтов.

HeuristicClassifier оценивает текст в нижнем регистре по словарям ключевых слов для каждого типа документа, нормализуя по длине текста. Конкретные словари, веса и пороги — деталь реализации и не публикуются. Затем структурные сигналы корректируют оценки: совпадающие значения ClassificationFeature усиливают связанные с ними типы; документы выше порога страниц смещаются от Letter и Receipt; многостраничные документы с заголовками и таблицами получают надбавку к Report; обнаруженный признак формы добавляет сильный сигнал Form. Наивысшая оценка побеждает и сопоставляется с DocumentType. Ограниченная нормализация переводит сырую оценку в [0.0, 1.0]. Оценка ниже минимума даёт DocumentType::Other с небольшим ненулевым нижним порогом уверенности. metadata результата несёт карту scores по типам и method: heuristic. HeuristicClassifier сам по себе сообщает язык en; DocumentClassifier переопределяет его выводом детектора.

Проверка диапазона письменностей для текста CJK выполняется перед триграммным оцениванием. Преобладание хангыля выбирает ko; любая кана выбирает ja; иначе достаточная доля идеограмм выбирает zh. Весь прочий текст оценивается по частоте символьных триграмм относительно десяти встроенных профилей. Возможные возвращаемые значения — коды ISO 639-1 en, zh, ja, ko, de, fr, es, pt, it и nl. Текст ниже минимальной длины возвращает en с уверенностью 0.0. Результат ниже порога принятия с узким отрывом также возвращает en. Уверенность отражает отрыв между лучшей и второй по величине оценками профилей.

classifyFromFile() сканирует сырые байты на сегменты stream/endstream. Каждый сегмент пробуется как данные Flate под ограниченным потолком инфляции; при неудаче используются сырые байты сегмента. Когда соседний словарь потока объявляет PNG-предиктор в /DecodeParms, обращение учитывает параметры Predictor, Columns, Colors и BitsPerComponent согласно ISO 32000-2:2020 §7.4.4.4, используя классы DecodeParms и PngPredictor модуля Filter. Затем текст восстанавливается из операторов показа текста §9.4: литеральные строки, показанные Tj, и литеральные строки внутри массивов TJ. Классификатор оценивает восстановленный текст; он не зависит от визуальной разметки.

StructureAnalyzer::analyze() считает токены страниц, изображений и шрифтов в сырых байтах, обнаруживает /AcroForm и поля подписей и выводит плотность изображений. Обнаружение признаков эвристично: повторяющееся рисование прямоугольников указывает на таблицы, объявления крупного размера шрифта указывают на заголовки, а высокая плотность изображений при малом числе шрифтов указывает на отсканированный документ. Счётчики отражают токены, видимые в сырых байтах; структуры, сериализованные внутри сжатых потоков объектов, не учитываются.

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

  • Пустой или почти пустой текст по замыслу даёт DocumentType::Other с низкой уверенностью. Ветвитесь по isConfident(), а не по одному лишь типу.
  • Ни один публичный метод этого модуля не бросает. Потоки, не поддающиеся распаковке, сканируются в сыром виде; некорректные или неподдерживаемые параметры предиктора откатываются к нефильтрованным байтам.
  • Восстановление текста сопоставляет только формы литеральных строк Tj и TJ. Шестнадцатеричные строки, текст внутри зашифрованного содержимого и операторы, разбитые между потоками, не восстанавливаются, что уменьшает объём текста, доступного для оценивания.
  • Потолок распаковки ограничивает память при инфляции потока и сопротивляется входу типа «декомпрессионная бомба». Содержимое сверх потолка не инфлируется.
  • PDF, содержащие только изображения или сильно сжатые, восстанавливают мало текста; ожидайте результаты с низкой уверенностью и направляйте их на ручную проверку.
  • Определение языка ниже минимальной длины текста возвращает en с уверенностью 0.0; очень короткие строки никогда не дают неанглийский результат.
  • Двенадцать типов документов и десять языковых профилей фиксированы для этого выпуска. Расширение — через пользовательскую реализацию ClassifierInterface, а не правкой встроенных данных.
  • В этом модуле не происходит криптографических операций, поэтому нет поведения, специфичного для режима FIPS.
УтверждениеСтандартПункт
Классификация файла восстанавливает текст, показанный оператором Tj.ISO 32000-2:2020§9.4
Классификация файла восстанавливает литеральные строки внутри операторов массива TJ.ISO 32000-2:2020§9.4
Обращение PNG-предиктора учитывает параметры фильтра Predictor, Columns, Colors и BitsPerComponent.ISO 32000-2:2020§7.4.4.4

Коды языков следуют ISO 639-1; это обоснованное продуктом утверждение о формате вывода, а не цитируемое заявление о соответствии. Все пункты пересказаны; NextPDF не воспроизводит нормативный текст. Это утверждения о возможностях, а не сертификации. NextPDF не имеет сертификации и не предоставляет её. Классификация эвристична и выполняется по мере возможности: модуль утверждает детерминизм, а не точность, и вызывающие стороны сами владеют порогом решения.

  • Доступно с nextpdf/pro 2.2.0; актуально в nextpdf/pro 3.1.0.
  • Используйте DocumentClassifier::create() для конвейера по умолчанию. Внедряйте сотрудников только для предоставления пользовательской стратегии ClassifierInterface.
  • Считайте результаты ниже порога неопределёнными и направляйте их на ручную проверку; isConfident() со значением по умолчанию 0.7 — документированный барьер.
  • Модуль ничего не хранит, не отправляет телеметрию и не логирует ввод. Если вызывающие стороны сохраняют metadata, сначала проверьте их на соответствие собственной политике обработки данных.
  • Оценивание ключевых слов и подсчёт триграмм линейны по длине текста. Анализ структуры линеен по длине PDF в байтах при ограниченном потолке распаковки. Бюджет страницы — 1000 мс времени и 64 МБ пиковой памяти.

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