Example #1
0
        public void Export(Stream stream, CogProject project)
        {
            using (var writer = new StreamWriter(new NonClosingStreamWrapper(stream)))
            {
                var meaningClusters = new Dictionary<Meaning, List<Cluster<Word>>>();
                foreach (Meaning meaning in project.Meanings)
                {
                    writer.Write("\t");
                    writer.Write(meaning.Gloss);
                    meaningClusters[meaning] = project.GenerateCognateSets(meaning).OrderBy(c => c.Noise).ThenByDescending(c => c.DataObjects.Count).ToList();

                }
                writer.WriteLine();
                foreach (Meaning meaning in project.Meanings)
                {
                    writer.Write("\t");
                    writer.Write(meaning.Category);
                }
                writer.WriteLine();

                foreach (Variety variety in project.Varieties)
                {
                    writer.Write(variety.Name);
                    foreach (Meaning meaning in project.Meanings)
                    {
                        writer.Write("\t");
                        bool first = true;
                        foreach (Word word in variety.Words[meaning])
                        {
                            if (!first)
                                writer.Write(',');
                            int i = meaningClusters[meaning].FindIndex(set => set.DataObjects.Contains(word));
                            if (i == -1 || i == meaningClusters[meaning].Count - 1)
                                writer.Write("X");
                            else
                                writer.Write(i + 1);
                            first = false;
                        }
                    }
                    writer.WriteLine();
                }
            }
        }
Example #2
0
        public void Export(Stream stream, CogProject project)
        {
            using (var writer = new StreamWriter(new NonClosingStreamWrapper(stream)))
            {
                writer.WriteLine("#NEXUS");

                writer.WriteLine("BEGIN Taxa;");
                writer.WriteLine("\tDIMENSIONS NTax={0};", project.Varieties.Count);
                writer.Write("\tTAXLABELS");

                int maxNameLen = 0;
                foreach (Variety variety in project.Varieties)
                {
                    string name = variety.Name.RemoveNexusSpecialChars();
                    maxNameLen = Math.Max(maxNameLen, name.Length);
                    writer.WriteLine();
                    writer.Write("\t\t{0}", name);
                }

                writer.WriteLine(";");
                writer.WriteLine("END;");

                writer.WriteLine("BEGIN Characters;");
                writer.WriteLine("\tDIMENSIONS NChar={0};", project.Meanings.Count);
                writer.WriteLine("\tFORMAT Datatype=STANDARD Missing=? Symbols=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";");
                writer.Write("\tMATRIX");

                var meaningClusters = new Dictionary<Meaning, List<Cluster<Word>>>();
                foreach (Meaning meaning in project.Meanings)
                    meaningClusters[meaning] = project.GenerateCognateSets(meaning).ToList();

                foreach (Variety variety in project.Varieties)
                {
                    string name = variety.Name.RemoveNexusSpecialChars();
                    writer.WriteLine();
                    writer.Write("\t\t{0}{1} ", name, new string(' ', maxNameLen - name.Length));
                    foreach (Meaning meaning in project.Meanings)
                    {
                        int setIndex = 0;
                        int maxSetSize = -1;
                        foreach (Word word in variety.Words[meaning])
                        {
                            int j = 1;
                            foreach (Cluster<Word> set in meaningClusters[meaning])
                            {
                                if (set.DataObjects.Contains(word))
                                {
                                    if (set.DataObjects.Count > maxSetSize)
                                    {
                                        maxSetSize = set.DataObjects.Count;
                                        setIndex = j;
                                    }
                                    break;
                                }
                                j++;
                            }
                        }

                        if (setIndex > 0)
                        {
                            if (setIndex >= 10)
                                writer.Write((char) ('A' + (setIndex - 10)));
                            else
                                writer.Write(setIndex);
                        }
                        else
                        {
                            writer.Write("?");
                        }
                    }
                }

                writer.WriteLine(";");
                writer.WriteLine("END;");
            }
        }