pyxllib 0.3.117__tar.gz → 0.3.118__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyxllib-0.3.117/pyxllib.egg-info → pyxllib-0.3.118}/PKG-INFO +1 -1
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/pupil.py +30 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/pglib.py +20 -5
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/sqlite.py +3 -1
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/drissionlib.py +1 -2
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/specialist/filelib.py +16 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/xlsxlib.py +16 -4
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/pupil.py +11 -1
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/browser.py +3 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/tictoc.py +10 -7
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/charclasslib.py +6 -1
- {pyxllib-0.3.117 → pyxllib-0.3.118/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib.egg-info/requires.txt +13 -14
- {pyxllib-0.3.117 → pyxllib-0.3.118}/setup.py +3 -2
- {pyxllib-0.3.117 → pyxllib-0.3.118}/LICENSE +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/MANIFEST.in +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/README.md +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/requirements.txt +0 -0
- {pyxllib-0.3.117 → pyxllib-0.3.118}/setup.cfg +0 -0
@@ -157,6 +157,9 @@ class ValuesStat:
|
|
157
157
|
|
158
158
|
class ValuesStat2:
|
159
159
|
""" 240509周四17:33,第2代统计器
|
160
|
+
|
161
|
+
240628周五14:05 todo 关于各种特殊格式数据,怎么计算是个问题
|
162
|
+
这问题可能有些复杂,近期估计没空折腾,留以后有空折腾的一个大坑了
|
160
163
|
"""
|
161
164
|
|
162
165
|
def __init__(self, values=None, raw_values=None, data_type=None):
|
@@ -307,6 +310,33 @@ class ValuesStat2:
|
|
307
310
|
|
308
311
|
return ratio_dict
|
309
312
|
|
313
|
+
def group_count(self, max_entries=None, min_count=None):
|
314
|
+
""" 统计每种取值出现的次数,并根据条件过滤结果
|
315
|
+
|
316
|
+
:param max_entries: 最多显示的条目数
|
317
|
+
:param min_count: 显示的条目至少出现的次数
|
318
|
+
"""
|
319
|
+
from collections import Counter
|
320
|
+
|
321
|
+
# 使用Counter来计数每个值出现的次数
|
322
|
+
counts = Counter(self.values or self.raw_values)
|
323
|
+
|
324
|
+
# 根据min_count过滤计数结果
|
325
|
+
if min_count is not None:
|
326
|
+
counts = {k: v for k, v in counts.items() if v >= min_count}
|
327
|
+
|
328
|
+
# 根据max_entries限制结果数量
|
329
|
+
if max_entries is not None:
|
330
|
+
# 按出现次数降序排列,然后选取前max_entries项
|
331
|
+
most_common = counts.most_common(max_entries)
|
332
|
+
# 转换回字典形式
|
333
|
+
counts = dict(most_common)
|
334
|
+
else:
|
335
|
+
# 如果没有指定max_entries,则保持所有满足min_count的结果
|
336
|
+
counts = dict(sorted(counts.items(), key=lambda item: item[1], reverse=True))
|
337
|
+
|
338
|
+
return counts
|
339
|
+
|
310
340
|
|
311
341
|
class Groups:
|
312
342
|
def __init__(self, data):
|
@@ -42,7 +42,7 @@ import psycopg
|
|
42
42
|
import psycopg.rows
|
43
43
|
|
44
44
|
from pyxllib.prog.newbie import round_int, human_readable_number
|
45
|
-
from pyxllib.prog.pupil import utc_now, utc_timestamp
|
45
|
+
from pyxllib.prog.pupil import utc_now, utc_timestamp, is_valid_identifier
|
46
46
|
from pyxllib.prog.specialist import XlOsEnv
|
47
47
|
from pyxllib.algo.pupil import ValuesStat2
|
48
48
|
from pyxllib.file.specialist import get_etag, StreamJsonlWriter
|
@@ -271,12 +271,14 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
271
271
|
def __6_高级统计(self):
|
272
272
|
pass
|
273
273
|
|
274
|
-
def get_column_valuesstat(self, table_name, column,
|
275
|
-
|
274
|
+
def get_column_valuesstat(self, table_name, column, filter_condition=None,
|
275
|
+
percentile_count=5,
|
276
|
+
by_data=False, data_type=None):
|
276
277
|
""" 获得指定表格的某个字段的统计特征ValuesStat2对象
|
277
278
|
|
278
279
|
:param table_name: 表名
|
279
280
|
:param column: 用于计算统计数据的字段名
|
281
|
+
不一定是标准的字段名
|
280
282
|
:param percentile_count: 分位数的数量,例如 3 表示只计算中位数
|
281
283
|
:param by_data: 是否获得原始数据
|
282
284
|
默认只获得统计特征,不获得原始数据
|
@@ -289,7 +291,15 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
289
291
|
values = self.exec2col(sql.build_select(column))
|
290
292
|
if data_type == 'numeric':
|
291
293
|
values = [x and float(x) for x in values]
|
292
|
-
|
294
|
+
vs = ValuesStat2(raw_values=values, data_type=data_type)
|
295
|
+
|
296
|
+
if data_type == 'text' and is_valid_identifier(column):
|
297
|
+
vs0 = self.get_column_valuesstat(table_name, column, filter_condition=filter_condition,
|
298
|
+
percentile_count=percentile_count, by_data=False)
|
299
|
+
vs.n = vs0.n
|
300
|
+
vs.dist = vs0.dist
|
301
|
+
|
302
|
+
return vs
|
293
303
|
|
294
304
|
def init_from_db():
|
295
305
|
# 1 构建基础的 SQL 查询
|
@@ -341,7 +351,12 @@ WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
|
341
351
|
|
342
352
|
return x
|
343
353
|
|
344
|
-
data_type = self.get_column_data_type(table_name, column)
|
354
|
+
data_type = data_type or self.get_column_data_type(table_name, column)
|
355
|
+
|
356
|
+
# 如果不是标准的列名,强制获取数据
|
357
|
+
if not is_valid_identifier(column):
|
358
|
+
by_data = True
|
359
|
+
|
345
360
|
if by_data:
|
346
361
|
vs = init_from_db_data()
|
347
362
|
else:
|
@@ -89,6 +89,8 @@ class SqlBuilder:
|
|
89
89
|
""" 使用一种特殊的格式化标记来设置规则
|
90
90
|
|
91
91
|
:param desc: 例如 'id%2=1'
|
92
|
+
|
93
|
+
todo 我好像傻了,画蛇添足,这个功能好像直接用 .where 就能完成~
|
92
94
|
"""
|
93
95
|
if not desc:
|
94
96
|
return
|
@@ -148,6 +150,7 @@ class SqlBuilder:
|
|
148
150
|
sql.append(f"WHERE {' AND '.join(self._where)}")
|
149
151
|
return '\n'.join(sql)
|
150
152
|
|
153
|
+
|
151
154
|
def __3_build_中级命令(self):
|
152
155
|
pass
|
153
156
|
|
@@ -168,7 +171,6 @@ class SqlBuilder:
|
|
168
171
|
sql._where = self._where.copy()
|
169
172
|
return sql.build_select()
|
170
173
|
|
171
|
-
|
172
174
|
class SqlBase:
|
173
175
|
""" Sql语法通用的功能 """
|
174
176
|
|
@@ -18,7 +18,6 @@ from DrissionPage._base.base import BasePage, BaseElement
|
|
18
18
|
from pyxllib.prog.pupil import inject_members
|
19
19
|
from pyxllib.text.pupil import strfind
|
20
20
|
|
21
|
-
|
22
21
|
def get_latest_not_dev_tab(page=None):
|
23
22
|
""" 开发工具本身也会算一个tab,这个函数返回最新的一个不是开发工具的tab """
|
24
23
|
if page is None:
|
@@ -80,7 +79,7 @@ class XlBasePage(BasePage):
|
|
80
79
|
'tag:downloads-item')
|
81
80
|
for item in items:
|
82
81
|
loc = unquote(item.sr('tag:img').attr('src').replace('+', ' '))
|
83
|
-
file = re.search(r'path=(.+?)(&scale
|
82
|
+
file = re.search(r'path=(.+?)(&scale=(\d+(\.\d+)?)x)?$', loc).group(1)
|
84
83
|
|
85
84
|
files.append({
|
86
85
|
'file': file,
|
@@ -1124,6 +1124,22 @@ class XlPath(type(pathlib.Path())):
|
|
1124
1124
|
else:
|
1125
1125
|
return s
|
1126
1126
|
|
1127
|
+
def read_text2(self):
|
1128
|
+
""" 智能识别编码的文本读取,这里收集了我见过的一些常见类型 """
|
1129
|
+
for encoding in ['utf8',
|
1130
|
+
'gbk',
|
1131
|
+
'gb18030',
|
1132
|
+
'utf_16',
|
1133
|
+
'cp932', # 日文,Shift-JIS
|
1134
|
+
'Big5', # 繁体字,Big5
|
1135
|
+
'big5hkscs', # 繁体字
|
1136
|
+
]:
|
1137
|
+
try:
|
1138
|
+
content = self.read_text(encoding=encoding)
|
1139
|
+
return content, encoding
|
1140
|
+
except (UnicodeDecodeError, UnicodeError):
|
1141
|
+
continue
|
1142
|
+
|
1127
1143
|
def readlines_batch(self, batch_size, *, encoding='utf8'):
|
1128
1144
|
""" 将文本行打包,每次返回一个批次多行数据
|
1129
1145
|
|
@@ -7,6 +7,8 @@
|
|
7
7
|
"""
|
8
8
|
扩展了些自己的openpyxl工具
|
9
9
|
"""
|
10
|
+
import copy
|
11
|
+
|
10
12
|
import time
|
11
13
|
|
12
14
|
from pyxllib.prog.pupil import check_install_package, run_once
|
@@ -2463,7 +2465,7 @@ def extract_workbook_summary2(file_path, *,
|
|
2463
2465
|
"""
|
2464
2466
|
:param keep_links: 是否保留外部表格链接数据。如果保留,打开好像会有点问题。
|
2465
2467
|
:param mode:
|
2466
|
-
0,最原始的
|
2468
|
+
0,最原始的summary2摘要
|
2467
2469
|
1,添加当前工作表、单元格位置的信息
|
2468
2470
|
:param kwargs: 捕捉其他参数,主要是向下兼容,其实现在并没有用
|
2469
2471
|
|
@@ -3015,7 +3017,10 @@ def extract_workbook_summary3b(file_path,
|
|
3015
3017
|
|
3016
3018
|
:param summary_limit_len: 摘要长度限制
|
3017
3019
|
:param timeout_seconds: 超时限制
|
3018
|
-
:param return_mode:
|
3020
|
+
:param return_mode: 返回模式
|
3021
|
+
0,表示只返回摘要
|
3022
|
+
1,表示返回摘要和耗时
|
3023
|
+
2, 再增加返回summary2
|
3019
3024
|
:param len_mode:
|
3020
3025
|
0, 使用len作为token长度评估
|
3021
3026
|
1, 使用模型评估实际token长度
|
@@ -3024,6 +3029,7 @@ def extract_workbook_summary3b(file_path,
|
|
3024
3029
|
res = {}
|
3025
3030
|
res['fileName'] = Path(file_path).name
|
3026
3031
|
load_time = summary2_time = summary3_time = -1
|
3032
|
+
summary2_res = {}
|
3027
3033
|
|
3028
3034
|
def reduce_summary(summary):
|
3029
3035
|
""" 如果转json后的summary超过4K,去掉可能的sheets字段 """
|
@@ -3037,6 +3043,7 @@ def extract_workbook_summary3b(file_path,
|
|
3037
3043
|
start_time = time.time()
|
3038
3044
|
res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
|
3039
3045
|
# res = convert_to_json_compatible(res)
|
3046
|
+
summary2_res = copy.deepcopy(res)
|
3040
3047
|
summary2_time = time.time() - start_time - load_time
|
3041
3048
|
start_time = time.time()
|
3042
3049
|
if len_mode == 1:
|
@@ -3055,8 +3062,13 @@ def extract_workbook_summary3b(file_path,
|
|
3055
3062
|
res['error'] = f'提取摘要时发生错误:{format_exception(e, 2)}'
|
3056
3063
|
reduce_summary(res)
|
3057
3064
|
|
3058
|
-
|
3059
|
-
return res, {'load_time': human_readable_number(load_time),
|
3065
|
+
time_dict = {'load_time': human_readable_number(load_time),
|
3060
3066
|
'summary2_time': human_readable_number(summary2_time),
|
3061
3067
|
'summary3_time': human_readable_number(summary3_time)}
|
3068
|
+
|
3069
|
+
if return_mode == 1:
|
3070
|
+
return res, time_dict
|
3071
|
+
elif return_mode == 2:
|
3072
|
+
return res, time_dict, summary2_res
|
3073
|
+
|
3062
3074
|
return res
|
@@ -34,6 +34,7 @@ import threading
|
|
34
34
|
import time
|
35
35
|
import traceback
|
36
36
|
from urllib.parse import urlparse
|
37
|
+
import re
|
37
38
|
|
38
39
|
from pyxllib.prog.newbie import classproperty, typename
|
39
40
|
|
@@ -1133,10 +1134,14 @@ def support_multi_processes(default_processes=1):
|
|
1133
1134
|
if process_id is None:
|
1134
1135
|
return func(*args, **kwargs)
|
1135
1136
|
else:
|
1136
|
-
return func(*args, **kwargs, process_count=process_count, process_id=process_id)
|
1137
|
+
return func(*args, **kwargs, process_count=process_count, process_id=int(process_id))
|
1137
1138
|
else:
|
1138
1139
|
mpl = MultiProcessLauncher()
|
1139
1140
|
for i in range(int(process_count)):
|
1141
|
+
if isinstance(process_id, int) and i != process_id:
|
1142
|
+
continue
|
1143
|
+
|
1144
|
+
# todo 这样使用有个坑,process_count、process_id都是以str类型传入的,开发者下游使用容易出问题
|
1140
1145
|
cmds = [func.__name__,
|
1141
1146
|
'--process_count', str(process_count),
|
1142
1147
|
'--process_id', str(i)
|
@@ -1303,3 +1308,8 @@ def check_counter(data, top_n=10):
|
|
1303
1308
|
def tprint(*args, **kwargs):
|
1304
1309
|
""" 带时间戳的print """
|
1305
1310
|
print(utc_now2(), *args, **kwargs)
|
1311
|
+
|
1312
|
+
|
1313
|
+
def is_valid_identifier(name):
|
1314
|
+
""" 判断是否是合法的标识符 """
|
1315
|
+
return re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', name)
|
@@ -230,6 +230,9 @@ class Browser(Explorer):
|
|
230
230
|
file = file.rename(get_etag(str(file)) + file.suffix, if_exists='replace')
|
231
231
|
self.__call__(arg, file, **kwargs)
|
232
232
|
|
233
|
+
def url(self, *args, wait=True, **kwargs):
|
234
|
+
super().__call__(*args, wait=wait, **kwargs)
|
235
|
+
|
233
236
|
def __call__(self, arg, file=None, *, wait=True, clsmsg=True, to_html_args=None,
|
234
237
|
**kwargs): # NOQA Browser的操作跟标准接口略有差异
|
235
238
|
""" 该版本会把arg转存文件重设为文件名
|
@@ -12,6 +12,7 @@ from humanfriendly import format_timespan
|
|
12
12
|
|
13
13
|
from pyxllib.algo.pupil import natural_sort, ValuesStat
|
14
14
|
from pyxllib.text.pupil import shorten, listalign
|
15
|
+
from pyxllib.prog.newbie import human_readable_number
|
15
16
|
|
16
17
|
__tictoc = """
|
17
18
|
基于 pytictoc 代码,做了些自定义扩展
|
@@ -40,13 +41,15 @@ class TicToc:
|
|
40
41
|
TicToc.elapsed #t.end - t.start; i.e., time elapsed from t.start when t.toc() or t.tocvalue() was last called
|
41
42
|
"""
|
42
43
|
|
43
|
-
def __init__(self, title='', *, disable=False):
|
44
|
+
def __init__(self, title='', *, disable=False, min_display_seconds=None):
|
44
45
|
"""Create instance of TicToc class."""
|
45
46
|
self.start = timeit.default_timer()
|
46
47
|
self.end = float('nan')
|
47
48
|
self.elapsed = float('nan')
|
48
49
|
self.title = title
|
49
50
|
self.disable = disable
|
51
|
+
# 只有达到这个时间,才会显示耗时
|
52
|
+
self.min_display_seconds = min_display_seconds
|
50
53
|
|
51
54
|
def tic(self):
|
52
55
|
"""Start the timer."""
|
@@ -64,7 +67,7 @@ class TicToc:
|
|
64
67
|
self.elapsed = self.end - self.start
|
65
68
|
if not self.disable:
|
66
69
|
# print(f'{self.title} {msg} {self.elapsed:.3f} 秒.')
|
67
|
-
print(f'{self.title} {msg} elapsed {
|
70
|
+
print(f'{self.title} {msg} elapsed {human_readable_number(self.elapsed, "秒")}.')
|
68
71
|
if restart:
|
69
72
|
self.start = timeit.default_timer()
|
70
73
|
|
@@ -84,14 +87,14 @@ class TicToc:
|
|
84
87
|
@staticmethod
|
85
88
|
def process_time(msg='time.process_time():'):
|
86
89
|
"""计算从python程序启动到目前为止总用时"""
|
87
|
-
print(f'{msg} {
|
90
|
+
print(f'{msg} {human_readable_number(time.process_time(), "秒")}.')
|
88
91
|
|
89
92
|
def __enter__(self):
|
90
93
|
"""Start the timer when using TicToc in a context manager."""
|
91
94
|
from pyxllib.prog.specialist import get_xllog
|
92
95
|
|
93
96
|
if self.title == '__main__' and not self.disable:
|
94
|
-
get_xllog().info(f'time.process_time(): {
|
97
|
+
get_xllog().info(f'time.process_time(): {human_readable_number(time.process_time(), "秒")}.')
|
95
98
|
self.start = timeit.default_timer()
|
96
99
|
|
97
100
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
@@ -102,10 +105,10 @@ class TicToc:
|
|
102
105
|
xllog = get_xllog()
|
103
106
|
|
104
107
|
if exc_tb is None:
|
105
|
-
if not self.disable:
|
106
|
-
xllog.info(f'{self.title} finished in {
|
108
|
+
if not self.disable and (self.min_display_seconds is None or elapsed >= self.min_display_seconds):
|
109
|
+
xllog.info(f'{self.title} finished in {human_readable_number(elapsed, "秒")}.')
|
107
110
|
else:
|
108
|
-
xllog.info(f'{self.title} interrupt in {
|
111
|
+
xllog.info(f'{self.title} interrupt in {human_readable_number(elapsed, "秒")},')
|
109
112
|
|
110
113
|
|
111
114
|
__timer = """
|
@@ -69,7 +69,10 @@ def get_charclass_num(content):
|
|
69
69
|
|
70
70
|
|
71
71
|
def get_charclass_rate(content, round_digits=4):
|
72
|
-
""" 检查字符类型分布数量
|
72
|
+
""" 检查字符类型分布数量
|
73
|
+
|
74
|
+
:param str content: 文本内容
|
75
|
+
"""
|
73
76
|
ct = get_charclass_num(content)
|
74
77
|
|
75
78
|
# 这一类权重要翻倍
|
@@ -93,6 +96,8 @@ def check_language_from_counter(ct):
|
|
93
96
|
这个比例最早是给表格设计的,表格很可能表头是中文,中间都是英文、数字数据,此时仍然归为中文
|
94
97
|
但如果是一般性的文档,可能要提高中文的比例,才能视为中文文档
|
95
98
|
"""
|
99
|
+
ct['常用汉字'] = ct.get('常用汉字', 0)
|
100
|
+
ct['偏僻汉字'] = ct.get('偏僻汉字', 0)
|
96
101
|
|
97
102
|
if '繁体汉字' in ct:
|
98
103
|
if safe_div(ct['繁体汉字'], ct['常用汉字']) > 0.1:
|
@@ -21,29 +21,28 @@ Jinja2
|
|
21
21
|
pandas>=0.23.4
|
22
22
|
|
23
23
|
[xlai]
|
24
|
-
pynvml
|
25
|
-
opsdroid-get-image-size
|
26
24
|
opencv-python
|
27
|
-
|
28
|
-
|
25
|
+
opsdroid-get-image-size
|
26
|
+
pynvml
|
29
27
|
visdom
|
28
|
+
pillow
|
30
29
|
|
31
30
|
[xlall]
|
32
|
-
flask-
|
33
|
-
html2text
|
31
|
+
flask-jwt-extended
|
34
32
|
ujson
|
35
33
|
flask-wtf
|
36
|
-
sentencepiece
|
37
|
-
flask-jwt-extended
|
38
|
-
flask
|
39
|
-
opsdroid-get-image-size
|
40
34
|
opencv-python
|
41
|
-
|
42
|
-
pillow
|
35
|
+
opsdroid-get-image-size
|
43
36
|
zhconv
|
37
|
+
html2text
|
44
38
|
xlrd
|
39
|
+
flask
|
40
|
+
sentencepiece
|
41
|
+
flask-cors
|
42
|
+
flask-restful
|
43
|
+
pillow
|
45
44
|
|
46
45
|
[xlcv]
|
47
|
-
pillow
|
48
|
-
opsdroid-get-image-size
|
49
46
|
opencv-python
|
47
|
+
opsdroid-get-image-size
|
48
|
+
pillow
|
@@ -22,8 +22,8 @@ opencv-python
|
|
22
22
|
xlai = """
|
23
23
|
pynvml
|
24
24
|
visdom
|
25
|
-
xlcocotools
|
26
25
|
"""
|
26
|
+
# xlcocotools
|
27
27
|
# fvcore
|
28
28
|
|
29
29
|
# 全量的依赖,自用
|
@@ -39,12 +39,13 @@ ujson
|
|
39
39
|
html2text
|
40
40
|
flask-jwt-extended
|
41
41
|
"""
|
42
|
+
# pywin32
|
42
43
|
|
43
44
|
_dir = Path(__file__).parent
|
44
45
|
|
45
46
|
setup(
|
46
47
|
name='pyxllib', # pip 安装时用的名字
|
47
|
-
version='0.3.
|
48
|
+
version='0.3.118', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
48
49
|
author='code4101',
|
49
50
|
author_email='877362867@qq.com',
|
50
51
|
url='https://github.com/XLPRUtils/pyxllib',
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|