Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-740: optimize imports #741

Merged
merged 2 commits into from
Jun 22, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 24 additions & 20 deletions underthesea/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@
# -*- coding: utf-8 -*-
import os
import sys
from functools import lru_cache


__author__ = """Vu Anh"""
__email__ = 'anhv.ict91@gmail.com'

# Check python version
try:
version_info = sys.version_info
if version_info < (3, 6, 0):
raise RuntimeError("underthesea requires Python 3.6 or later")
if version_info < (3, 7, 0):
raise RuntimeError("underthesea requires Python 3.y or later")
except Exception:
pass

Expand Down Expand Up @@ -40,33 +42,35 @@
from .pipeline.chunking import chunk
from .pipeline.ner import ner

try:
from underthesea.pipeline.classification import classify
except Exception:
pass
try:
from underthesea.pipeline.sentiment import sentiment
except Exception:
pass
optional_imports = {
'classify': 'underthesea.pipeline.classification',
'sentiment': 'underthesea.pipeline.sentiment',
'lang_detect': 'underthesea.pipeline.lang_detect',
'dependency_parse': 'underthesea.pipeline.dependency_parse'
}

try:
from underthesea.pipeline.lang_detect import lang_detect
except Exception as e:
print(e)

@lru_cache(maxsize=None)
def get_optional_import(module_name, object_name):
try:
module = __import__(module_name, fromlist=[object_name])
return getattr(module, object_name)
except ImportError:
return None

# lazy loading
def dependency_parse(*args, **kwargs):
from underthesea.pipeline.dependency_parse import dependency_parse
return dependency_parse(*args, **kwargs)

for name, module in optional_imports.items():
globals()[name] = get_optional_import(module, name)

__all__ = [
'sent_tokenize',
'text_normalize',
'word_tokenize', 'pos_tag', 'chunk',
'word_tokenize',
'pos_tag',
'chunk',
'ner',
'lang_detect',
'classify', 'sentiment',
'classify',
'sentiment',
'dependency_parse'
]
Loading