Repository Analysis

PDFMathTranslate/PDFMathTranslate

[EMNLP 2025 Demo] PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/MCP/Docker/Zotero

13.6 Low AI signal View on GitHub
13.6
Adjusted Score
13.6
Raw Score
100%
Time Factor
2026-05-25
Last Push
34,238
Stars
Python
Language
11,455
Lines of Code
56
Files
112
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 10MEDIUM 6LOW 96

Pattern Findings

112 matches across 9 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers54 hits · 51 pts
SeverityFileLineSnippet
LOWtest/test_translator.py52 def test_add_cache_impact_parameters(self):
LOWtest/test_translator.py80 def test_base_translator_throw(self):
LOWtest/test_translator.py94 def test_missing_base_url_raises_error(self):
LOWtest/test_translator.py103 def test_missing_model_raises_error(self):
LOWtest/test_translator.py116 def test_initialization_with_valid_envs(self):
LOWtest/test_translator.py135 def test_default_api_key_fallback(self):
LOWtest/test_kernel.py319 def test_legacy_version_matches_package(self):
LOWtest/test_kernel.py326 def test_experimental_version_is_string(self):
LOWtest/test_kernel.py334 def test_experimental_version_semver_when_available(self):
LOWtest/test_kernel.py17 def test_translate_request_defaults(self):
LOWtest/test_kernel.py29 def test_translate_result_defaults(self):
LOWtest/test_kernel.py37 def test_translate_result_with_paths(self):
LOWtest/test_kernel.py73 def test_get_nonexistent_raises(self):
LOWtest/test_kernel.py79 def test_switch_and_active_name(self):
LOWtest/test_kernel.py90 def test_switch_unavailable_raises(self):
LOWtest/test_kernel.py101 def test_available_filters_correctly(self):
LOWtest/test_kernel.py149 def test_is_available_without_venv(self):
LOWtest/test_kernel.py198 def test_cli_args_vfont_vchar(self):
LOWtest/test_kernel.py226 def test_cli_args_ignore_cache(self):
LOWtest/test_kernel.py245 def test_cli_args_service_model_split(self):
LOWtest/test_kernel.py253 def test_service_name_mapping(self):
LOWtest/test_kernel.py266 def test_request_to_env_maps_envs(self):
LOWtest/test_kernel.py282 def test_request_to_env_service_model(self):
LOWtest/test_kernel.py351 def test_translate_single_file(self, mock_model_inst, mock_onnx, mock_translate):
LOWtest/test_kernel.py370 def test_translate_passes_all_params(
LOWtest/test_kernel.py405 def test_translate_with_prompt_wraps_template(
LOWtest/test_kernel.py434 def test_translate_single_file(self, mock_venv, mock_avail, mock_popen):
LOWtest/test_kernel.py464 def test_translate_subprocess_failure_raises(self, mock_venv, mock_popen):
LOWtest/test_kernel.py488 def test_translate_progress_callback(self, mock_venv, mock_avail, mock_popen):
LOWtest/test_kernel.py531 def test_all_services_produce_cli_flag(self):
LOWtest/test_kernel.py601 def test_output_defaults_to_input_parent(self):
LOWtest/test_kernel.py611 def test_output_resolved_to_absolute_path(self):
LOWtest/test_kernel.py623 def test_explicit_output_resolved_to_absolute(self):
LOWtest/test_kernel.py643 def test_cli_fast_mode_routes_through_kernel(
LOWtest/test_kernel.py664 def test_cli_precise_mode_routes_through_kernel(
LOWtest/test_kernel.py685 def test_cli_service_model_syntax_passed_through(
LOWtest/test_doclayout.py31 def test_resize_and_pad_image(self):
LOWtest/test_converter.py56 def test_translator_initialization(self):
LOWtest/test_converter.py83 def test_receive_layout_with_complex_formula(self):
LOWtest/test_converter.py98 def test_invalid_translation_service(self):
LOWtest/test_cli.py16 def test_importing_package_does_not_eagerly_load_translation_pipeline(self):
LOWtest/test_cli.py22 def test_version_flag_exits_before_loading_heavy_modules(self):
LOWtest/test_cache.py90 def test_consistent_param_serialization(self):
LOWtest/test_cache.py122 def test_cache_with_sorted_params(self):
LOWpdf2zh/config.py62 def _remove_circular_references(self, obj, seen=None):
LOWpdf2zh/config.py155 def get_env_by_translatername(cls, translater_name, name, default=None):
LOWpdf2zh/pdf2zh.py231def find_all_files_in_directory(directory_path):
LOWpdf2zh/translator.py35def remove_control_characters(s):
LOWpdf2zh/translator.py81 def add_cache_impact_parameters(self, k: str, v):
LOWpdf2zh/translator.py154 def get_rich_text_left_placeholder(self, id: int):
LOWpdf2zh/translator.py157 def get_rich_text_right_placeholder(self, id: int):
LOWpdf2zh/translator.py496 def get_rich_text_left_placeholder(self, id: int):
LOWpdf2zh/translator.py499 def get_rich_text_right_placeholder(self, id: int):
LOWpdf2zh/kernel/v2_worker.py22def _redirect_stdout_to_stderr():
Magic Placeholder Names9 hits · 45 pts
SeverityFileLineSnippet
HIGHdocs/PROXY_CONFIGURATION.md22 "GROK_API_KEY": "your-api-key",
HIGHdocs/PROXY_CONFIGURATION.md56 "OPENAILIKED_API_KEY": "your-api-key",
HIGHdocs/PROXY_CONFIGURATION.md70 "OPENAI_API_KEY": "your-api-key",
HIGHdocs/PROXY_CONFIGURATION.md86 -H "Authorization: Bearer your-api-key"
HIGHdocs/PROXY_CONFIGURATION.md168export GROK_API_KEY="your-api-key"
HIGHdocs/PROXY_CONFIGURATION.md189 "GROK_API_KEY": "your-api-key",
HIGHdocs/PROXY_CONFIGURATION.md198 "OPENAILIKED_API_KEY": "your-api-key",
HIGHdocs/ADVANCED.md251 "GROK_API_KEY": "your-api-key",
HIGHdocs/ADVANCED.md310 "GROK_API_KEY": "your-api-key",
Excessive Try-Catch Wrapping21 hits · 22 pts
SeverityFileLineSnippet
LOWpdf2zh/pdfinterp.py244 except Exception:
LOWpdf2zh/high_level.py228 except Exception:
LOWpdf2zh/high_level.py353 except Exception as e:
LOWpdf2zh/high_level.py390 except Exception:
LOWpdf2zh/pdf2zh.py317 except Exception:
LOWpdf2zh/pdf2zh.py413 except Exception:
LOWpdf2zh/cache.py89 except Exception as e:
LOWpdf2zh/converter.py419 except Exception:
LOWpdf2zh/converter.py429 except Exception:
LOWpdf2zh/translator.py130 except Exception:
LOWpdf2zh/translator.py395 except Exception as e:
LOWpdf2zh/translator.py917 except Exception:
MEDIUMpdf2zh/translator.py617def do_translate(self, text) -> str:
LOWpdf2zh/gui.py192 except Exception: # filename from url
MEDIUMpdf2zh/gui.py838 print(f"Error: File '{file_path[1]}' not found.")
MEDIUMpdf2zh/gui.py845 print(f"Error: File '{file_path[0]}' not found.")
LOWpdf2zh/gui.py902 except Exception:
LOWpdf2zh/kernel/v2_worker.py92 except Exception as e:
LOWpdf2zh/kernel/precise.py56 except Exception:
LOWpdf2zh/kernel/precise.py112 except Exception:
LOWpdf2zh/kernel/precise.py172 except Exception:
Deep Nesting10 hits · 10 pts
SeverityFileLineSnippet
LOWpdf2zh/pdfinterp.py67
LOWpdf2zh/pdfinterp.py301
LOWpdf2zh/config.py155
LOWpdf2zh/high_level.py72
LOWpdf2zh/high_level.py171
LOWpdf2zh/high_level.py304
LOWpdf2zh/converter.py170
LOWpdf2zh/gui.py172
LOWpdf2zh/kernel/v2_worker.py36
LOWpdf2zh/kernel/precise.py122
Unused Imports9 hits · 8 pts
SeverityFileLineSnippet
LOWtest/test_kernel.py336
LOWpdf2zh/pdf2zh.py6
LOWpdf2zh/translator.py926
LOWpdf2zh/kernel/v2_bridge.py8
LOWpdf2zh/kernel/legacy.py3
LOWpdf2zh/kernel/registry.py3
LOWpdf2zh/kernel/protocol.py3
LOWpdf2zh/kernel/v2_worker.py13
LOWpdf2zh/kernel/precise.py3
Self-Referential Comments3 hits · 7 pts
SeverityFileLineSnippet
MEDIUMtest/test_doclayout.py32 # Create a dummy image (100x200)
MEDIUMtest/test_doclayout.py62 # Create a dummy image
MEDIUMpdf2zh/gui.py567# The following code creates the GUI
Redundant / Tautological Comments3 hits · 6 pts
SeverityFileLineSnippet
LOWpdf2zh/pdf2zh.py238 # Check if the provided path is a directory
LOWpdf2zh/pdf2zh.py247 # Check if the file is a PDF
LOWpdf2zh/gui.py123# Check if this is a public demo, which has resource limits
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippet
HIGHpdf2zh/pdfinterp.py364 self.push(obj)
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippet
LOWtest/test_cache.py161 # cache_instance = cache.TranslationCache("test_engine")
LOWtest/test_cache.py181 # # Read operation - verify our own write