From 2f7f90d073e5f289cb4673c0d89e26a9e38345b7 Mon Sep 17 00:00:00 2001 From: Cyprian Laskowski Date: Fri, 10 Sep 2021 15:15:04 +0200 Subject: [PATCH] Merged converters into one --- conversion_utils/jos_msds_and_properties.py | 12 +++--------- tests/test_jos_msd_to_properties.py | 18 +++++++++--------- tests/test_jos_properties_to_msd.py | 18 +++++++++--------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/conversion_utils/jos_msds_and_properties.py b/conversion_utils/jos_msds_and_properties.py index cccd4b9..b019535 100644 --- a/conversion_utils/jos_msds_and_properties.py +++ b/conversion_utils/jos_msds_and_properties.py @@ -196,12 +196,12 @@ class Msd: return 'code={code}, language={language}'.format(code=self.code, language=self.language) -class MsdToProperties: +class Converter: def __init__(self, specifications): self.specifications = specifications - def convert(self, msd, lemma, properties_language): + def msd_to_properties(self, msd, lemma, properties_language): category_char = msd.code[0].lower() value_chars = msd.code[1:] category = self.specifications.find_category_by_char(category_char, msd.language) @@ -224,13 +224,7 @@ class MsdToProperties: form_feature_map[feature_name] = feature_value return Properties(category_name, lexeme_feature_map, form_feature_map, properties_language) - -class PropertiesToMsd: - - def __init__(self, specifications): - self.specifications = specifications - - def convert(self, properties, msd_language): + def properties_to_msd(self, properties, msd_language): category = self.specifications.find_category_by_name(properties.category, properties.language) category_char = category.char_pair.get(msd_language).upper() feature_map = properties.lexeme_feature_map.copy() diff --git a/tests/test_jos_msd_to_properties.py b/tests/test_jos_msd_to_properties.py index c91d6da..abd7eb2 100644 --- a/tests/test_jos_msd_to_properties.py +++ b/tests/test_jos_msd_to_properties.py @@ -2,7 +2,7 @@ import os.path import lxml.etree as lxml import unittest -from conversion_utils.jos_msds_and_properties import SpecificationsBuilder, MsdToProperties, Msd +from conversion_utils.jos_msds_and_properties import SpecificationsBuilder, Converter, Msd class JosMsdToPropertiesTestCase(unittest.TestCase): @@ -10,52 +10,52 @@ class JosMsdToPropertiesTestCase(unittest.TestCase): specifications_file_name = os.path.join(os.path.dirname(__file__), '../resources/msd-sl.spc.xml') builder = SpecificationsBuilder() specifications = builder.build(specifications_file_name) - self.converter = MsdToProperties(specifications) + self.converter = Converter(specifications) def test_en_en(self): - properties = self.converter.convert(Msd('Ncfpd', 'en'), 'miza', 'en') + properties = self.converter.msd_to_properties(Msd('Ncfpd', 'en'), 'miza', 'en') self.assertEqual(properties.language, 'en') self.assertEqual(properties.category, 'noun') self.assertEqual(properties.lexeme_feature_map, {'type':'common', 'gender':'feminine'}) self.assertEqual(properties.form_feature_map, {'number':'plural', 'case':'dative'}) def test_en_sl(self): - properties = self.converter.convert(Msd('Ncfpd', 'en'), 'miza', 'sl') + properties = self.converter.msd_to_properties(Msd('Ncfpd', 'en'), 'miza', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'samostalnik') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'občno_ime', 'spol':'ženski'}) self.assertEqual(properties.form_feature_map, {'število':'množina', 'sklon':'dajalnik'}) def test_sl_en(self): - properties = self.converter.convert(Msd('Sozmd', 'sl'), 'miza', 'en') + properties = self.converter.msd_to_properties(Msd('Sozmd', 'sl'), 'miza', 'en') self.assertEqual(properties.language, 'en') self.assertEqual(properties.category, 'noun') self.assertEqual(properties.lexeme_feature_map, {'type':'common', 'gender':'feminine'}) self.assertEqual(properties.form_feature_map, {'number':'plural', 'case':'dative'}) def test_sl_sl(self): - properties = self.converter.convert(Msd('Sozmd', 'sl'), 'miza', 'sl') + properties = self.converter.msd_to_properties(Msd('Sozmd', 'sl'), 'miza', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'samostalnik') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'občno_ime', 'spol':'ženski'}) self.assertEqual(properties.form_feature_map, {'število':'množina', 'sklon':'dajalnik'}) def test_exception_feature_level(self): # testing level exception: ('pronoun', 8, 'ti') - properties = self.converter.convert(Msd('Pp2-sd--y', 'en'), 'ti', 'sl') + properties = self.converter.msd_to_properties(Msd('Pp2-sd--y', 'en'), 'ti', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'zaimek') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'osebni', 'oseba':'druga'}) self.assertEqual(properties.form_feature_map, {'število':'ednina', 'sklon':'dajalnik', 'naslonskost':'klitična'}) def test_normal_feature_level(self): # invalid msd, but useful for testing contrast with previous test - properties = self.converter.convert(Msd('Pp2-pd--y', 'en'), 'vi', 'sl') + properties = self.converter.msd_to_properties(Msd('Pp2-pd--y', 'en'), 'vi', 'sl') self.assertEqual(properties.language, 'sl') self.assertEqual(properties.category, 'zaimek') self.assertEqual(properties.lexeme_feature_map, {'vrsta':'osebni', 'oseba':'druga', 'naslonskost':'klitična'}) self.assertEqual(properties.form_feature_map, {'število':'množina', 'sklon':'dajalnik'}) def test_featureless(self): - properties = self.converter.convert(Msd('V', 'sl'), 'in', 'en') + properties = self.converter.msd_to_properties(Msd('V', 'sl'), 'in', 'en') self.assertEqual(properties.language, 'en') self.assertEqual(properties.category, 'conjunction') self.assertEqual(properties.lexeme_feature_map, {}) diff --git a/tests/test_jos_properties_to_msd.py b/tests/test_jos_properties_to_msd.py index 23c1cfe..ba7c272 100644 --- a/tests/test_jos_properties_to_msd.py +++ b/tests/test_jos_properties_to_msd.py @@ -2,7 +2,7 @@ import os.path import lxml.etree as lxml import unittest -from conversion_utils.jos_msds_and_properties import SpecificationsBuilder, PropertiesToMsd, Properties +from conversion_utils.jos_msds_and_properties import SpecificationsBuilder, Converter, Properties class JosPropertiesToMsdTestCase(unittest.TestCase): @@ -10,40 +10,40 @@ class JosPropertiesToMsdTestCase(unittest.TestCase): specifications_file_name = os.path.join(os.path.dirname(__file__), '../resources/msd-sl.spc.xml') builder = SpecificationsBuilder() specifications = builder.build(specifications_file_name) - self.converter = PropertiesToMsd(specifications) + self.converter = Converter(specifications) def test_en_en(self): - msd = self.converter.convert(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'en') + msd = self.converter.properties_to_msd(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'en') self.assertEqual(msd.language, 'en') self.assertEqual(msd.code, 'Ncfdn') def test_en_sl(self): - msd = self.converter.convert(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'sl') + msd = self.converter.properties_to_msd(Properties('noun', {'type':'common', 'gender':'feminine'}, {'number':'dual', 'case':'nominative'}, 'en'), 'sl') self.assertEqual(msd.language, 'sl') self.assertEqual(msd.code, 'Sozdi') def test_sl_en(self): - msd = self.converter.convert(Properties('samostalnik', {'vrsta':'občno_ime', 'spol':'ženski'}, {'število':'dvojina', 'sklon':'imenovalnik'}, 'sl'), 'en') + msd = self.converter.properties_to_msd(Properties('samostalnik', {'vrsta':'občno_ime', 'spol':'ženski'}, {'število':'dvojina', 'sklon':'imenovalnik'}, 'sl'), 'en') self.assertEqual(msd.language, 'en') self.assertEqual(msd.code, 'Ncfdn') def test_sl_sl(self): - msd = self.converter.convert(Properties('samostalnik', {'vrsta':'občno_ime', 'spol':'ženski'}, {'število':'dvojina', 'sklon':'imenovalnik'}, 'sl'), 'sl') + msd = self.converter.properties_to_msd(Properties('samostalnik', {'vrsta':'občno_ime', 'spol':'ženski'}, {'število':'dvojina', 'sklon':'imenovalnik'}, 'sl'), 'sl') self.assertEqual(msd.language, 'sl') self.assertEqual(msd.code, 'Sozdi') def test_exception_feature_level(self): - msd = self.converter.convert(Properties('zaimek', {'vrsta':'osebni', 'oseba':'druga'}, {'število':'ednina', 'sklon':'dajalnik', 'naslonskost':'klitična'}, 'sl'), 'en') + msd = self.converter.properties_to_msd(Properties('zaimek', {'vrsta':'osebni', 'oseba':'druga'}, {'število':'ednina', 'sklon':'dajalnik', 'naslonskost':'klitična'}, 'sl'), 'en') self.assertEqual(msd.language, 'en') self.assertEqual(msd.code, 'Pp2-sd--y') def test_normal_feature_level(self): - msd = self.converter.convert(Properties('zaimek', {'vrsta':'osebni', 'oseba':'druga', 'naslonskost':'klitična'}, {'število':'množina', 'sklon':'dajalnik'}, 'sl'), 'en') + msd = self.converter.properties_to_msd(Properties('zaimek', {'vrsta':'osebni', 'oseba':'druga', 'naslonskost':'klitična'}, {'število':'množina', 'sklon':'dajalnik'}, 'sl'), 'en') self.assertEqual(msd.language, 'en') self.assertEqual(msd.code, 'Pp2-pd--y') def test_featureless(self): - msd = self.converter.convert(Properties('conjunction', {}, {}, 'en'), 'sl') + msd = self.converter.properties_to_msd(Properties('conjunction', {}, {}, 'en'), 'sl') self.assertEqual(msd.language, 'sl') self.assertEqual(msd.code, 'V') \ No newline at end of file