pyxllib 0.3.86__tar.gz → 0.3.87a0__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.86/pyxllib.egg-info → pyxllib-0.3.87a0}/PKG-INFO +1 -1
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/stat.py +2 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/data/pglib.py +3 -1
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/xlsxlib.py +291 -55
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/xl.py +7 -1
- {pyxllib-0.3.86 → pyxllib-0.3.87a0/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ai/clientlib.py +4 -1
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/gptlib.py +11 -7
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/setup.py +1 -1
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/LICENSE +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/MANIFEST.in +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/README.md +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib.egg-info/requires.txt +5 -5
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/requirements.txt +0 -0
- {pyxllib-0.3.86 → pyxllib-0.3.87a0}/setup.cfg +0 -0
@@ -17,6 +17,8 @@ import pandas as pd
|
|
17
17
|
from pyxllib.prog.pupil import dprint, typename
|
18
18
|
from pyxllib.file.specialist import XlPath
|
19
19
|
|
20
|
+
pd.options.display.unicode.east_asian_width = True # 优化中文输出对齐问题
|
21
|
+
|
20
22
|
|
21
23
|
def treetable(childreds, parents, arg3=None, nodename_colname=None):
|
22
24
|
""" 输入childres子结点id列表,和parents父结点id列表
|
@@ -93,12 +93,14 @@ class Connection(psycopg.Connection, SqlBase):
|
|
93
93
|
# cur.close()
|
94
94
|
return data
|
95
95
|
|
96
|
-
def
|
96
|
+
def exec2dict(self, *args, **kwargs):
|
97
97
|
cur = self.cursor(row_factory=psycopg.rows.dict_row)
|
98
98
|
data = cur.execute(*args, **kwargs)
|
99
99
|
# cur.close()
|
100
100
|
return data
|
101
101
|
|
102
|
+
exec_dict = exec2dict
|
103
|
+
|
102
104
|
def __4_数据类型(self):
|
103
105
|
pass
|
104
106
|
|
@@ -17,13 +17,14 @@ check_install_package('yattag')
|
|
17
17
|
check_install_package('jsonpickle')
|
18
18
|
|
19
19
|
from collections import Counter, OrderedDict, defaultdict
|
20
|
+
import csv
|
20
21
|
import datetime
|
22
|
+
from itertools import islice
|
21
23
|
import json
|
22
24
|
import math
|
23
25
|
from pathlib import Path
|
24
26
|
import random
|
25
27
|
import re
|
26
|
-
import csv
|
27
28
|
|
28
29
|
import xlrd
|
29
30
|
|
@@ -1780,6 +1781,28 @@ def build_range_address(left=None, top=None, right=None, bottom=None):
|
|
1780
1781
|
return f"{start_cell}:{end_cell}"
|
1781
1782
|
|
1782
1783
|
|
1784
|
+
def combine_addresses(*addrs):
|
1785
|
+
# 初始化最小和最大行列值
|
1786
|
+
min_left, min_top, max_right, max_bottom = float('inf'), float('inf'), 0, 0
|
1787
|
+
|
1788
|
+
# 遍历所有地址
|
1789
|
+
for addr in addrs:
|
1790
|
+
# 解析每个地址
|
1791
|
+
addr_dict = parse_range_address(addr)
|
1792
|
+
|
1793
|
+
# 更新最小和最大行列值
|
1794
|
+
if addr_dict['left'] is not None:
|
1795
|
+
min_left = min(min_left, addr_dict['left'])
|
1796
|
+
max_right = max(max_right, addr_dict['right'] if addr_dict['right'] is not None else addr_dict['left'])
|
1797
|
+
if addr_dict['top'] is not None:
|
1798
|
+
min_top = min(min_top, addr_dict['top'])
|
1799
|
+
max_bottom = max(max_bottom, addr_dict['bottom'] if addr_dict['bottom'] is not None else addr_dict['top'])
|
1800
|
+
|
1801
|
+
# 构建新的地址字符串
|
1802
|
+
new_addr = f"{get_column_letter(min_left)}{min_top}:{get_column_letter(max_right)}{max_bottom}"
|
1803
|
+
return new_addr
|
1804
|
+
|
1805
|
+
|
1783
1806
|
def is_string_type(value):
|
1784
1807
|
"""检查值是否为字符串类型,不是数值或日期类型"""
|
1785
1808
|
# 首先检查日期类型
|
@@ -2195,26 +2218,17 @@ def extract_workbook_summary2(file_path, *,
|
|
2195
2218
|
wb = process_file(file_path, suffix, timeout_seconds, keep_links, ignore_errors)
|
2196
2219
|
|
2197
2220
|
# 2 提取摘要
|
2198
|
-
with TicToc('提取摘要'):
|
2199
|
-
|
2200
|
-
|
2221
|
+
# with TicToc('提取摘要'):
|
2222
|
+
res = wb.extract_summary2()
|
2223
|
+
res['fileName'] = Path(file_path).name
|
2201
2224
|
|
2202
2225
|
# todo 摘要精简?
|
2203
2226
|
|
2204
2227
|
return res
|
2205
2228
|
|
2206
2229
|
|
2207
|
-
def
|
2208
|
-
|
2209
|
-
# 1 主体摘要
|
2210
|
-
data = extract_workbook_summary2(file_path, **kwargs)
|
2211
|
-
if not data:
|
2212
|
-
return data
|
2213
|
-
|
2214
|
-
# 2 增加一些特征计算
|
2215
|
-
# todo 后续估计要改成按table的颗粒度统计以下特征
|
2216
|
-
|
2217
|
-
# 2.1 中文率
|
2230
|
+
def update_raw_summary2(data):
|
2231
|
+
# 1 中文率
|
2218
2232
|
if 'chineseContentRatio' not in data:
|
2219
2233
|
texts = [data['fileName']] # 文件名和表格名都要加上
|
2220
2234
|
texts += [x for x in data['sheetNames']]
|
@@ -2223,7 +2237,7 @@ def extract_workbook_summary2plus(file_path, **kwargs):
|
|
2223
2237
|
all_text = ''.join(map(str, texts))
|
2224
2238
|
data['chineseContentRatio'] = round(calc_chinese_ratio(all_text), 4)
|
2225
2239
|
|
2226
|
-
# 2
|
2240
|
+
# 2 非空单元格率
|
2227
2241
|
if 'nonEmptyCellRatio' not in data:
|
2228
2242
|
content_area, total_area = 0, 0
|
2229
2243
|
for sheet in data['sheets']:
|
@@ -2243,49 +2257,271 @@ def extract_workbook_summary2plus(file_path, **kwargs):
|
|
2243
2257
|
return data
|
2244
2258
|
|
2245
2259
|
|
2246
|
-
def
|
2247
|
-
"""
|
2248
|
-
|
2249
|
-
|
2260
|
+
def extract_workbook_summary2plus(file_path, **kwargs):
|
2261
|
+
""" 增加了全局ratio的计算 """
|
2262
|
+
# 1 主体摘要
|
2263
|
+
data = extract_workbook_summary2(file_path, **kwargs)
|
2264
|
+
if not data:
|
2265
|
+
return data
|
2250
2266
|
|
2251
|
-
#
|
2267
|
+
# 2 增加一些特征计算
|
2268
|
+
# todo 后续估计要改成按table的颗粒度统计以下特征
|
2252
2269
|
|
2253
|
-
|
2270
|
+
data = update_raw_summary2(data)
|
2271
|
+
return data
|
2254
2272
|
|
2255
2273
|
|
2256
|
-
def
|
2257
|
-
|
2258
|
-
|
2259
|
-
|
2260
|
-
|
2261
|
-
|
2262
|
-
|
2263
|
-
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2267
|
-
|
2268
|
-
|
2269
|
-
|
2270
|
-
|
2271
|
-
|
2272
|
-
|
2273
|
-
|
2274
|
-
|
2275
|
-
|
2276
|
-
|
2277
|
-
|
2278
|
-
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2274
|
+
def summary2summary3(summary2, summary_limit_len=3000):
|
2275
|
+
def reduce_step1(y):
|
2276
|
+
for sheet in y['sheets']:
|
2277
|
+
new_cells = {}
|
2278
|
+
for addr, val in sheet['cells'].items():
|
2279
|
+
if val != '':
|
2280
|
+
new_cells[addr] = val
|
2281
|
+
sheet['cells'] = new_cells
|
2282
|
+
|
2283
|
+
cur_summary_len = len(json.dumps(y, ensure_ascii=False))
|
2284
|
+
return cur_summary_len
|
2285
|
+
|
2286
|
+
def reduce_step2(y, cur_summary_len):
|
2287
|
+
""" 这个算法主要是为了解决单个单元格内容过长,导致整个表格摘要的总长度超过了预设限制的问题。
|
2288
|
+
在数据摘要或者信息提取的场景中,我们常常需要将信息压缩到一定长度以便展示或处理,但同时又希望保留尽可能多的有用信息。
|
2289
|
+
这就要求我们智能地缩减内容,特别是在单元格内容不均匀,某些格特别长的情况下。
|
2290
|
+
|
2291
|
+
**基本解决思路**:
|
2292
|
+
1. 设定长度限制:首先明确总摘要长度的限制(`summary_limit_len`)和单个单元格内容的限制(`cell_limit_len`)。
|
2293
|
+
2. 计算超额长度:计算当前总长度超出限制的部分(`delta_len`),这是我们需要通过截断来减少的目标长度。
|
2294
|
+
3. 确定截断策略:为了尽可能保留有用信息,我们选择从最长的单元格开始截断,并且希望通过截断尽可能多的过长单元格来平衡摘要的总长度。
|
2295
|
+
|
2296
|
+
**具体的求解步骤**:
|
2297
|
+
1. 筛选和排序:首先,从所有单元格中筛选出长度超过基准长度(`ref_cell_len`)的单元格,并按长度降序排序。
|
2298
|
+
这样做是为了优先处理那些长度远超其他单元格的“异常”值。
|
2299
|
+
2. 计算可能的减少长度:遍历这些超长单元格,逐个计算如果将当前单元格以及所有比它长的单元格都截断到下一个单元格的长度(或基准长度),
|
2300
|
+
可以减少多少总长度。这个累计值被称为`possible_reduction`。
|
2301
|
+
3. 确定截断点:在遍历的过程中,一旦`possible_reduction`达到或超过了我们的目标减少长度`delta_len`,或者遍历到了最后一个单元格,
|
2302
|
+
我们就找到了一个合适的截断点。这个截断点将是当前单元格长度和下一个单元格长度(或基准长度)之间的某个值,确保截断后总长度不超过限制。
|
2303
|
+
4. 执行截断:按照确定的截断点,更新所有需要截断的单元格的内容,并标记处理模式为“截断模式”。
|
2304
|
+
|
2305
|
+
通过这个算法,我们能够在满足总长度限制的前提下,尽可能多地保留每个单元格的内容,
|
2306
|
+
特别是对于那些内容本身就不是很长的单元格,可以避免或减少不必要的信息损失。
|
2307
|
+
"""
|
2308
|
+
delta_len = cur_summary_len - summary_limit_len # 计算需要减少的长度
|
2309
|
+
ref_cell_len = int(summary_limit_len * 0.05) # 基准长度
|
2310
|
+
# 获取所有单元格,及其长度,只考虑大于基准长度的单元格
|
2311
|
+
all_cells = [(sheet, addr, val, len(val)) for sheet in y['sheets'] for addr, val in sheet['cells'].items()
|
2312
|
+
if isinstance(val, str) and len(val) > ref_cell_len]
|
2313
|
+
# 按长度降序排序
|
2314
|
+
all_cells.sort(key=lambda x: -x[3])
|
2315
|
+
# 逐个尝试截断单元格直到满足长度要求
|
2316
|
+
possible_reduction = 0
|
2317
|
+
for i, (_, _, _, length) in enumerate(all_cells):
|
2318
|
+
# 计算如果截断到下一个单元格长度会减少多少
|
2319
|
+
next_len = all_cells[i + 1][3] if i + 1 < len(all_cells) else ref_cell_len
|
2320
|
+
# 当前单元格长度与下一个单元格长度(或基准长度)的差值就是这一轮可能减少的长度
|
2321
|
+
# 对于第i个单元格,它和之前所有更长的单元格都将减少这么多长度
|
2322
|
+
possible_reduction += (length - next_len) * (i + 1)
|
2323
|
+
# 确定截断长度
|
2324
|
+
if possible_reduction >= delta_len or i == len(all_cells) - 1:
|
2325
|
+
truncation_length = length - max(delta_len // (i + 1), next_len)
|
2326
|
+
# 截断每个超长单元格
|
2327
|
+
for j in range(i + 1):
|
2328
|
+
sheet, addr, val, _ = all_cells[j]
|
2329
|
+
sheet['cells'][addr] = sheet['cells'][addr][:max(truncation_length - 3, 5)] + '...'
|
2330
|
+
break
|
2284
2331
|
|
2285
|
-
|
2286
|
-
|
2287
|
-
|
2332
|
+
return cur_summary_len - possible_reduction
|
2333
|
+
|
2334
|
+
def reduce_step3(y, cur_summary_len):
|
2335
|
+
# 每个sheet本身其他摘要,按照5个单元格估算
|
2336
|
+
total_cells_num = sum([(len(st['cells']) + 5) for st in y['sheets']])
|
2337
|
+
avg_cell_len = cur_summary_len / total_cells_num
|
2338
|
+
# 目标删除单元格数量,向上取整
|
2339
|
+
target_reduce_cells_num = int((cur_summary_len - summary_limit_len) / avg_cell_len + 0.5)
|
2340
|
+
|
2341
|
+
# 相同区域,头尾至少要留2行,然后考虑压缩量,一般一块range至少要10行同构数据,进行中间至少6行的压缩描述才有意义
|
2342
|
+
# 考虑重要性,应该是从末尾表格,末尾数据往前检索压缩,直到压缩量满足要求
|
2343
|
+
|
2344
|
+
for sheet in reversed(y['sheets']):
|
2345
|
+
cells = sheet['cells']
|
2346
|
+
# 1 对单元格,先按行分组
|
2347
|
+
last_line_id = -1
|
2348
|
+
row_groups = []
|
2349
|
+
for addr, val in cells.items():
|
2350
|
+
m = re.search(r'\d+', addr)
|
2351
|
+
if not m: # 应该都一定能找到的,这个判断是为了防止报错
|
2352
|
+
continue
|
2353
|
+
line_id = int(m.group())
|
2288
2354
|
|
2289
|
-
|
2355
|
+
val_type_tag = '@' if isinstance(val, str) else '#'
|
2356
|
+
cell_tag = re.sub(r'\d+', '', addr) + val_type_tag
|
2290
2357
|
|
2291
|
-
|
2358
|
+
if line_id == last_line_id:
|
2359
|
+
row_groups[-1].append([addr, cell_tag])
|
2360
|
+
else:
|
2361
|
+
row_groups.append([[addr, cell_tag]])
|
2362
|
+
last_line_id = line_id
|
2363
|
+
|
2364
|
+
# 2 算出每一行的row_tag,并按照row_tag再分组
|
2365
|
+
last_row_tag = ''
|
2366
|
+
rows_groups = []
|
2367
|
+
for row in row_groups:
|
2368
|
+
row_tag = ''.join([cell_tag for _, cell_tag in row])
|
2369
|
+
if row_tag == last_row_tag:
|
2370
|
+
rows_groups[-1].append(row)
|
2371
|
+
else:
|
2372
|
+
rows_groups.append([row])
|
2373
|
+
last_row_tag = row_tag
|
2374
|
+
|
2375
|
+
# 3 开始压缩
|
2376
|
+
def extract_cells_from_rows(rows):
|
2377
|
+
for row in rows:
|
2378
|
+
for addr, _ in row:
|
2379
|
+
new_cells[addr] = cells[addr]
|
2380
|
+
|
2381
|
+
new_cells = {}
|
2382
|
+
for rows in rows_groups:
|
2383
|
+
if len(rows) < 10:
|
2384
|
+
extract_cells_from_rows(rows)
|
2385
|
+
else: # 压缩中间的数据
|
2386
|
+
# 如果评估到最终摘要可能太小,要收敛下删除的范围
|
2387
|
+
n, m = len(rows), len(rows[0])
|
2388
|
+
target_n = int(target_reduce_cells_num / m + 0.5) # 本来应该删除多少行才行
|
2389
|
+
cur_n = n - 4 if target_n > n - 4 else target_n # 实际删除多少行
|
2390
|
+
left_n = n - cur_n # 剩余多少行
|
2391
|
+
b = left_n // 2
|
2392
|
+
a = left_n - b
|
2393
|
+
|
2394
|
+
extract_cells_from_rows(rows[:a])
|
2395
|
+
addr = combine_addresses(rows[a][0][0], rows[-b - 1][-1][0])
|
2396
|
+
# new_cells[addr] = '这块区域的内容跟前面几行、后面几行的内容结构是一致的,省略显示'
|
2397
|
+
new_cells[addr] = '...'
|
2398
|
+
extract_cells_from_rows(rows[-b:])
|
2399
|
+
|
2400
|
+
target_reduce_cells_num -= cur_n * m
|
2401
|
+
if target_reduce_cells_num <= 0:
|
2402
|
+
break
|
2403
|
+
|
2404
|
+
sheet['cells'] = new_cells
|
2405
|
+
|
2406
|
+
cur_summary_len = len(json.dumps(y, ensure_ascii=False))
|
2407
|
+
return cur_summary_len
|
2408
|
+
|
2409
|
+
def reduce_step4(y, cur_summary_len):
|
2410
|
+
# 1 预计要删除单元格数
|
2411
|
+
# 每个sheet本身其他摘要,按照5个单元格估算
|
2412
|
+
total_cells_num = sum([(len(st['cells']) + 5) for st in y['sheets']])
|
2413
|
+
avg_cell_len = cur_summary_len / total_cells_num
|
2414
|
+
# 目标删除单元格数量,向上取整
|
2415
|
+
target_reduce_cells_num = int((cur_summary_len - summary_limit_len) / avg_cell_len + 0.5)
|
2416
|
+
|
2417
|
+
# 2 每张表格的单元格数
|
2418
|
+
sheet_cells_num = [len(st['cells']) for st in y['sheets']]
|
2419
|
+
total_cells_num = sum([n for n in sheet_cells_num])
|
2420
|
+
|
2421
|
+
# 3 所有的单元格如果都不够删,那就先把所有cells删了再说
|
2422
|
+
if total_cells_num < target_reduce_cells_num:
|
2423
|
+
for st in y['sheets']:
|
2424
|
+
st['cells'] = {}
|
2425
|
+
return len(json.dumps(y, ensure_ascii=False))
|
2426
|
+
|
2427
|
+
# 4 否则每张表按照比例删单元格,只保留前面部分的单元格
|
2428
|
+
left_rate = 1 - target_reduce_cells_num / total_cells_num
|
2429
|
+
while True:
|
2430
|
+
for st in y['sheets']:
|
2431
|
+
st['cells'] = dict(islice(st['cells'].items(), int(left_rate * len(st['cells']))))
|
2432
|
+
cur_summary_len = len(json.dumps(y, ensure_ascii=False))
|
2433
|
+
if cur_summary_len <= summary_limit_len:
|
2434
|
+
return cur_summary_len
|
2435
|
+
if left_rate * total_cells_num < 1:
|
2436
|
+
break
|
2437
|
+
else: # 缩小保留比例,再试
|
2438
|
+
left_rate *= 0.8
|
2439
|
+
|
2440
|
+
return cur_summary_len
|
2441
|
+
|
2442
|
+
def reduce_step5(y, cur_summary_len):
|
2443
|
+
""" 计算平均每张表的长度,保留前面部分的表格 """
|
2444
|
+
n = len(y['sheets'])
|
2445
|
+
avg_sheet_len = cur_summary_len / n
|
2446
|
+
target_reduce_sheet_num = int((cur_summary_len - summary_limit_len) / avg_sheet_len + 0.5)
|
2447
|
+
y['sheets'] = y['sheets'][:n - target_reduce_sheet_num]
|
2448
|
+
|
2449
|
+
while y['sheets']:
|
2450
|
+
cur_summary_len = len(json.dumps(y, ensure_ascii=False))
|
2451
|
+
if cur_summary_len <= summary_limit_len:
|
2452
|
+
return cur_summary_len
|
2453
|
+
y['sheets'] = y['sheets'][:-1] # 依次尝试删除最后一张表格的详细信息
|
2454
|
+
|
2455
|
+
def reduce_step_by_step(y):
|
2456
|
+
mode_tags = [
|
2457
|
+
'Delete empty cell',
|
2458
|
+
'Omit the longer content and replace it with...',
|
2459
|
+
'Omit lines with the same structure',
|
2460
|
+
'Omit later lines',
|
2461
|
+
'Omit later sheets'
|
2462
|
+
]
|
2463
|
+
|
2464
|
+
# 情况0:摘要本来就不大
|
2465
|
+
cur_summary_len = len(json.dumps(y, ensure_ascii=False))
|
2466
|
+
if cur_summary_len <= summary_limit_len:
|
2467
|
+
return y
|
2468
|
+
|
2469
|
+
# 情况1:删除空单元格
|
2470
|
+
cur_summary_len = reduce_step1(y)
|
2471
|
+
if cur_summary_len <= summary_limit_len:
|
2472
|
+
y['mode'] = ', '.join(mode_tags[:1])
|
2473
|
+
return y
|
2474
|
+
|
2475
|
+
# 情况2:单个单元格内容过长的,省略显示
|
2476
|
+
cur_summary_len = reduce_step2(y, cur_summary_len)
|
2477
|
+
if cur_summary_len <= summary_limit_len:
|
2478
|
+
y['mode'] = ', '.join(mode_tags[:2])
|
2479
|
+
return y
|
2480
|
+
|
2481
|
+
# 情况3(核心):同构数据,省略显示(有大量相同行数据,折叠省略表达)
|
2482
|
+
cur_summary_len = reduce_step3(y, cur_summary_len)
|
2483
|
+
if cur_summary_len <= summary_limit_len:
|
2484
|
+
y['mode'] = ', '.join(mode_tags[:3])
|
2485
|
+
return y
|
2486
|
+
|
2487
|
+
# 情况4:每张表都按比例删除后面部分的单元格
|
2488
|
+
cur_summary_len = reduce_step4(y, cur_summary_len)
|
2489
|
+
if cur_summary_len <= summary_limit_len:
|
2490
|
+
y['mode'] = ', '.join(mode_tags[:4])
|
2491
|
+
return y
|
2492
|
+
|
2493
|
+
# 情况5:从后往前删每张表格的详细信息
|
2494
|
+
reduce_step5(y, cur_summary_len)
|
2495
|
+
y['mode'] = ', '.join(mode_tags[:5])
|
2496
|
+
return y
|
2497
|
+
|
2498
|
+
x = summary2
|
2499
|
+
y = {
|
2500
|
+
'fileName': x['fileName'],
|
2501
|
+
'sheetNames': x['sheetNames'],
|
2502
|
+
'sheets': x['sheets'],
|
2503
|
+
'mode': 'Complete information', # 模式0是全量数据
|
2504
|
+
}
|
2505
|
+
|
2506
|
+
# 处理前确保下cells字段存在,避免后续很多处理过程要特判
|
2507
|
+
for st in y['sheets']:
|
2508
|
+
if 'cells' not in st:
|
2509
|
+
st['cells'] = {}
|
2510
|
+
|
2511
|
+
y = reduce_step_by_step(y)
|
2512
|
+
|
2513
|
+
# 但是最后结果还是去掉空cells
|
2514
|
+
for st in y['sheets']:
|
2515
|
+
if not st['cells']:
|
2516
|
+
del st['cells']
|
2517
|
+
|
2518
|
+
return y
|
2519
|
+
|
2520
|
+
|
2521
|
+
def extract_workbook_summary3(file_path, summary_limit_len=4000, **kwargs):
|
2522
|
+
""" 增加了全局ratio的计算 """
|
2523
|
+
data = extract_workbook_summary2plus(file_path, **kwargs)
|
2524
|
+
if not data:
|
2525
|
+
return data
|
2526
|
+
data = summary2summary3(data, summary_limit_len)
|
2527
|
+
return data
|
@@ -442,7 +442,8 @@ class XlAiClient:
|
|
442
442
|
""" 通用文字识别(高精度版): https://cloud.baidu.com/doc/OCR/s/1k3h7y3db """
|
443
443
|
sz = 10 * 1024 ** 2
|
444
444
|
buffer, ratio = self.adjust_image(image, max_length=8192, limit_b64buffer_size=sz, to_buffer=True)
|
445
|
-
result_dict = self.run_aipocr_with_db(self._aipocr.basicAccurate, buffer, options,
|
445
|
+
result_dict = self.run_aipocr_with_db(self._aipocr.basicAccurate, buffer, options,
|
446
|
+
save_buffer_threshold_size=sz)
|
446
447
|
result_dict = ToLabelmeLike.list_word(result_dict, 1 / ratio, 'words_result', 'words_result_num')
|
447
448
|
return result_dict
|
448
449
|
|
@@ -1113,6 +1114,8 @@ class XlAiClient:
|
|
1113
1114
|
except requests.exceptions.Timeout:
|
1114
1115
|
# 为了方便处理,统一也返回ConnectionError
|
1115
1116
|
raise requests.exceptions.ConnectionError()
|
1117
|
+
except Exception:
|
1118
|
+
raise requests.exceptions.ConnectionError()
|
1116
1119
|
|
1117
1120
|
if r.status_code == 200:
|
1118
1121
|
res = json.loads(r.text)
|
@@ -32,7 +32,7 @@ import requests
|
|
32
32
|
from tqdm import tqdm
|
33
33
|
|
34
34
|
try:
|
35
|
-
from transformers import
|
35
|
+
from transformers import AutoTokenizer
|
36
36
|
except ModuleNotFoundError:
|
37
37
|
pass
|
38
38
|
|
@@ -54,13 +54,17 @@ class Tokenizer:
|
|
54
54
|
def get_tokenizer(cls):
|
55
55
|
""" 获取tokenizer,第一次调用时进行初始化 """
|
56
56
|
|
57
|
-
if
|
57
|
+
if cls._tokenizer is None:
|
58
58
|
# 根本没必要每次都尝试连接官网,本地有就不要老是sb的尝试连接huggingface
|
59
59
|
# 而且官网连接也不稳,这里换成我自己的服务器中转
|
60
|
-
gpt2_dir = XlPath.tempdir() / 'huggingface_gpt2'
|
61
|
-
ensure_localdir(gpt2_dir, 'https://xmutpriu.com/download/huggingface_gpt2.zip')
|
62
|
-
Tokenizer._tokenizer = GPT2TokenizerFast.from_pretrained(gpt2_dir)
|
63
|
-
|
60
|
+
# gpt2_dir = XlPath.tempdir() / 'huggingface_gpt2'
|
61
|
+
# ensure_localdir(gpt2_dir, 'https://xmutpriu.com/download/huggingface_gpt2.zip')
|
62
|
+
# Tokenizer._tokenizer = GPT2TokenizerFast.from_pretrained(gpt2_dir)
|
63
|
+
# 240103周三21:23,hx给过的新评测模型
|
64
|
+
gpt2_dir = XlPath.tempdir() / 'Atom-CL-SS'
|
65
|
+
ensure_localdir(gpt2_dir, 'https://xmutpriu.com/download/Atom-CL-SS.zip')
|
66
|
+
cls._tokenizer = AutoTokenizer.from_pretrained(gpt2_dir, trust_remote_code=True)
|
67
|
+
return cls._tokenizer
|
64
68
|
|
65
69
|
@classmethod
|
66
70
|
def tokenize(cls, paragraph, max_length=500):
|
@@ -73,7 +77,7 @@ class Tokenizer:
|
|
73
77
|
>>> Tokenizer.tokenize('Hello, world! 汉字 123.14 35')
|
74
78
|
['Hello', ',', 'Ġworld', '!', 'Ġæ', '±', 'ī', 'åŃ', 'Ĺ', 'Ġ123', '.', '14', 'Ġ35']
|
75
79
|
"""
|
76
|
-
tokenizer =
|
80
|
+
tokenizer = cls.get_tokenizer()
|
77
81
|
|
78
82
|
# 对段落进行切分
|
79
83
|
paragraph_slices = [paragraph[i:i + max_length] for i in range(0, len(paragraph), max_length)]
|
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
|
|
30
30
|
|
31
31
|
setup(
|
32
32
|
name='pyxllib', # pip 安装时用的名字
|
33
|
-
version='0.3.
|
33
|
+
version='0.3.87a', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
34
34
|
author='code4101',
|
35
35
|
author_email='877362867@qq.com',
|
36
36
|
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
|