Beispiel #1
0
            static IEnumerable <PcPatrMorph> GetMorphs(WordSynthesis ws)
            {
                var ppMorphs = new Dictionary <string, PcPatrMorph>();
                var result   = new List <PcPatrMorph>();

                foreach (Morph morph in ws.Morphs)
                {
                    string[]    formIds   = morph.Allomorph.GetProperty("FormID").Split(' ');
                    string[]    wordTypes = morph.Allomorph.GetProperty("WordCategory").Split(' ');
                    string      form      = ws.Stratum.CharacterDefinitionTable.ToString(morph.Shape, ModeType.SYNTHESIS, false);
                    PcPatrMorph ppMorph;
                    if (!ppMorphs.TryGetValue(morph.Allomorph.Morpheme.ID, out ppMorph))
                    {
                        ppMorph = new PcPatrMorph
                        {
                            formIndex = 0,
                            formId    = formIds[0],
                            form      = form,
                            wordType  = wordTypes[0]
                        };
                    }
                    else if (formIds.Length == 1)
                    {
                        ppMorph.form += form;
                        continue;
                    }
                    else
                    {
                        PcPatrMorph oldMorph = ppMorph;
                        ppMorph = new PcPatrMorph
                        {
                            formIndex = oldMorph.formIndex + 1,
                            formId    = formIds[oldMorph.formIndex + 1],
                            form      = form,
                            wordType  = wordTypes[oldMorph.formIndex + 1]
                        };
                    }

                    ppMorph.msaId = morph.Allomorph.GetProperty("MsaID");
                    ppMorph.featureDescriptors = morph.Allomorph.GetProperty("FeatureDescriptors");
                    ppMorph.gloss = morph.Allomorph.Morpheme.Gloss.Description;
                    ppMorphs[morph.Allomorph.Morpheme.ID] = ppMorph;

                    string morphType = morph.Allomorph.GetProperty("MorphType");
                    switch (morphType)
                    {
                    case MoMorphTypeTags.kMorphInfix:
                    case MoMorphTypeTags.kMorphInfixingInterfix:
                        if (result.Count == 0)
                        {
                            result.Add(ppMorph);
                        }
                        else
                        {
                            result.Insert(result.Count - 1, ppMorph);
                        }
                        break;

                    default:
                        result.Add(ppMorph);
                        break;
                    }
                }
                return(result);
            }
Beispiel #2
0
			IEnumerable<PcPatrMorph> GetMorphs(WordSynthesis ws)
			{
				Dictionary<string, PcPatrMorph> ppMorphs = new Dictionary<string, PcPatrMorph>();
				List<PcPatrMorph> result = new List<PcPatrMorph>();
				foreach (Morph morph in ws.Morphs)
				{
					string[] formIds = morph.Allomorph.GetProperty("FormID").Split(' ');
					string[] wordTypes = morph.Allomorph.GetProperty("WordCategory").Split(' ');
					string form = ws.Stratum.CharacterDefinitionTable.ToString(morph.Shape, ModeType.SYNTHESIS, false);
					PcPatrMorph ppMorph;
					if (!ppMorphs.TryGetValue(morph.Allomorph.Morpheme.ID, out ppMorph))
					{
						ppMorph = new PcPatrMorph();
						ppMorph.formIndex = 0;
						ppMorph.formId = formIds[ppMorph.formIndex];
						ppMorph.form = form;
						ppMorph.wordType = wordTypes[ppMorph.formIndex];
					}
					else if (formIds.Length == 1)
					{
						ppMorph.form += form;
						continue;
					}
					else
					{
						PcPatrMorph oldMorph = ppMorph;
						ppMorph = new PcPatrMorph();
						ppMorph.formIndex = oldMorph.formIndex + 1;
						ppMorph.formId = formIds[ppMorph.formIndex];
						ppMorph.form = form;
						ppMorph.wordType = wordTypes[ppMorph.formIndex];
					}

					ppMorph.msaId = morph.Allomorph.GetProperty("MsaID");
					ppMorph.featureDescriptors = morph.Allomorph.GetProperty("FeatureDescriptors");
					ppMorph.gloss = morph.Allomorph.Morpheme.Gloss.Description;
					ppMorphs[morph.Allomorph.Morpheme.ID] = ppMorph;

					string morphType = morph.Allomorph.GetProperty("MorphType");
					switch (morphType)
					{
						case MoMorphType.kguidMorphInfix:
						case MoMorphType.kguidMorphInfixingInterfix:
							if (result.Count == 0)
								result.Add(ppMorph);
							else
								result.Insert(result.Count - 1, ppMorph);
							break;

						default:
							result.Add(ppMorph);
							break;
					}
				}
				return result;
			}