def __init__(self, parse:None):
     if parse is not None:
         if isinstance(parse, str):
             iGs = []
             st = parse
             while "^DB+" in st:
                 iGs.append(st[:st.index("^DB+")])
                 st = st[st.index("^DB+") + 4:]
             iGs.append(st)
             self.inflectionalGroups = []
             if iGs[0] == "++Punc":
                 self.root = Word("+")
                 self.inflectionalGroups.append(InflectionalGroup("Punc"))
             else:
                 if iGs[0].index("+") != -1:
                     self.root = Word(iGs[0][:iGs[0].index("+")])
                     self.inflectionalGroups.append(InflectionalGroup(iGs[0][iGs[0].index("+") + 1:]))
                 else:
                     self.root = Word(iGs[0])
                 for i in range(1, len(iGs)):
                     self.inflectionalGroups.append(InflectionalGroup(iGs[i]))
         elif isinstance(parse, list):
             self.inflectionalGroups = []
             if parse[0].index("+") != -1:
                 self.root = Word(parse[0][:parse[0].index("+")])
                 self.inflectionalGroups.append(InflectionalGroup(parse[0][parse[0].index("+") + 1:]))
             for i in range(1, len(parse)):
                 self.inflectionalGroups.append(InflectionalGroup(parse[i]))
    def __init__(self, parse=None):
        """
        Constructor of MorphologicalParse class which takes a String parse as an input. First it creates
        a list as iGs for inflectional groups, and while given String contains derivational boundary (^DB+), it
        adds the substring to the iGs list and continue to use given String from 4th index. If it does not contain ^DB+,
        it directly adds the given String to the iGs list. Then, it creates a new list as
        inflectionalGroups and checks for some cases.

        If the first item of iGs list is ++Punc, it creates a new root as +, and by calling
        InflectionalGroup method with Punc it initializes the IG list by parsing given input
        String IG by + and calling the getMorphologicalTag method with these substrings. If getMorphologicalTag method
        returns a tag, it adds this tag to the IG list and also to the inflectionalGroups list.

        If the first item of iGs list has +, it creates a new word of first item's substring from index 0 to +,
        and assigns it to root. Then, by calling InflectionalGroup method with substring from index 0 to +,
        it initializes the IG list by parsing given input String IG by + and calling the getMorphologicalTag
        method with these substrings. If getMorphologicalTag method returns a tag, it adds this tag to the IG list
        and also to the inflectionalGroups list.

        If the first item of iGs list does not contain +, it creates a new word with first item and assigns it as root.
        At the end, it loops through the items of iGs and by calling InflectionalGroup method with these items
        it initializes the IG list by parsing given input String IG by + and calling the getMorphologicalTag
        method with these substrings. If getMorphologicalTag method returns a tag, it adds this tag to the IG list
        and also to the inflectionalGroups list.

        PARAMETERS
        ----------
        parse : str
            String input.
        """
        if parse is not None:
            if isinstance(parse, str):
                iGs = []
                st = parse
                while "^DB+" in st:
                    iGs.append(st[:st.index("^DB+")])
                    st = st[st.index("^DB+") + 4:]
                iGs.append(st)
                self.inflectionalGroups = []
                if iGs[0] == "++Punc":
                    self.root = Word("+")
                    self.inflectionalGroups.append(InflectionalGroup("Punc"))
                else:
                    if iGs[0].index("+") != -1:
                        self.root = Word(iGs[0][:iGs[0].index("+")])
                        self.inflectionalGroups.append(
                            InflectionalGroup(iGs[0][iGs[0].index("+") + 1:]))
                    else:
                        self.root = Word(iGs[0])
                    for i in range(1, len(iGs)):
                        self.inflectionalGroups.append(
                            InflectionalGroup(iGs[i]))
            elif isinstance(parse, list):
                self.inflectionalGroups = []
                if parse[0].index("+") != -1:
                    self.root = Word(parse[0][:parse[0].index("+")])
                    self.inflectionalGroups.append(
                        InflectionalGroup(parse[0][parse[0].index("+") + 1:]))
                for i in range(1, len(parse)):
                    self.inflectionalGroups.append(InflectionalGroup(parse[i]))
Пример #3
0
 def test_containsCase(self):
     inflectionalGroup1 = InflectionalGroup("NOUN+ACTOF+A3PL+P1PL+NOM")
     self.assertIsNotNone(inflectionalGroup1.containsCase())
     inflectionalGroup2 = InflectionalGroup("NOUN+A3PL+P1PL+ACC")
     self.assertIsNotNone(inflectionalGroup2.containsCase())
     inflectionalGroup3 = InflectionalGroup("NOUN+ZERO+A3SG+P3PL+DAT")
     self.assertIsNotNone(inflectionalGroup3.containsCase())
     inflectionalGroup4 = InflectionalGroup("PRON+QUANTP+A1PL+P1PL+LOC")
     self.assertIsNotNone(inflectionalGroup4.containsCase())
     inflectionalGroup5 = InflectionalGroup("NOUN+AGT+A3SG+P2SG+ABL")
     self.assertIsNotNone(inflectionalGroup5.containsCase())
Пример #4
0
 def constructInflectionalGroups(self):
     parse = self.transitionList()
     iGs = []
     while "^DB+" in parse:
         iGs.append(parse[:parse.index("^DB+")])
         parse = parse[parse.index("^DB+") + 4:]
     iGs.append(parse)
     self.inflectionalGroups = []
     self.inflectionalGroups.append(
         InflectionalGroup(iGs[0][iGs[0].index("+") + 1:]))
     for i in range(1, len(iGs)):
         self.inflectionalGroups.append(InflectionalGroup(iGs[i]))
Пример #5
0
 def constructInflectionalGroups(self):
     """
     The constructInflectionalGroups method initially calls the transitionList method and assigns the resulting str
     to the parse variable and creates a new list as iGs. If parse str contains a derivational boundary
     it adds the substring starting from the 0 to the index of derivational boundary to the iGs. If it does not
     contain a DB, it directly adds parse to the iGs. Then, creates and initializes new list as inflectionalGroups
     and fills with the items of iGs.
     """
     parse = self.transitionList()
     iGs = []
     while "^DB+" in parse:
         iGs.append(parse[:parse.index("^DB+")])
         parse = parse[parse.index("^DB+") + 4:]
     iGs.append(parse)
     self.inflectionalGroups = []
     self.inflectionalGroups.append(
         InflectionalGroup(iGs[0][iGs[0].index("+") + 1:]))
     for i in range(1, len(iGs)):
         self.inflectionalGroups.append(InflectionalGroup(iGs[i]))
Пример #6
0
 def test_size(self):
     inflectionalGroup1 = InflectionalGroup("ADJ")
     self.assertEqual(1, inflectionalGroup1.size())
     inflectionalGroup2 = InflectionalGroup("ADJ+JUSTLIKE")
     self.assertEqual(2, inflectionalGroup2.size())
     inflectionalGroup3 = InflectionalGroup("ADJ+FUTPART+P1PL")
     self.assertEqual(3, inflectionalGroup3.size())
     inflectionalGroup4 = InflectionalGroup("NOUN+A3PL+P1PL+ABL")
     self.assertEqual(4, inflectionalGroup4.size())
     inflectionalGroup5 = InflectionalGroup("ADJ+WITH+A3SG+P3SG+ABL")
     self.assertEqual(5, inflectionalGroup5.size())
     inflectionalGroup6 = InflectionalGroup("VERB+ABLE+NEG+FUT+A3PL+COP")
     self.assertEqual(6, inflectionalGroup6.size())
     inflectionalGroup7 = InflectionalGroup(
         "VERB+ABLE+NEG+AOR+A3SG+COND+A1SG")
     self.assertEqual(7, inflectionalGroup7.size())
Пример #7
0
 def test_containsPossessive(self):
     inflectionalGroup1 = InflectionalGroup("NOUN+ZERO+A3SG+P1SG+NOM")
     self.assertTrue(inflectionalGroup1.containsPossessive())
     inflectionalGroup2 = InflectionalGroup("NOUN+AGT+A3PL+P2SG+ABL")
     self.assertTrue(inflectionalGroup2.containsPossessive())
     inflectionalGroup3 = InflectionalGroup("NOUN+INF2+A3PL+P3SG+NOM")
     self.assertTrue(inflectionalGroup3.containsPossessive())
     inflectionalGroup4 = InflectionalGroup("NOUN+ZERO+A3SG+P1PL+ACC")
     self.assertTrue(inflectionalGroup4.containsPossessive())
     inflectionalGroup5 = InflectionalGroup("NOUN+ZERO+A3SG+P2PL+INS")
     self.assertTrue(inflectionalGroup5.containsPossessive())
     inflectionalGroup6 = InflectionalGroup("PRON+QUANTP+A3PL+P3PL+LOC")
     self.assertTrue(inflectionalGroup6.containsPossessive())
Пример #8
0
 def test_containsPlural(self):
     inflectionalGroup1 = InflectionalGroup("VERB+NEG+NECES+A1PL")
     self.assertTrue(inflectionalGroup1.containsPlural())
     inflectionalGroup2 = InflectionalGroup("PRON+PERS+A2PL+PNON+NOM")
     self.assertTrue(inflectionalGroup2.containsPlural())
     inflectionalGroup3 = InflectionalGroup("NOUN+DIM+A3PL+P2SG+GEN")
     self.assertTrue(inflectionalGroup3.containsPlural())
     inflectionalGroup4 = InflectionalGroup("NOUN+A3PL+P1PL+GEN")
     self.assertTrue(inflectionalGroup4.containsPlural())
     inflectionalGroup5 = InflectionalGroup("NOUN+ZERO+A3SG+P2PL+INS")
     self.assertTrue(inflectionalGroup5.containsPlural())
     inflectionalGroup6 = InflectionalGroup("PRON+QUANTP+A3PL+P3PL+LOC")
     self.assertTrue(inflectionalGroup6.containsPlural())
Пример #9
0
 def test_containsTag(self):
     inflectionalGroup1 = InflectionalGroup("NOUN+ZERO+A3SG+P1SG+NOM")
     self.assertTrue(inflectionalGroup1.containsTag(MorphologicalTag.NOUN))
     inflectionalGroup2 = InflectionalGroup("NOUN+AGT+A3PL+P2SG+ABL")
     self.assertTrue(inflectionalGroup2.containsTag(MorphologicalTag.AGENT))
     inflectionalGroup3 = InflectionalGroup("NOUN+INF2+A3PL+P3SG+NOM")
     self.assertTrue(
         inflectionalGroup3.containsTag(MorphologicalTag.NOMINATIVE))
     inflectionalGroup4 = InflectionalGroup("NOUN+ZERO+A3SG+P1PL+ACC")
     self.assertTrue(inflectionalGroup4.containsTag(MorphologicalTag.ZERO))
     inflectionalGroup5 = InflectionalGroup("NOUN+ZERO+A3SG+P2PL+INS")
     self.assertTrue(inflectionalGroup5.containsTag(MorphologicalTag.P2PL))
     inflectionalGroup6 = InflectionalGroup("PRON+QUANTP+A3PL+P3PL+LOC")
     self.assertTrue(
         inflectionalGroup6.containsTag(
             MorphologicalTag.QUANTITATIVEPRONOUN))