protected int SearchWordFromExSet(string word)
        {
            int res = 0;

            foreach (KeyValuePair <string, Dictionary <string, string> > kvp in ExceptionDict)
            {
                int cnt = StringDistance.GetDamerauLevenshteinDistance(
                    kvp.Key, word);

                /* Алгоритм Ливенштейна (модицифированный)
                 * Если cnt поставить на ноль, то он будет искать слова со 100%-ым
                 * совпадением. А если на 1, то на одну букву будет делать погрешность,
                 * допустим слово dadanlar он пропустит, так как отличие всего одна
                 * буква n (а должно быть dadamlar)
                 * в ближайшей перспективе сделаем систему РЕКОМЕНДАЦИЙ,
                 * типа, "возможно, вы имели ввиду это слово"?
                 */

                if (cnt == 0)
                {
                    this.TmpDict = kvp.Value;
                    res          = 1;
                    break;
                }
            }

            return(res);
        }
示例#2
0
        public Dictionary <string, string> GetResult(string word)
        {
            int        last_index             = word.Length;
            List <int> numberOfElementsInDict = new List <int>();

            ///Вычисляем по KhorezmDict слово
            string[] listOfKhorezmKeys = KhorezmDict.Keys.ToArray();
            Array.Sort(listOfKhorezmKeys);
            int key2 = Array.BinarySearch(listOfKhorezmKeys, word);

            for (int i = 0; i < listOfKhorezmKeys.Length; i++)
            {
                int t = 0;
                t = StringDistance.GetDamerauLevenshteinDistance(listOfKhorezmKeys[i], word);
                if (t <= 2)
                {
                    this.KhorezmDictForReturn = KhorezmDict[listOfKhorezmKeys[i]];
                    this.KhorezmDictForReturn.Add("Perhaps, you meant this Khorezm word: ", listOfKhorezmKeys[i]);
                    return(KhorezmDictForReturn);
                }
            }

            // Dictionary<string, string>[] InnerDict =
            //  new Dictionary<string, string>[last_index];
            Dictionary <string, string> InnerDict =
                new Dictionary <string, string>();
            int k = 0;

            /*
             * for(int i = last_index-1; i >= 0; i--)
             * {
             *  this.MainWord = word.Remove(i, k);
             */
            InnerDict = new Dictionary <string, string>(GetResultPrivate(word));

            //}

            //Возвращаем результат если словарь пуст
            //InnerDict["Message"] = StaticString.NotFoundedEng;

            return(InnerDict);
        }
        protected bool SearchWordFromExSet(string word)
        {
            //GetEndingsParent.ResultNumber = 0;

            //We define string array and set a value to it (keys of ExceptionDict)
            string[] listOfKeys = ExceptionDict.Keys.ToArray();

            //we sort listOfKeys, thanks to this,
            //we can be sure in the way to use binarySearch
            Array.Sort(listOfKeys);


            //I set negative value due to this variable can hold 0,
            //if binarySearch find key in position(0). So, negative value is the best option
            int key1 = Array.BinarySearch(listOfKeys, word);

            //If key is more than 0 (including itself), then it means that
            //there is a word in Exception Dict
            if (key1 >= 0)
            {
                this.TmpDict = ExceptionDict[word];
                return(true);
            }
            else
            {
                ///We launch Levenstein Algrorithm
                for (int i = 0; i < listOfKeys.Length; i++)
                {
                    int t = StringDistance.GetDamerauLevenshteinDistance(listOfKeys[i], word);
                    if (t <= 1)
                    {
                        this.TmpDict = ExceptionDict[listOfKeys[i]];
                        this.TmpDict.Add("Perhaps, you meant: ", listOfKeys[i]);

                        return(true);
                    }
                }
            }


            return(false);
        }