public void He_read_s() { List <Morpheme> morphemes = new List <Morpheme>() { new Morpheme(myAttributesModel, "he", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "s", EnglishAttributes.I.NonLexeme.Suffix), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.NonLexeme.Suffix), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.EpsilonAdPosition("I>I+", "", EnglishAttributes.I.NonLexeme.Suffix, EnglishAttributes.I.Lexeme), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("he", "reads"); Assert.AreEqual(1, results.Count); Assert.AreEqual("he", results[0].Left.Morpheme.Morph); Assert.AreEqual("s", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("read", results[0].Right.Right.Morpheme.Morph); }
public void He_is_writer() { List <Morpheme> morphemes = new List <Morpheme>() { new Morpheme(myAttributesModel, "he", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "is", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "writ", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "er", EnglishAttributes.O.NonLexeme.Suffix), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.NonLexeme.Suffix, "O+"), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.O2_I, EnglishPattern.PairTransference("I>O", "", EnglishAttributes.O.Lexeme, EnglishAttributes.O.NonLexeme.Suffix, EnglishAttributes.I.Lexeme), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("he", "is", "writer"); Assert.AreEqual(1, results.Count); Assert.AreEqual("er", results[0].Left.Left.Morpheme.Morph); Assert.AreEqual("writ", results[0].Left.Right.Morpheme.Morph); Assert.AreEqual("he", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("is", results[0].Right.Right.Morpheme.Morph); }
public void I_read_the_book() { List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "the", EnglishAttributes.A.Lexeme.Determiner.DefiniteArticle), new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme.Noun), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.O2_I, EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme).SetLeftFirst(), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("I", "read", "the", "book"); Assert.AreEqual(1, results.Count); Assert.AreEqual("I", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("read", results[0].Right.Right.Morpheme.Morph); Assert.AreEqual("the", results[0].Left.Left.Morpheme.Morph); Assert.AreEqual("book", results[0].Left.Right.Morpheme.Morph); }
public void World_as_people_say_lately_ends() { List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.E.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.MorphematicAdPosition("I-U-O", "", EnglishAttributes.U.Lexeme.Conjunction, EnglishAttributes.I.Lexeme, EnglishAttributes.O.Lexeme), EnglishPattern.EpsilonAdPosition("E-I", "", EnglishAttributes.E.Lexeme.Adverb, EnglishAttributes.I.Lexeme).SetSubstitutionForLeft(SubstitutionRules.Nothing), }; List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "world", EnglishAttributes.O.Lexeme.Noun), new Morpheme(myAttributesModel, "as", EnglishAttributes.U.Lexeme.Conjunction), new Morpheme(myAttributesModel, "people", EnglishAttributes.O.Lexeme.Noun), new Morpheme(myAttributesModel, "say", EnglishAttributes.I.Lexeme.Verb), new Morpheme(myAttributesModel, "lately", EnglishAttributes.E.Lexeme.Adverb), new Morpheme(myAttributesModel, "ends", EnglishAttributes.I.Lexeme.Verb), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("world", "as", "people", "say", "lately", "ends"); // TODO: Assert.AreEqual(1, results.Count); }
public void I_will_read() { List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.EpsilonAdPosition("I-I", "", EnglishAttributes.I.Lexeme.Verb.Modal, EnglishAttributes.I.Lexeme) .SetLeftFirst() .SetSubstitutionForLeft(SubstitutionRules.Nothing), }; List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "will", EnglishAttributes.I.Lexeme.Verb.Modal), new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Form.Infinitive | EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("I", "will", "read"); Assert.AreEqual(1, results.Count); Assert.AreEqual("I", results[0].Left.Morpheme.Morph); Assert.AreEqual("will", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("read", results[0].Right.Right.Morpheme.Morph); }
public void I_read() { List <Morpheme> morphemes = new List <Morpheme>() { new Morpheme(myAttributesModel, "i", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, ".", EnglishAttributes.U.NonLexeme.PunctuationMark.Period) }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), new Pattern(".") { UpRule = EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.U.NonLexeme.PunctuationMark.Period), LeftRule = MorphemeRule.Anything, RightRule = EnglishMorphemeRule.I_Lexeme, }, }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("i", "read", "."); Assert.AreEqual(1, results.Count); Assert.IsTrue(results[0].Right.Left.Morpheme.Morph == "i" && results[0].Right.Left.Morpheme.GrammarCharacter == GrammarCharacter.O); Assert.IsTrue(results[0].Right.Right.Morpheme.Morph == "read" && results[0].Right.Right.Morpheme.GrammarCharacter == GrammarCharacter.I); Assert.IsTrue(results[0].Right.Morpheme.Morph == "" && results[0].Right.Morpheme.GrammarCharacter == GrammarCharacter.e); Assert.IsTrue(results[0].Morpheme.Morph == "." && results[0].Morpheme.GrammarCharacter == GrammarCharacter.U); }
public void Number_of_people_say() { List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.MorphematicAdPosition("O-E-O", "", EnglishAttributes.E.Lexeme.Preposition, EnglishAttributes.O.Lexeme, EnglishAttributes.O.Lexeme), }; List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "number", EnglishAttributes.O.Lexeme.Noun), new Morpheme(myAttributesModel, "people", EnglishAttributes.O.Lexeme.Noun), new Morpheme(myAttributesModel, "say", EnglishAttributes.I.Lexeme.Verb), new Morpheme(myAttributesModel, "of", EnglishAttributes.E.Lexeme.Preposition), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("number", "of", "people", "say"); Assert.AreEqual(1, results.Count); Assert.AreEqual("number", results[0].Left.Right.Morpheme.Morph); Assert.AreEqual("of", results[0].Left.Morpheme.Morph); Assert.AreEqual("people", results[0].Left.Left.Morpheme.Morph); Assert.AreEqual("say", results[0].Right.Morpheme.Morph); }
public void Green_race_car() { List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme) .SetLeftFirst(), EnglishPattern.MonoTransference("O>A", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme), }; List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "green", EnglishAttributes.A.Lexeme.Adjective), new Morpheme(myAttributesModel, "race", EnglishAttributes.O.Lexeme.Noun), new Morpheme(myAttributesModel, "car", EnglishAttributes.O.Lexeme.Noun), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("green", "race", "car"); Assert.AreEqual(1, results.Count); Assert.AreEqual("green", results[0].Left.Morpheme.Morph); Assert.AreEqual("race", results[0].Right.Left.Right.Morpheme.Morph); Assert.AreEqual("car", results[0].Right.Right.Morpheme.Morph); }
public void The_good_book() { List <Morpheme> morphemes = new List <Morpheme>() { new Morpheme(myAttributesModel, "the", EnglishAttributes.A.Lexeme.Determiner.DefiniteArticle), new Morpheme(myAttributesModel, "good", EnglishAttributes.A.Lexeme.Adjective.Attributive), new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme.Noun), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme) .SetLeftFirst(), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("the", "good", "book"); Assert.AreEqual(1, results.Count); Assert.AreEqual("the", results[0].Left.Morpheme.Morph); Assert.AreEqual("good", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("book", results[0].Right.Right.Morpheme.Morph); }
public void IsMorpheme() { Pattern pattern = EnglishPattern.Morpheme(EnglishAttributes.A); Assert.IsTrue(pattern.IsMorpheme); // Empty string rule causes it is not the morpheme pattern. pattern = new Pattern() { UpRule = EnglishMorphemeRule.Is("", EnglishAttributes.A.Lexeme), LeftRule = MorphemeRule.Nothing, RightRule = MorphemeRule.Nothing, }; Assert.IsFalse(pattern.IsMorpheme); // Right and left rule is not Nothing - it is not the morpheme rule. pattern = new Pattern() { UpRule = EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.E.Lexeme), LeftRule = EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.I.Lexeme), RightRule = EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.O.Lexeme), }; Assert.IsFalse(pattern.IsMorpheme); }
public void IsComplete() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsTrue(adTree.IsComplete()); // Missing morph. adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsFalse(adTree.IsComplete()); // Missing attributes. adTree = new AdTree(new Morpheme(myAttributesModel, "book", 0), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsFalse(adTree.IsComplete()); adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.A.Lexeme), EnglishPattern.MonoTransference("O>A", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Left = null, Right = new AdTree(new Morpheme(myAttributesModel, "", 0), new Pattern()), }; Assert.IsTrue(adTree.IsComplete()); // Right is missing. adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.A.Lexeme), EnglishPattern.MonoTransference("O>A", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Left = null, Right = null, }; Assert.IsFalse(adTree.IsComplete()); adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A, EnglishAttributes.O)) { Left = new AdTree(new Morpheme(myAttributesModel, "", 0), new Pattern()), Right = new AdTree(new Morpheme(myAttributesModel, "", 0), new Pattern()), }; Assert.IsTrue(adTree.IsComplete()); adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A, EnglishAttributes.O)) { Left = null, Right = new AdTree(new Morpheme(myAttributesModel, "", 0), new Pattern()), }; Assert.IsFalse(adTree.IsComplete()); adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A, EnglishAttributes.O)) { Left = new AdTree(new Morpheme(myAttributesModel, "", 0), new Pattern()), Right = null, }; Assert.IsFalse(adTree.IsComplete()); }
public void I_have_been_reading() { List <Morpheme> morphemes = new List <Morpheme>() { new Morpheme(myAttributesModel, "i", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "have", EnglishAttributes.I.Lexeme.Verb), new Morpheme(myAttributesModel, "been", EnglishAttributes.I.Lexeme.Verb.Sememe.Tense.Past | EnglishAttributes.I.Lexeme.Verb.Form.PastParticiple), new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "ing", EnglishAttributes.I.NonLexeme.Suffix.Sememe.Aspect.Continuous), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.Morpheme(EnglishAttributes.I.NonLexeme.Suffix, "I+"), EnglishPattern.PairTransference("I>PresentPerfect", "", EnglishAttributes.I.Lexeme.Verb.Sememe.Tense.Present | EnglishAttributes.I.Lexeme.Verb.Sememe.Aspect.Perfect, EnglishMorphemeRule.Is(MorphRules.Is("have"), EnglishAttributes.I.Lexeme.Verb).SetSubstitution(SubstitutionRules.Nothing), EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.I.Lexeme.Verb.Form.PastParticiple)) .SetLeftFirst(), EnglishPattern.PairTransference("been-I_ing", "", EnglishAttributes.I.Lexeme.Verb.Form.PastParticiple, EnglishMorphemeRule.Is("been", EnglishAttributes.I.Lexeme.Verb.Sememe.Tense.Past | EnglishAttributes.I.Lexeme.Verb.Form.PastParticiple).SetSubstitution(SubstitutionRules.Nothing), EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.I.Lexeme.Verb.Sememe.Aspect.Continuous)) .SetLeftFirst(), EnglishPattern.PairTransference("I>I_ing", "", EnglishAttributes.I.Lexeme.Verb.Sememe.Aspect.Continuous, EnglishAttributes.I.NonLexeme.Suffix.Sememe.Aspect.Continuous, 0, EnglishAttributes.I.Lexeme.Verb, EnglishAttributes.I.Lexeme.Verb.Modal), }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("i", "have", "been", "reading"); Assert.AreEqual(1, results.Count); Assert.AreEqual("i", results[0].Left.Morpheme.Morph); Assert.AreEqual("have", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("been", results[0].Right.Right.Left.Morpheme.Morph); Assert.AreEqual("ing", results[0].Right.Right.Right.Left.Morpheme.Morph); Assert.AreEqual("read", results[0].Right.Right.Right.Right.Morpheme.Morph); }
public void The_world_as_you_know_ends() { List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "the", EnglishAttributes.A.Lexeme.Determiner), new Morpheme(myAttributesModel, "world", EnglishAttributes.O.Lexeme.Noun), new Morpheme(myAttributesModel, "as", EnglishAttributes.U.Lexeme.Conjunction), new Morpheme(myAttributesModel, "you", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "know", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "ends", EnglishAttributes.I.Lexeme.Verb.Valency.Monovalent), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme) .SetLeftFirst() .SetSubstitutionForRight(SubstitutionRules.Epsilon), new Pattern("I-U-O") { UpRule = EnglishMorphemeRule.Is(MorphRules.Something, EnglishAttributes.U.Lexeme.Conjunction), LeftRule = EnglishMorphemeRule.I_Lexeme, RightRule = EnglishMorphemeRule.O_Lexeme, }, }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("the", "world", "as", "you", "know", "ends"); Assert.AreEqual(1, results.Count); Assert.AreEqual("the", results[0].Left.Right.Left.Morpheme.Morph); Assert.AreEqual("world", results[0].Left.Right.Right.Morpheme.Morph); Assert.AreEqual("as", results[0].Left.Morpheme.Morph); Assert.AreEqual("you", results[0].Left.Left.Left.Morpheme.Morph); Assert.AreEqual("know", results[0].Left.Left.Right.Morpheme.Morph); Assert.AreEqual("ends", results[0].Right.Morpheme.Morph); }
public void It_is_good_and_bad_book() { List <Morpheme> morphemes = new List <Morpheme>() { // Lexemes. new Morpheme(myAttributesModel, "it", EnglishAttributes.O.Lexeme.Pronoun), new Morpheme(myAttributesModel, "is", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), new Morpheme(myAttributesModel, "good", EnglishAttributes.A.Lexeme.Adjective.Attributive), new Morpheme(myAttributesModel, "and", EnglishAttributes.U.Lexeme.Conjunction), new Morpheme(myAttributesModel, "bad", EnglishAttributes.A.Lexeme.Adjective.Attributive), new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme.Noun), }; List <Pattern> patterns = new List <Pattern>() { EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme), EnglishPattern.O1_I.SetLeftFirst(), EnglishPattern.O2_I, EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme) .SetLeftFirst(), new Pattern("A-U-A") { UpRule = EnglishMorphemeRule.U_Lexeme, LeftRule = EnglishMorphemeRule.A_Lexeme, RightRule = EnglishMorphemeRule.A_Lexeme, }, }; ConstructiveDictionary dictionary = new ConstructiveDictionary(myAttributesModel, morphemes, patterns); AdTreeCreator creator = new AdTreeCreator(dictionary); List <IAdTree> results = creator.Create("it", "is", "good", "and", "bad", "book"); Assert.AreEqual(1, results.Count); Assert.AreEqual("it", results[0].Right.Left.Morpheme.Morph); Assert.AreEqual("is", results[0].Right.Right.Morpheme.Morph); Assert.AreEqual("good", results[0].Left.Left.Right.Morpheme.Morph); Assert.AreEqual("and", results[0].Left.Left.Morpheme.Morph); Assert.AreEqual("bad", results[0].Left.Left.Left.Morpheme.Morph); Assert.AreEqual("book", results[0].Left.Right.Morpheme.Morph); }
public void CanAttachToLeft_Substitution_Morphemic() { IAdTree adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Left = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("O-A", "", EnglishAttributes.O.Lexeme, EnglishAttributes.A.Lexeme).SetLeftFirst()) }; IAdTree adTreeElement = new AdTree(new Morpheme(myAttributesModel, "car", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsTrue(adTree.Left.CanAttachToLeft(adTreeElement, myAttributesModel)); // The morpheme is not attached to the right yet - so only rules are evaluated. adTreeElement = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)); Assert.IsTrue(adTree.Left.CanAttachToLeft(adTreeElement, myAttributesModel)); // Attach to the left on the root. adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme).SetLeftFirst()); adTreeElement = new AdTree(new Morpheme(myAttributesModel, "green", EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)); Assert.IsTrue(adTree.CanAttachToLeft(adTreeElement, myAttributesModel)); // Attach to the left on the root - incorrect morpheme. adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)); adTreeElement = new AdTree(new Morpheme(myAttributesModel, "car", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsFalse(adTree.CanAttachToLeft(adTreeElement, myAttributesModel)); }
public void CanAttachToRight_ValencyPosition() { // The phrase: I read AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O1_I) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)) }; // Try to connect the second valency position. AdTree valency2 = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O2_I); Assert.IsTrue(valency2.CanAttachToRight(adTree, myAttributesModel)); // Try to connect the first valency position. AdTree valency1 = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O1_I); Assert.IsFalse(valency1.CanAttachToRight(adTree, myAttributesModel)); // Try to connect the third valency position. AdTree valency3 = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O3_I); Assert.IsFalse(valency3.CanAttachToRight(adTree, myAttributesModel)); // Try to connect the verb directly to the second valency. adTree = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent)); Assert.IsFalse(valency2.CanAttachToRight(adTree, myAttributesModel)); }
public void GetSignature_NotFilled() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O2_I) { Right = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I), EnglishPattern.Morpheme(EnglishAttributes.I)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O)), }, Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.EpsilonAdPosition("", "", EnglishAttributes.A, EnglishAttributes.O) .SetLeftFirst()) { // Note: O is not filled yet. The signature shall not contain it. Right = null, Left = new AdTree(new Morpheme(myAttributesModel, "the", EnglishAttributes.A), EnglishPattern.Morpheme(EnglishAttributes.A)) } }; Assert.AreEqual("OIA", adTree.GetSignature()); }
public void TryGetTransferenceMorpheme_PairTransference() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.O.Lexeme), EnglishPattern.PairTransference("I>O_ing", "", EnglishAttributes.O.Lexeme, EnglishAttributes.I.NonLexeme.Suffix, EnglishAttributes.I.Lexeme.Verb)) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme.Verb)), Left = new AdTree(new Morpheme(myAttributesModel, "ing", EnglishAttributes.I.NonLexeme.Suffix), EnglishPattern.Morpheme(EnglishAttributes.I.NonLexeme.Suffix)), }; Assert.IsTrue(adTree.Pattern.IsPairTransference); var result = adTree.TryGetTransferenceMorpheme(); // Attributes shall be taken from the parent. Assert.AreEqual(adTree.Morpheme.Attributes, result.Attributes); // Morph shall be composed from the left and right branches. Assert.AreEqual("reading", result.Morph); }
public void GetSignature() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O2_I) { Right = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I), EnglishPattern.Morpheme(EnglishAttributes.I)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O)), }, Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.EpsilonAdPosition("", "", EnglishAttributes.A, EnglishAttributes.O).SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "book", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O)), Left = new AdTree(new Morpheme(myAttributesModel, "the", EnglishAttributes.A), EnglishPattern.Morpheme(EnglishAttributes.A)) } }; Assert.AreEqual("OIAO", adTree.GetSignature()); }
public void TryGetTransferenceMorpheme_MonoTransference() { AdTree adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "car", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)), // Mono-transference. Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.A.Lexeme), EnglishPattern.MonoTransference("O>A", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "race", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)), Left = null, }, }; Assert.IsTrue(adTree.Left.Pattern.IsMonoTransference); var result = adTree.Left.TryGetTransferenceMorpheme(); // Attributes shall be taken from the parent. Assert.AreEqual(adTree.Left.Morpheme.Attributes, result.Attributes); // Morph shall be taken from the child. Assert.AreEqual(adTree.Left.Right.Morpheme.Morph, result.Morph); }
public void Words() { var adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O)), }; var factory = new LinguisticStructureFactory(myAttributesModel); var term = factory.CreateTerm(adTree, 0); var words = term.Words.ToList(); Assert.AreEqual(2, words.Count); Assert.AreEqual("I", words[0].Value); Assert.AreEqual("read", words[1].Value); }
public void IsCorrect() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsTrue(adTree.IsCorrect(myAttributesModel)); // Empty string is not allowed. adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsFalse(adTree.IsCorrect(myAttributesModel)); // Non-lexeme is not allowed. adTree = new AdTree(new Morpheme(myAttributesModel, "bla", EnglishAttributes.O.NonLexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); Assert.IsFalse(adTree.IsCorrect(myAttributesModel)); // Left and right rules are anything so it should also accept if they are null. adTree = new AdTree(new Morpheme(myAttributesModel, ".", EnglishAttributes.U.NonLexeme), new Pattern("") { UpRule = EnglishMorphemeRule.U_NonLexeme, RightRule = MorphemeRule.Anything, LeftRule = MorphemeRule.Anything, }); Assert.IsTrue(adTree.IsCorrect(myAttributesModel)); }
public void Clauses_ComplexSentence() { var adTree = new AdTree(new Morpheme(myAttributesModel, ".", EnglishAttributes.U.NonLexeme.PunctuationMark), EnglishPattern.MorphematicAdPosition(".", "", EnglishAttributes.U.NonLexeme.PunctuationMark, EnglishAttributes.I.Lexeme, EnglishAttributes.I.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "and", EnglishAttributes.U.Lexeme.Conjunction.Coordinating), EnglishPattern.MorphematicAdPosition("I-U-I", "", EnglishAttributes.U.Lexeme.Conjunction.Coordinating, EnglishAttributes.I.Lexeme, EnglishAttributes.I.Lexeme)) { Right = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)) }, Left = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "learn", EnglishAttributes.I.Lexeme.Verb), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)) } } }; var factory = new LinguisticStructureFactory(myAttributesModel); var sentence = factory.CreateSentence(adTree, 0); var clauses = sentence.Clauses.ToList(); Assert.AreEqual(2, clauses.Count); Assert.AreEqual("I read", clauses[0].Value); Assert.AreEqual("I learn", clauses[1].Value); }
public void GetNonconformities_MonoTransference() { AdTree adTree = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "car", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.A.Lexeme), EnglishPattern.MonoTransference("O>A", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "race", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)), Left = null, }, }; List <IAdTree> nonconformities = adTree.GetNonconformities(myAttributesModel).ToList(); Assert.AreEqual(0, nonconformities.Count); }
public void GetNonconformities_MorphemeRule() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, "green", EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)); List <IAdTree> nonconformities = adTree.GetNonconformities(myAttributesModel).ToList(); Assert.AreEqual(0, nonconformities.Count); // Empty string does not match the rule. adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)); nonconformities = adTree.GetNonconformities(myAttributesModel).ToList(); Assert.AreEqual(1, nonconformities.Count); // Morpheme attributes does not match the rule. adTree = new AdTree(new Morpheme(myAttributesModel, "bla", EnglishAttributes.A.NonLexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)); nonconformities = adTree.GetNonconformities(myAttributesModel).ToList(); Assert.AreEqual(1, nonconformities.Count); // Attached right children violates the rule. adTree = new AdTree(new Morpheme(myAttributesModel, "green", EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)) { // Note: the rule is nothing so having this attached violates the rule. Right = new AdTree(new Morpheme(myAttributesModel, "", 0), new Pattern()) }; nonconformities = adTree.GetNonconformities(myAttributesModel).ToList(); Assert.AreEqual(1, nonconformities.Count); }
public void SubjectAndPredicate() { var adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O2_I) { Right = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), EnglishPattern.Morpheme(EnglishAttributes.I)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O)), }, Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.EpsilonAdPosition("", "", EnglishAttributes.A, EnglishAttributes.O).SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O)), Left = new AdTree(new Morpheme(myAttributesModel, "the", EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A)) } }; var factory = new LinguisticStructureFactory(myAttributesModel); var clause = factory.CreateClause(adTree, 0); Assert.AreEqual("I", clause.Subject.Value); Assert.AreEqual("read the book", clause.Predicate.Value); }
public void Value() { var adTree = new AdTree(new Morpheme(myAttributesModel, "book", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)); var word = new Word(adTree, myAttributesModel, null, 0); Assert.AreEqual("book", word.Value); // AdTree for the word containing a suffix. adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.O.Lexeme), EnglishPattern.PairTransference("I>O_ing", "", EnglishAttributes.O.Lexeme, EnglishAttributes.I.NonLexeme.Suffix, EnglishAttributes.I.Lexeme.Verb)) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme.Verb)), Left = new AdTree(new Morpheme(myAttributesModel, "ing", EnglishAttributes.I.NonLexeme.Suffix), EnglishPattern.Morpheme(EnglishAttributes.I.NonLexeme.Suffix)), }; word = new Word(adTree, myAttributesModel, null, 0); Assert.AreEqual("reading", word.Value); }
public void Clauses_SimpleSentence() { var adTree = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb), EnglishPattern.Morpheme(EnglishAttributes.I)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O)), }; var factory = new LinguisticStructureFactory(myAttributesModel); var sentence = factory.CreateSentence(adTree, 0); var clauses = sentence.Clauses.ToList(); Assert.AreEqual(1, clauses.Count); Assert.AreEqual("I read", clauses[0].Value); Assert.AreEqual("I read", sentence.Value); }
public void SubjectAndPredicate_with_circumstantial() { var adTree = new AdTree(new Morpheme(myAttributesModel, ".", EnglishAttributes.U.NonLexeme.PunctuationMark.Period), EnglishPattern.MorphematicAdPosition("I-U-I", "", EnglishAttributes.U.NonLexeme.PunctuationMark, EnglishAttributes.I.Lexeme, EnglishAttributes.I.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "in", EnglishAttributes.E.Lexeme.Preposition), EnglishPattern.MorphematicAdPosition("O-E-I", "", EnglishAttributes.E.Lexeme, EnglishAttributes.O.Lexeme, EnglishAttributes.I.Lexeme)) { Right = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O2_I) { Right = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O1_I.SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I.Lexeme.Verb.Valency.Bivalent), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)) }, Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A, EnglishAttributes.O).SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "book", EnglishAttributes.O.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.O)), Left = new AdTree(new Morpheme(myAttributesModel, "the", EnglishAttributes.A.Lexeme), EnglishPattern.Morpheme(EnglishAttributes.A)) } }, Left = new AdTree(new Morpheme(myAttributesModel, "", EnglishAttributes.Epsilon), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A, EnglishAttributes.O).SetLeftFirst()) { Right = new AdTree(new Morpheme(myAttributesModel, "room", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "the", EnglishAttributes.A), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)) } } }; var factory = new LinguisticStructureFactory(myAttributesModel); var clause = factory.CreateClause(adTree, 0); Assert.AreEqual("I", clause.Subject.Value); Assert.AreEqual("read the book in the room", clause.Predicate.Value); }
public void RulingGrammarCharacter_E() { AdTree adTree = new AdTree(new Morpheme(myAttributesModel, ".", EnglishAttributes.U), EnglishPattern.MorphematicAdPosition("I-U-I", "", EnglishAttributes.U.NonLexeme.PunctuationMark, EnglishAttributes.I.Lexeme, EnglishAttributes.I.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "in", EnglishAttributes.E), EnglishPattern.MorphematicAdPosition("O-E-I", "", EnglishAttributes.E.Lexeme, EnglishAttributes.O.Lexeme, EnglishAttributes.I.Lexeme)) { Right = new AdTree(Morpheme.Epsilon(myAttributesModel), EnglishPattern.O1_I) { Right = new AdTree(new Morpheme(myAttributesModel, "read", EnglishAttributes.I), EnglishPattern.Morpheme(EnglishAttributes.I.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "I", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)) }, Left = new AdTree(new Morpheme(myAttributesModel, "in", EnglishAttributes.E), EnglishPattern.EpsilonAdPosition("A-O", "", EnglishAttributes.A.Lexeme, EnglishAttributes.O.Lexeme)) { Right = new AdTree(new Morpheme(myAttributesModel, "room", EnglishAttributes.O), EnglishPattern.Morpheme(EnglishAttributes.O.Lexeme)), Left = new AdTree(new Morpheme(myAttributesModel, "the", EnglishAttributes.A), EnglishPattern.Morpheme(EnglishAttributes.A.Lexeme)) } } }; // Although there is E in between but the ruling grammar character is I. Assert.AreEqual(GrammarCharacter.I, adTree.RulingGrammarCharacter); }