FOSSredder 0.5.0
Loading...
Searching...
No Matches
ParserHelpers.h
Go to the documentation of this file.
1
5
6#pragma once
7
13
15
16#include <initializer_list>
17#include <optional>
18#include <regex>
19#include <string>
20#include <utility>
21#include <vector>
22
24
32std::vector<size_t> findAmountTokenIndices(const core::application::importing::transaction::internal::OcrLine& line, int valutaX = -1, int bandPx = 0) noexcept;
38std::string normalizeAlnumLower(const std::string& s) noexcept;
45std::optional<int> findTokenCenterX(const core::application::importing::transaction::internal::OcrLine& line, const std::string& tokenLower) noexcept;
52std::optional<int> findPhraseCenterX(const core::application::importing::transaction::internal::OcrLine& line, std::initializer_list<const char*> phraseLower) noexcept;
60bool hasTokenNearX(const core::application::importing::transaction::internal::OcrLine& line, int x, int bandPx) noexcept;
67bool hasAmountLikeTokenInLine(const core::application::importing::transaction::internal::OcrLine& line, int valutaX) noexcept;
74bool hasLeftDescriptiveText(const core::application::importing::transaction::internal::OcrLine& line, int valutaX) noexcept;
82bool hasAmountNearValuta(const core::application::importing::transaction::internal::OcrLine& line, int valutaX, int bandPx) noexcept;
89bool isLooseTransactionLine(const core::application::importing::transaction::internal::OcrLine& line, int valutaX) noexcept;
97std::optional<double> findAndParseAmountInLine(const core::application::importing::transaction::internal::OcrLine& line, int valutaX = -1, std::vector<std::string>* debugOut = nullptr) noexcept;
98
103 int minX;
104 int maxX;
105 int minY;
106 int maxY;
107 std::vector<std::pair<int, int>> wordSpans;
108 std::string text;
109};
110
116std::vector<core::application::importing::transaction::internal::OcrLine> buildOcrLinesFromWords(const std::vector<core::ports::text_recognition::Word>& words);
117
122 int valutaX = -1;
123 int debitX = -1;
124 int creditX = -1;
125};
126
133ColumnGuess inferColumnModelFromLines(const std::vector<core::application::importing::transaction::internal::OcrLine>& lines, size_t scanN = 16) noexcept;
140std::vector<RawLineLite> groupMergeLinesRaw(const std::vector<RawLineLite>& lines, int maxGapPx);
148core::application::importing::transaction::internal::OcrLine toOcrLineFromRawWords(const RawLineLite& src, size_t i0, size_t i1) noexcept;
157core::application::importing::transaction::internal::TransactionMainRow splitMainRowFromRaw(const RawLineLite& src, int valutaX, int debitX, int creditX) noexcept;
167
168}
169
170// Intentionally no legacy core::parser aliases here; parser sources now use the current namespaces directly.
Declares helpers for parsing imported transaction amount strings.
Declares runtime configuration values for the import parsers.
Declares date-detection helpers for the import parser.
Declares heuristics used to classify statement parser lines.
Result types for text recognition operations.
Declares the OCR transaction parser model types.
std::vector< RawLineLite > groupMergeLinesRaw(const std::vector< RawLineLite > &lines, int maxGapPx)
Merges raw lines using a gap-based heuristic.
std::string normalizeAlnumLower(const std::string &s) noexcept
Normalizes alphanumeric text to lower-case ASCII for matching.
std::vector< core::application::importing::transaction::internal::OcrLine > buildOcrLinesFromWords(const std::vector< core::ports::text_recognition::Word > &words)
Builds OCR lines from raw Tesseract word output.
std::optional< int > findPhraseCenterX(const core::application::importing::transaction::internal::OcrLine &line, std::initializer_list< const char * > phraseLower) noexcept
Locates the horizontal center of a multi-token phrase in an OCR line.
ColumnGuess inferColumnModelFromLines(const std::vector< core::application::importing::transaction::internal::OcrLine > &lines, size_t scanN=16) noexcept
Infers a column layout from a set of OCR lines.
core::application::importing::transaction::internal::OcrLine toOcrLineFromRawWords(const RawLineLite &src, size_t i0, size_t i1) noexcept
Converts a range of raw words into one OCR line.
bool isLooseTransactionLine(const core::application::importing::transaction::internal::OcrLine &line, int valutaX) noexcept
Checks whether the line looks like a loosely formatted transaction row.
bool hasAmountLikeTokenInLine(const core::application::importing::transaction::internal::OcrLine &line, int valutaX) noexcept
Checks whether the line contains amount-like tokens near the valuta column.
std::vector< size_t > findAmountTokenIndices(const core::application::importing::transaction::internal::OcrLine &line, int valutaX=-1, int bandPx=0) noexcept
Finds the indices of amount-like tokens in an OCR line.
core::application::importing::transaction::internal::TransactionMainRow splitMainRowFromOcrLine(const core::application::importing::transaction::internal::OcrLine &src, int valutaX, int debitX, int creditX) noexcept
Splits an OCR line into the main transaction row representation.
bool hasAmountNearValuta(const core::application::importing::transaction::internal::OcrLine &line, int valutaX, int bandPx) noexcept
Checks whether an amount appears close to the valuta reference.
std::optional< int > findTokenCenterX(const core::application::importing::transaction::internal::OcrLine &line, const std::string &tokenLower) noexcept
Locates the horizontal center of a token inside an OCR line.
std::optional< double > findAndParseAmountInLine(const core::application::importing::transaction::internal::OcrLine &line, int valutaX=-1, std::vector< std::string > *debugOut=nullptr) noexcept
Finds and parses an amount token inside an OCR line.
bool hasLeftDescriptiveText(const core::application::importing::transaction::internal::OcrLine &line, int valutaX) noexcept
Checks whether the line contains descriptive text to the left of the valuta column.
bool hasTokenNearX(const core::application::importing::transaction::internal::OcrLine &line, int x, int bandPx) noexcept
Checks whether any token in the line is close to a horizontal position.
core::application::importing::transaction::internal::TransactionMainRow splitMainRowFromRaw(const RawLineLite &src, int valutaX, int debitX, int creditX) noexcept
Splits a raw line into the main transaction row representation.
Stores the inferred column positions for an OCR page.
Lightweight raw-line representation used during grouping and splitting.
std::vector< std::pair< int, int > > wordSpans
Represents one OCR line with its bounding box and recognized text.