Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BlockingTrace"/> class.
 /// </summary>
 /// <param name="mprFeatureType">Type: required or excluded.</param>
 /// <param name="mprFeatures">The set of MPR features the form has.</param>
 /// <param name="constrainingMPRFeatures">The set of MPR features the form must have (required) or must not have (excluded).</param>
 internal PhonologicalRuleSynthesisMPRFeaturesTrace(PhonologicalRuleSynthesisMPRFeaturesTraceType mprFeatureType,
                                                    MPRFeatureSet mprFeatures, MPRFeatureSet constrainingMPRFeatures)
 {
     m_mprFeatureType          = mprFeatureType;
     m_mprFeatures             = mprFeatures;
     m_constrainingMPRFeatures = constrainingMPRFeatures;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WordSynthesis"/> class.
        /// </summary>
        /// <param name="rootAllomorph">The root allomorph.</param>
        /// <param name="nonHead">The non-head synthesis.</param>
        /// <param name="rzFeatures">The realizational features.</param>
        /// <param name="mrules">The morphological rules to apply.</param>
        /// <param name="curTrace">The current trace record.</param>
        internal WordSynthesis(LexEntry.RootAllomorph rootAllomorph, WordSynthesis nonHead, FeatureValues rzFeatures, IEnumerable <MorphologicalRule> mrules,
                               Trace curTrace)
        {
            m_root        = (LexEntry)rootAllomorph.Morpheme;
            m_mprFeatures = m_root.MPRFeatures != null?m_root.MPRFeatures.Clone() : new MPRFeatureSet();

            m_headFeatures = m_root.HeadFeatures != null?m_root.HeadFeatures.Clone() : new FeatureValues();

            m_footFeatures = m_root.FootFeatures != null?m_root.FootFeatures.Clone() : new FeatureValues();

            m_pos     = m_root.POS;
            m_stratum = m_root.Stratum;

            m_nonHead = nonHead;
            m_morphs  = new Morphs();
            Morph morph = new Morph(rootAllomorph);

            morph.Shape.AddMany(rootAllomorph.Shape.Segments);
            m_morphs.Add(morph);
            m_shape = new PhoneticShape();
            m_shape.Add(new Margin(Direction.LEFT));
            m_shape.AddPartition(rootAllomorph.Shape.Segments, morph.Partition);
            m_shape.Add(new Margin(Direction.RIGHT));

            m_obligHeadFeatures = new HCObjectSet <Feature>();
            m_mrules            = new List <MorphologicalRule>(mrules);
            m_rzFeatures        = rzFeatures;
            m_curTrace          = curTrace;
            m_mrulesApplied     = new Dictionary <MorphologicalRule, int>();
        }
Ejemplo n.º 3
0
        public bool IsMatch(MPRFeatureSet mprFeats)
        {
            foreach (MPRFeatureGroup group in Groups)
            {
                bool match = true;
                foreach (MPRFeature feat in group.Features)
                {
                    if (Contains(feat))
                    {
                        if (group.MatchType == MPRFeatureGroup.GroupMatchType.ALL)
                        {
                            if (!mprFeats.Contains(feat))
                            {
                                match = false;
                                break;
                            }
                        }
                        else
                        {
                            if (mprFeats.Contains(feat))
                            {
                                match = true;
                                break;
                            }
                            else
                            {
                                match = false;
                            }
                        }
                    }
                }

                if (!match)
                {
                    return(false);
                }
            }

            foreach (MPRFeature feat in this)
            {
                if (feat.Group == null && !mprFeats.Contains(feat))
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 4
0
        public void AddOutput(MPRFeatureSet mprFeats)
        {
            foreach (MPRFeatureGroup group in mprFeats.Groups)
            {
                if (group.OutputType == MPRFeatureGroup.GroupOutputType.OVERWRITE)
                {
                    foreach (MPRFeature mprFeat in group.Features)
                    {
                        if (!mprFeats.Contains(mprFeat))
                        {
                            Remove(mprFeat);
                        }
                    }
                }
            }

            AddMany(mprFeats);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="ws">The word synthesis.</param>
 public WordSynthesis(WordSynthesis ws)
 {
     m_root = ws.m_root;
     if (ws.m_nonHead != null)
     {
         m_nonHead = ws.m_nonHead.Clone();
     }
     m_shape             = ws.m_shape.Clone();
     m_morphs            = ws.m_morphs.Clone();
     m_pos               = ws.m_pos;
     m_mprFeatures       = ws.m_mprFeatures.Clone();
     m_headFeatures      = ws.m_headFeatures.Clone();
     m_footFeatures      = ws.m_footFeatures.Clone();
     m_obligHeadFeatures = new HCObjectSet <Feature>(ws.m_obligHeadFeatures);
     m_mrules            = new List <MorphologicalRule>(ws.m_mrules);
     m_curRuleIndex      = ws.m_curRuleIndex;
     m_rzFeatures        = ws.m_rzFeatures.Clone();
     m_curTrace          = ws.m_curTrace;
     m_stratum           = ws.m_stratum;
     m_mrulesApplied     = new Dictionary <MorphologicalRule, int>(ws.m_mrulesApplied);
 }
Ejemplo n.º 6
0
 public MPRFeatureSet(MPRFeatureSet mprFeats)
     : base(mprFeats)
 {
 }