26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
from .idfc import IDFCFirstParser
|
|
from .axis import AxisParser
|
|
from .hdfc import HDFCParser
|
|
from .indian_bank import IndianBankModernParser, IndianBankLegacyParser
|
|
from .indusind import IndusIndParser
|
|
from .kotak import KotakParser
|
|
from .sbi import SBIModernParser, SBIOtherParser
|
|
from .base import extract_text
|
|
|
|
PARSERS=[IDFCFirstParser,AxisParser,HDFCParser,IndianBankModernParser,IndianBankLegacyParser,IndusIndParser,KotakParser,SBIOtherParser,SBIModernParser]
|
|
|
|
def detect_parser(text):
|
|
scored=sorted(((p.detect(text),p) for p in PARSERS),key=lambda x:x[0],reverse=True)
|
|
if not scored or scored[0][0] <= 0: return None,0
|
|
return scored[0][1](),scored[0][0]
|
|
|
|
def parse_pdf(path, bank_hint=None):
|
|
text=extract_text(path)
|
|
if bank_hint:
|
|
for p in PARSERS:
|
|
if bank_hint.lower() in p.bank_name.lower() or bank_hint.lower() in p.__name__.lower():
|
|
return p().parse(path,text)
|
|
parser,score=detect_parser(text)
|
|
if parser is None: raise ValueError('Unsupported statement format. Add a bank-specific parser or use a supported sample format.')
|
|
return parser.parse(path,text)
|