示例#1
0
        public void GetNTriplesRecursively()
        {
            NTripleCollection nTriples = reader.GetTriplesRecursvely(MockFolderPath + "skos_categories_en.nt", "http://dbpedia.org/resource/Category:Wars");

            Assert.AreEqual(4, nTriples.Triples.Count);
            Assert.IsTrue(nTriples.Triples.Any(x => x.Triple.Item1 == "http://dbpedia.org/resource/Category:Vietnam_War"));
            Assert.IsTrue(nTriples.Triples.Any(x => x.Triple.Item1 == "http://dbpedia.org/resource/Category:World_War_II"));
        }
示例#2
0
        public void ReadNTripleFile()
        {
            NTripleCollection nTriples = reader.ReadFile(MockFolderPath + "skos_categories_en.nt");

            Assert.AreEqual(16, nTriples.Triples.Count);
            Assert.AreEqual("http://dbpedia.org/resource/Category:Futurama", nTriples.Triples[4].Triple.Item1);
            Assert.AreEqual("http://www.w3.org/2004/02/skos/core#broader", nTriples.Triples[4].Triple.Item2);
            Assert.AreEqual("http://dbpedia.org/resource/Category:Works_by_Matt_Groening", nTriples.Triples[4].Triple.Item3);
        }
示例#3
0
        public void AddWikipediaLinks()
        {
            List <Individual> individuals   = MockIndividuals();
            NTripleCollection wikipediLinks = reader.ReadFile(MockFolderPath + "wikipedia_links_en.nt");

            individuals = generator.AddWikipediaLinks(individuals, wikipediLinks);

            Assert.AreEqual("http://en.wikipedia.org/wiki/Anchor", individuals.Single(x => x.Name == "Anchor").WikipediaLink);
            Assert.AreEqual("http://en.wikipedia.org/wiki/Keel", individuals.Single(x => x.Name == "Keel").WikipediaLink);
        }
示例#4
0
        public void GenerateIndividualFromNTriple()
        {
            NTripleCollection nTriples    = reader.ReadFile(MockFolderPath + "article_categories_en.nt");
            List <Individual> individuals = new List <Individual>();

            nTriples.Triples.ForEach(x => individuals.Add(new Individual(x)));

            Assert.AreEqual(4, individuals.Count);
            Assert.IsTrue(individuals.Single(x => x.Name == "Operation_Brushwood").Category == "World_War_II");
        }
示例#5
0
        public void GenerateEntityFromNTriple()
        {
            NTripleCollection nTriples = reader.ReadFile(MockFolderPath + "skos_categories_en.nt");
            List <Entity>     entities = new List <Entity>();

            nTriples.Triples.ForEach(x => entities.Add(new Entity(x)));

            Assert.AreEqual(16, entities.Count);
            Assert.IsTrue(entities.Single(x => x.Name == "Wars_involving_the_United_States").Parent == "Wars_by_country");
        }
示例#6
0
        public void AddShortAbstracts()
        {
            List <Individual> individuals    = MockIndividuals();
            NTripleCollection shortAbstracts = reader.ReadFile(MockFolderPath + "short_abstracts_en.nt");

            individuals = generator.AddShortAbstracts(individuals, shortAbstracts);

            Assert.IsTrue(individuals.Single(x => x.Name == "Anchor").ShortAbstract.StartsWith("An anchor is a device, normally made of metal, that is used"));
            Assert.IsTrue(individuals.Single(x => x.Name == "Keel").ShortAbstract.StartsWith("In boats and ships, keel can refer to either"));
        }
 public List <Individual> AddShortAbstracts(List <Individual> individuals, NTripleCollection shortAbstracts)
 {
     foreach (Individual i in individuals)
     {
         NTriple triple = shortAbstracts.Triples.Where(x => x.Triple.Item1 == "http://dbpedia.org/resource/" + i.Name && x.Triple.Item2 == "http://www.w3.org/2000/01/rdf-schema#comment").FirstOrDefault();
         if (triple != null)
         {
             i.ShortAbstract = triple.Triple.Item3;
         }
     }
     return(individuals);
 }
 public List <Individual> AddWikipediaLinks(List <Individual> individuals, NTripleCollection wikipediaLinks)
 {
     foreach (Individual i in individuals)
     {
         NTriple triple = wikipediaLinks.Triples.Where(x => x.Triple.Item3 == "http://dbpedia.org/resource/" + i.Name && x.Triple.Item2 == "http://xmlns.com/foaf/0.1/primaryTopic").FirstOrDefault();
         if (triple != null)
         {
             i.WikipediaLink = triple.Triple.Item1;
         }
     }
     return(individuals);
 }
示例#9
0
        static void Main(string[] args)
        {
            try
            {
                string path = args[0] + @"\";

                Console.WriteLine("Starting...");

                const string  RootCategory = "http://dbpedia.org/resource/Category:Nautical_terms";
                NTripleReader reader       = new NTripleReader();

                Console.WriteLine("Reading N-triples...");
                NTripleCollection skolCategories = reader.GetTriplesRecursvely(path + "skos_categories_en.nt", RootCategory);
                List <string>     categories     = skolCategories.Subjects;
                categories.Add(RootCategory);
                NTripleCollection articleCategories = reader.GetTriples(path + "article_categories_en.nt", categories, NTripleReader.NtripleSearchType.Object);
                NTripleCollection wikipediLinks     = reader.GetTriples(path + "wikipedia_links_en.nt", articleCategories.Subjects, NTripleReader.NtripleSearchType.Object);
                NTripleCollection shortAbstracts    = reader.GetTriples(path + "short_abstracts_en.nt", articleCategories.Subjects, NTripleReader.NtripleSearchType.Subject);
                Console.WriteLine("Reading N-triples... - Done");

                List <Entity>     entities    = skolCategories.Triples.Select(x => new Entity(x)).ToList();
                List <Individual> individuals = articleCategories.Triples.Select(x => new Individual(x)).ToList();

                OntologyGenerator ontologyGenerator  = new OntologyGenerator();
                List <Entity>     individualEntities = ontologyGenerator.GenerateEntityForEachIndividual(individuals);
                entities.AddRange(individualEntities);

                Console.WriteLine("Adding Wikipedia links and short abstracts...");
                individuals = ontologyGenerator.AddWikipediaLinks(individuals, wikipediLinks);
                individuals = ontologyGenerator.AddShortAbstracts(individuals, shortAbstracts);
                Console.WriteLine("Adding Wikipedia links and short abstracts... - Done");

                Console.WriteLine("Generating ontology...");
                XmlDocument owl = new OwlGenerator().Generate(entities, individuals);
                Console.WriteLine("Generating ontology... - Done");

                string fileName = "generatedOntology_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".owl";
                owl.Save(fileName);
                Console.WriteLine("Ontology file [" + fileName + "]");

                Console.WriteLine("Done");
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.Message);
                Console.Write(e.StackTrace);
            }
            Console.ReadKey();
        }
        public NTripleCollection GetTriplesRecursvely(string path, List <string> filters)
        {
            NTripleCollection nTripleCollection = GetTriples(path, filters, NtripleSearchType.Object);

            bool newTriplesFound = true;

            while (newTriplesFound)
            {
                List <string> subjects = nTripleCollection.Subjects;
                int           before   = nTripleCollection.Triples.Count;
                nTripleCollection.AddTriples(GetTriples(path, subjects, NtripleSearchType.Object).Triples);
                int after = nTripleCollection.Triples.Count;
                newTriplesFound = after > before;
            }

            return(nTripleCollection);
        }
        public NTripleCollection GetTriples(string path, List <string> nTriples, NtripleSearchType searchType)
        {
            int searchTypeIndex = GetSearchTripeIndex(searchType);

            Console.WriteLine("Reading triples from " + path);
            NTripleCollection nTripleCollection = new NTripleCollection();
            long         currentLine            = 0;
            StreamReader reader = new StreamReader(path);

            string[] nTriplesFormatted = nTriples.Select(x => "<" + x + ">").ToArray();

            while (!reader.EndOfStream)
            {
                currentLine++;
                Console.Write("\rLine {0}", currentLine);
                string line = reader.ReadLine();
                if (nTriplesFormatted.Length == 0)
                {
                    string[] values = line.Split('>');
                    nTripleCollection.Triples.Add(new NTriple(RemoveUnwantedChars(values[0]), RemoveUnwantedChars(values[1]), RemoveUnwantedChars(values[2])));
                }
                else
                {
                    for (int i = 0; i < nTriplesFormatted.Length; i++)
                    {
                        if (line.Contains(nTriplesFormatted[i]))
                        {
                            string[] values = line.Split('>');
                            if (nTriples.Count == 0 || nTriples.Any(x => values[searchTypeIndex].Contains(x)))
                            {
                                nTripleCollection.Triples.Add(new NTriple(RemoveUnwantedChars(values[0]), RemoveUnwantedChars(values[1]), RemoveUnwantedChars(values[2])));
                                break;
                            }
                        }
                    }
                }
            }

            Console.WriteLine(Environment.NewLine + "Reading triples from " + path + " - Done");

            reader.Close();

            return(nTripleCollection);
        }