Ejemplo n.º 1
0
        private void test()
        {
            int       id;
            string    sense   = "";
            string    word    = "";
            string    concept = "";
            Random    r       = new Random();
            WordOlogy wdgy    = new WordOlogy();

            for (int i = 0; i < 100; i++)
            {
                id            = r.Next(0, ArrWordology.Count);
                wdgy          = (WordOlogy)ArrWordology[id];
                sense         = wdgy.Sense;
                word          = wdgy.Word;
                concept       = wdgy.Concept;
                label1.Text   = concept;
                textBox1.Text = word + " : " + sense;
                string str = concept + " : " + word + " : " + sense;
                listBox1.Items.Add(str);
                MessageBoxButtons msgbtn = MessageBoxButtons.YesNo;
                DialogResult      result;
                result = MessageBox.Show(str, "", msgbtn);

                if (result == DialogResult.Yes)
                {
                    correct++;
                }
                if (result == DialogResult.No)
                {
                    incorrect++;
                }
            }
            MessageBox.Show(correct.ToString());
            MessageBox.Show(incorrect.ToString());
        }
Ejemplo n.º 2
0
        private void MapConceptsWithMapLex(string concept, Property maplexProperty)
        {
            MyWordInfo mwi;
            WordOlogy  WO = new WordOlogy();

            List <MyWordInfo> maplexsenses = new List <MyWordInfo>();
            int NoOfSensesSucceeded        = 0;

            for (int i = 0; i < maplexProperty.Fillers.Count; i++)
            {
                string   tmp   = maplexProperty.Fillers[i].ScalarFiller;
                char[]   charr = new char[] { '-', '_' };
                string[] splt  = tmp.Split(charr);
                //there r fillers with no type & a-bomb masalan

                if (splt.Length > 1)
                {
                    mwi = new MyWordInfo();
                    for (int k = 0; k < splt.Length - 2; k++)
                    {
                        mwi.Word += splt[k] + " ";
                    }
                    mwi.Word += splt[splt.Length - 2];
                    if (splt[splt.Length - 1].Length == 2)
                    {
                        if (splt[splt.Length - 1][0] == 'v')
                        {
                            mwi.Pos = Wnlib.PartsOfSpeech.Verb;
                        }
                        else if (splt[splt.Length - 1][0] == 'n')
                        {
                            mwi.Pos = Wnlib.PartsOfSpeech.Noun;
                        }
                        else if (splt[splt.Length - 1][0] == 'a')
                        {
                            mwi.Pos = Wnlib.PartsOfSpeech.Adj;
                        }
                        else if (splt[splt.Length - 1][0] == 'r')
                        {
                            mwi.Pos = Wnlib.PartsOfSpeech.Adv;
                        }
                        else
                        {
                            mwi.Pos = Wnlib.PartsOfSpeech.Unknown;
                        }
                    }
                    else
                    {
                        mwi.Pos   = Wnlib.PartsOfSpeech.Unknown;
                        mwi.Word += " " + splt[splt.Length - 1];
                    }
                    if (i == 0 || (maplexsenses.Count > 0 && (mwi.Word != maplexsenses[maplexsenses.Count - 1].Word || mwi.Pos != maplexsenses[maplexsenses.Count - 1].Pos)))
                    {
                        maplexsenses.Add(mwi);
                    }
                }
                //ne loop 3al ontology kolaha
            }


            if (maplexsenses.Count > 0)
            {
                MyWordInfo[] maplexArray = new MyWordInfo[maplexsenses.Count];
                for (int j = 0; j < maplexsenses.Count; j++)
                {
                    maplexArray[j] = maplexsenses[j];
                }
                WordSenseDisambiguator wsd = new WordSenseDisambiguator();
                MyWordInfo[]           res = new MyWordInfo[maplexArray.Length];
                res = wsd.Disambiguate(maplexArray);
                int i = 0;

                foreach (MyWordInfo wi in res)
                {
                    string   tmp   = maplexProperty.Fillers[i].ScalarFiller;
                    char[]   charr = new char[] { '-', '_' };
                    string[] splt  = tmp.Split(charr);

                    if (splt.Length > 1 && splt[splt.Length - 1].Length == 2)
                    {
                        WO.SenseNo = splt[splt.Length - 1];
                    }
                    else
                    {
                        // "sense doesn't have POS";
                    }

                    Wnlib.PartOfSpeech p = Wnlib.PartOfSpeech.of((Wnlib.PartsOfSpeech)wi.Pos);

                    try
                    {
                        Wnlib.Index index = Wnlib.Index.lookup(wi.Word.ToLower(), p);
                        SynSet      sense = new SynSet(index, res[i].Sense, null);
                        WO.Sense = sense.defn;
                        // AllSensesMapped++;
                        NoOfSensesSucceeded++;
                        try
                        {
                            WO.Pos = p.name;
                        }
                        catch
                        {
                            WO.Pos = wi.Pos.ToString();
                        }
                        ID++;
                        WO.Word    = wi.Word;
                        WO.ID      = ID;
                        WO.Concept = concept;
                        wordologyArr.Add(WO);
                    }
                    catch
                    {
                    };
                    if (NoOfSensesSucceeded == 0)
                    {
                        CannotGetSenseExeption++;
                    }
                    i++;
                    //bf.Serialize(fs, "\n" + WO);
                }
                conceptcounter++;
            }
        }
Ejemplo n.º 3
0
        public void ConstructMapping()
        {
            string    concept        = "";
            string    word           = "";
            int       ID             = -1;
            string    senseNo        = "";
            string    Sense          = "";
            string    Pos            = "";
            WordOlogy WO             = new WordOlogy();
            ArrayList wordologyArr   = new ArrayList();
            int       conceptcounter = 0;

            LoadOntology();
            FileStream   allConceptsFile       = new FileStream(_ontologyDirectoryPath + @"\AllConcepts.txt", FileMode.Open);
            StreamReader allConceptsFileReader = new StreamReader(allConceptsFile);

            string _wordologyDirectoryPath =
                @"..\..\..\wordology\";

            BinaryFormatter bf = new BinaryFormatter();
            FileStream      fs = new FileStream(
                _wordologyDirectoryPath + "\\wordology.txt", FileMode.Create);
            int indxWatcherconceptCounter = 0;
            int NoMapLexConcepts          = 0;
            int CannotGetSenseExeption    = 0;
            int AllSensesMapped           = 0;

            while ((concept = allConceptsFileReader.ReadLine()) != null)
            {
                indxWatcherconceptCounter++;
                string   Conceptpath    = _ontologyDirectoryPath + @"\" + concept[0] + @"\" + concept;
                Concept  C              = (Concept)Onto[concept];
                Property maplexProperty = C.FullProperties["ENGLISH1"];

                List <MyWordInfo> maplexsenses = new List <MyWordInfo>();
                MyWordInfo        mwi          = new MyWordInfo();
                int NoOfSensesSucceeded        = 0;
                if (maplexProperty != null)
                {
                    for (int i = 0; i < maplexProperty.Fillers.Count; i++)
                    {
                        string   tmp   = maplexProperty.Fillers[i].ScalarFiller;
                        char[]   charr = new char[] { '-', '_' };
                        string[] splt  = tmp.Split(charr);
                        //there r fillers with no type & a-bomb masalan

                        if (splt.Length > 1)
                        {
                            mwi = new MyWordInfo();
                            for (int k = 0; k < splt.Length - 2; k++)
                            {
                                mwi.Word += splt[k] + " ";
                            }
                            mwi.Word += splt[splt.Length - 2];
                            if (splt[splt.Length - 1].Length == 2)
                            {
                                if (splt[splt.Length - 1][0] == 'v')
                                {
                                    mwi.Pos = Wnlib.PartsOfSpeech.Verb;
                                }
                                else if (splt[splt.Length - 1][0] == 'n')
                                {
                                    mwi.Pos = Wnlib.PartsOfSpeech.Noun;
                                }
                                else if (splt[splt.Length - 1][0] == 'a')
                                {
                                    mwi.Pos = Wnlib.PartsOfSpeech.Adj;
                                }
                                else if (splt[splt.Length - 1][0] == 'r')
                                {
                                    mwi.Pos = Wnlib.PartsOfSpeech.Adv;
                                }
                                else
                                {
                                    mwi.Pos = Wnlib.PartsOfSpeech.Unknown;
                                }
                            }
                            else
                            {
                                mwi.Pos   = Wnlib.PartsOfSpeech.Unknown;
                                mwi.Word += " " + splt[splt.Length - 1];
                            }
                            if (i == 0 || (maplexsenses.Count > 0 && (mwi.Word != maplexsenses[maplexsenses.Count - 1].Word || mwi.Pos != maplexsenses[maplexsenses.Count - 1].Pos)))
                            {
                                maplexsenses.Add(mwi);
                            }
                        }
                        //ne loop 3al ontology kolaha
                    }


                    if (maplexsenses.Count > 0)
                    {
                        MyWordInfo[] maplexArray = new MyWordInfo[maplexsenses.Count];
                        for (int j = 0; j < maplexsenses.Count; j++)
                        {
                            maplexArray[j] = maplexsenses[j];
                        }
                        WordSenseDisambiguator wsd = new WordSenseDisambiguator();
                        MyWordInfo[]           res = new MyWordInfo[maplexArray.Length];
                        res = wsd.Disambiguate(maplexArray);
                        int i = 0;

                        foreach (MyWordInfo wi in res)
                        {
                            string   tmp   = maplexProperty.Fillers[i].ScalarFiller;
                            char[]   charr = new char[] { '-', '_' };
                            string[] splt  = tmp.Split(charr);

                            if (splt.Length > 1 && splt[splt.Length - 1].Length == 2)
                            {
                                WO.SenseNo = splt[splt.Length - 1];
                            }
                            else
                            {
                                // "sense doesn't have POS";
                            }

                            Wnlib.PartOfSpeech p = Wnlib.PartOfSpeech.of((Wnlib.PartsOfSpeech)wi.Pos);

                            try
                            {
                                Wnlib.Index index = Wnlib.Index.lookup(wi.Word.ToLower(), p);
                                SynSet      sense = new SynSet(index, res[i].Sense, null);
                                WO.Sense = sense.defn;
                                AllSensesMapped++;
                                NoOfSensesSucceeded++;
                                try
                                {
                                    WO.Pos = p.name;
                                }
                                catch
                                {
                                    WO.Pos = wi.Pos.ToString();
                                }
                                ID++;
                                WO.Word    = wi.Word;
                                WO.ID      = ID;
                                WO.Concept = concept;
                                WO.Word    = word;
                            }
                            catch
                            {
                            };
                            if (NoOfSensesSucceeded == 0)
                            {
                                CannotGetSenseExeption++;
                            }
                            i++;
                            // bf.Serialize(fs, "\n" + WO);
                            wordologyArr.Add(WO);
                        }
                        conceptcounter++;
                    }
                }
                else
                {
                    NoMapLexConcepts++;

                    //new part


                    Wnlib.Index        index;
                    Wnlib.PartOfSpeech p;
                    Search             se;

                    try
                    {
                        index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Noun));
                        if (index != null)
                        {
                            WO.Pos = "noun";
                            Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Noun);
                            foreach (Opt o in relatedness)
                            {
                                for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                                {
                                    se = new Search(concept, true, PartOfSpeech.of("noun"), o.sch, senseNumber);
                                    SynSet sense = new SynSet(index, senseNumber, se);
                                    WO.Concept = concept;
                                    WO.Word    = concept;
                                    WO.Sense   = sense.defn;
                                    WO.ID      = ID;
                                    ID++;
                                    NoOfSensesSucceeded++;
                                    AllSensesMapped++;
                                    //bf.Serialize(fs, "\n" + WO);
                                    wordologyArr.Add(WO);
                                }
                            }
                        }
                    }
                    catch
                    { }
                    try
                    {
                        index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Verb));
                        if (index != null)
                        {
                            WO.Pos = "verb";
                            Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Verb);
                            foreach (Opt o in relatedness)
                            {
                                for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                                {
                                    se = new Search(concept, true, PartOfSpeech.of("verb"), o.sch, senseNumber);
                                    SynSet sense = new SynSet(index, senseNumber, se);
                                    WO.Sense   = sense.defn;
                                    WO.Concept = concept;
                                    WO.Word    = concept;
                                    WO.ID      = ID;
                                    ID++;
                                    NoOfSensesSucceeded++;
                                    AllSensesMapped++;
                                    //bf.Serialize(fs, "\n" + WO);
                                    wordologyArr.Add(WO);
                                }
                            }
                        }
                    }
                    catch
                    { }
                    try
                    {
                        index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Adj));
                        if (index != null)
                        {
                            WO.Pos = "adj";
                            Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Adj);
                            foreach (Opt o in relatedness)
                            {
                                for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                                {
                                    se = new Search(concept, true, PartOfSpeech.of("adj"), o.sch, senseNumber);
                                    SynSet sense = new SynSet(index, senseNumber, se);
                                    WO.Sense   = sense.defn;
                                    WO.Concept = concept;
                                    WO.Word    = concept;
                                    WO.ID      = ID;
                                    ID++;
                                    NoOfSensesSucceeded++;
                                    AllSensesMapped++;
                                    //bf.Serialize(fs, "\n" + WO);
                                    wordologyArr.Add(WO);
                                }
                            }
                        }
                    }
                    catch
                    { }
                    try
                    {
                        index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Adv));
                        if (index != null)
                        {
                            WO.Pos = "adv";
                            Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Noun);
                            foreach (Opt o in relatedness)
                            {
                                for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                                {
                                    se = new Search(concept, true, PartOfSpeech.of("adv"), o.sch, senseNumber);
                                    SynSet sense = new SynSet(index, senseNumber, se);
                                    WO.Sense   = sense.defn;
                                    WO.Concept = concept;
                                    WO.Word    = concept;
                                    WO.ID      = ID;
                                    ID++;
                                    NoOfSensesSucceeded++;
                                    AllSensesMapped++;
                                    //bf.Serialize(fs, "\n" + WO);
                                    wordologyArr.Add(WO);
                                }
                            }
                        }
                    }
                    catch
                    { }


                    if (NoOfSensesSucceeded != 0)
                    {
                        conceptcounter++;
                    }
                }
            }//end while
            allConceptsFileReader.Close();
            allConceptsFile.Close();
            bf.Serialize(fs, wordologyArr);
            fs.Close();
            MessageBox.Show("no map-lex concepts number = " + NoMapLexConcepts.ToString());
            MessageBox.Show("can't getsense pos number = " + CannotGetSenseExeption.ToString());
            MessageBox.Show(conceptcounter.ToString());
        }
Ejemplo n.º 4
0
        private void MapConceptsWithOutMapLex(string concept)
        {
            Wnlib.Index        index;
            Wnlib.PartOfSpeech p;
            Search             se;
            WordOlogy          WO   = new WordOlogy();
            int NoOfSensesSucceeded = 0;

            try
            {
                index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Noun));
                if (index != null)
                {
                    WO.Pos = "noun";
                    Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Noun);
                    foreach (Opt o in relatedness)
                    {
                        for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                        {
                            se = new Search(concept, true, PartOfSpeech.of("noun"), o.sch, senseNumber);
                            SynSet sense = new SynSet(index, senseNumber, se);
                            WO.Concept = concept;
                            WO.Word    = concept;
                            WO.Sense   = sense.defn;
                            WO.ID      = ID;
                            ID++;
                            NoOfSensesSucceeded++;
                            //AllSensesMapped++;
                            //bf.Serialize(fs, "\n" + WO);
                            wordologyArr.Add(WO);
                        }
                    }
                }
            }
            catch
            { }
            try
            {
                index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Verb));
                if (index != null)
                {
                    WO.Pos = "verb";
                    Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Verb);
                    foreach (Opt o in relatedness)
                    {
                        for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                        {
                            se = new Search(concept, true, PartOfSpeech.of("verb"), o.sch, senseNumber);
                            SynSet sense = new SynSet(index, senseNumber, se);
                            WO.Sense   = sense.defn;
                            WO.Concept = concept;
                            WO.Word    = concept;
                            WO.ID      = ID;
                            ID++;
                            NoOfSensesSucceeded++;
//                            AllSensesMapped++;
                            //bf.Serialize(fs, "\n" + WO);
                            wordologyArr.Add(WO);
                        }
                    }
                }
            }
            catch
            { }
            try
            {
                index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Adj));
                if (index != null)
                {
                    WO.Pos = "adj";
                    Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Adj);
                    foreach (Opt o in relatedness)
                    {
                        for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                        {
                            se = new Search(concept, true, PartOfSpeech.of("adj"), o.sch, senseNumber);
                            SynSet sense = new SynSet(index, senseNumber, se);
                            WO.Sense   = sense.defn;
                            WO.Concept = concept;
                            WO.Word    = concept;
                            WO.ID      = ID;
                            ID++;
                            NoOfSensesSucceeded++;
                            //AllSensesMapped++;
                            //bf.Serialize(fs, "\n" + WO);
                            wordologyArr.Add(WO);
                        }
                    }
                }
            }
            catch
            { }
            try
            {
                index = Wnlib.Index.lookup(concept.ToLower(), PartOfSpeech.of(PartsOfSpeech.Adv));
                if (index != null)
                {
                    WO.Pos = "adv";
                    Opt[] relatedness = WordsMatching.Relatedness.GetRelatedness(PartsOfSpeech.Noun);
                    foreach (Opt o in relatedness)
                    {
                        for (int senseNumber = 0; senseNumber < index.sense_cnt; senseNumber++)
                        {
                            se = new Search(concept, true, PartOfSpeech.of("adv"), o.sch, senseNumber);
                            SynSet sense = new SynSet(index, senseNumber, se);
                            WO.Sense   = sense.defn;
                            WO.Concept = concept;
                            WO.Word    = concept;
                            WO.ID      = ID;
                            ID++;
                            NoOfSensesSucceeded++;
                            //AllSensesMapped++;
                            //bf.Serialize(fs, "\n" + WO);
                            wordologyArr.Add(WO);
                        }
                    }
                }
            }
            catch
            { }


            if (NoOfSensesSucceeded != 0)
            {
                conceptcounter++;
            }
        }