From 3a3905f2c654be431f7ffcd4bb2c7dd5593a37d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 9 Jan 2026 22:42:22 +0100 Subject: [PATCH] Fix memory leaks related to multiple instances of Morfeusz' dict --- conmorfeusz/conmorfeusz/morfeusz/__init__.py | 10 ++++++++++ conmorfeusz/conmorfeusz/service/analyzer.py | 5 ++--- conmorfeusz/conmorfeusz/service/generator.py | 5 ++--- 3 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 conmorfeusz/conmorfeusz/morfeusz/__init__.py diff --git a/conmorfeusz/conmorfeusz/morfeusz/__init__.py b/conmorfeusz/conmorfeusz/morfeusz/__init__.py new file mode 100644 index 0000000..a4b232d --- /dev/null +++ b/conmorfeusz/conmorfeusz/morfeusz/__init__.py @@ -0,0 +1,10 @@ +import morfeusz2 + +class Morfeusz: + _instance = None + + @classmethod + def get(cls): + if cls._instance is None: + cls._instance = morfeusz2.Morfeusz(expand_tags=True) + return cls._instance diff --git a/conmorfeusz/conmorfeusz/service/analyzer.py b/conmorfeusz/conmorfeusz/service/analyzer.py index 1232f58..d5441c8 100644 --- a/conmorfeusz/conmorfeusz/service/analyzer.py +++ b/conmorfeusz/conmorfeusz/service/analyzer.py @@ -1,5 +1,4 @@ -import morfeusz2 -from conmorfeusz import concraft, utils +from conmorfeusz import morfeusz, concraft, utils def analysis_entry_to_dict(entry): @@ -36,7 +35,7 @@ def disamb_entry_to_dict(entry): def analyse(text, disamb, port): - morf = morfeusz2.Morfeusz(expand_tags=True) + morf = morfeusz.Morfeusz.get() analysis = morf.analyse(text) if disamb == False: diff --git a/conmorfeusz/conmorfeusz/service/generator.py b/conmorfeusz/conmorfeusz/service/generator.py index 757682a..87ab532 100644 --- a/conmorfeusz/conmorfeusz/service/generator.py +++ b/conmorfeusz/conmorfeusz/service/generator.py @@ -1,5 +1,4 @@ -import morfeusz2 -from conmorfeusz import utils +from conmorfeusz import morfeusz, utils def entry_to_dict(entry): segment, lemma, tags, frequency, qualifiers = entry @@ -14,5 +13,5 @@ def entry_to_dict(entry): def generate(lemma): - morf = morfeusz2.Morfeusz(expand_tags=True) + morf = morfeusz.Morfeusz.get() return [entry_to_dict(e) for e in morf.generate(lemma) if len(e) > 0] \ No newline at end of file