Exemplo n.º 1
0
        /// <summary>
        /// Создает канал для вебсервиса толкового словаря
        /// </summary>
        /// <returns>канал вебсервиса толкового словаря</returns>
        internal IExplDic CreateChannel()
        {
            IExplDic explService = explFactory.CreateChannel();

            ((IClientChannel)explService).Open();
            return(explService);
        }
Exemplo n.º 2
0
        /// <summary>
        /// осуществляет поиск слова в словаре и загружает ближащие слова
        /// </summary>
        /// <param name="sWord">слово для поиска</param>
        /// <param name="collection">коллекция которую надо обновить информацией их толкового словаря</param>
        /// <returns>номер нижнего слова из диапазона запрашиваемых слов</returns>
        public int GoToWord(string sWord, ObservableCollection <WordSemanticBranch> collection)
        {
            IExplDic aDic = null;
            int      nRequestLowerBound = 1;

            try
            {
                aDic = CreateChannel();
                int nMaxRows    = 0;
                int nLowerBound = aDic.Search(out nMaxRows, sWord, true, string.Empty, false, null, false, m_LsId);
                nRequestLowerBound = nLowerBound - ROWS_PER_PAGE / 2;
                if (nRequestLowerBound < 1)
                {
                    nRequestLowerBound = 1;
                }

                AddDictionaryWords(nLowerBound, collection);

                ((IClientChannel)aDic).Close();
            }
            catch (Exception ex)
            {
                if (aDic != null)
                {
                    ((IClientChannel)aDic).Abort();
                }
                MessageBox.Show(string.Format("{0} {1}", "GoToWord", ex.Message));
            }

            return(nRequestLowerBound);
        }
Exemplo n.º 3
0
        /// <summary>
        /// проверят логин/пароль пользователя путем запроса веб-сервису толкового словаря
        /// </summary>
        /// <returns>true, если пользователь найден и имеет доступ к словарю</returns>
        public bool CheckCredentials()
        {
            IExplDic curChannel = null;

            try
            {
                curChannel = CreateChannel();
                string[] roles = curChannel.GetUserRoles(m_LsId);
                ((IClientChannel)curChannel).Close();
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    MessageBox.Show(ex.InnerException.Message);
                }
                else
                {
                    MessageBox.Show(ex.Message);
                }
                if (curChannel != null)
                {
                    ((IClientChannel)curChannel).Abort();
                }
                return(false);
            }
            return(true);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Возвращает семнатическую ветвь. Слово и все его непосреджственные потомки из словарной статьи.
        /// </summary>
        /// <param name="sWord">слово родитель</param>
        /// <param name="SearchOption">настройки поиска</param>
        /// <returns>объект семантической ветви</returns>
        public WordSemanticBranch GetSemanticLink(string sWord, Options SearchOption)
        {
            WordSemanticBranch lnk = null;

            IExplDic curChannel = null;

            try
            {
                lnk = new WordSemanticBranch();
                lock (m_dbHelper)
                {
                    WordItem anWord = m_dbHelper.GetWord(sWord);
                    if (anWord == null)
                    {
                        anWord = m_dbHelper.AddWord(sWord, true);
                    }
                    lnk.ParentWord = new RegistryWord(anWord);
                }

                curChannel = CreateChannel();

                ExplDictService.nom[] articles = curChannel.ExplGetArticles(sWord, false, false, false, m_LsId);

                foreach (ExplDictService.nom article in articles)
                {
                    if (ShouldSkip(article.part))  //существительное
                    {
                        continue;
                    }

                    foreach (ExplDictService.formula Value in article.formula)
                    {
                        if (Value.kind == 0 && //смысл
                            Value.lv == 2)     //толкование
                        {
                            string   text   = Value.interpr;
                            string[] words  = text.Split(new char[] { ' ', ',', '.', '!', '?', ';', ':' });
                            short    nGroup = 0;
                            foreach (string word in words)
                            {
                                lnk.Children.AddRange(GetChildren(sWord, word, curChannel, nGroup));
                                nGroup++;
                            }
                        }
                    }
                }
                ((IClientChannel)curChannel).Close();
            }
            catch (Exception ex)
            {
                if (curChannel != null)
                {
                    ((IClientChannel)curChannel).Abort();
                }
                MessageBox.Show(string.Format("{0} {1}", "GetSemanticLink", ex.Message));
            }

            return(lnk);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Обновляет коллекцию семантических ветвей после запроса списка слов из толкового словаря
        /// </summary>
        /// <param name="nLowerBound">нижняя граница слов, которые надо получить из толкового словаря</param>
        /// <param name="collection" out>коллекция которую надо обновить информацией их толкового словаря</param>
        public void AddDictionaryWords(int nLowerBound, ObservableCollection <WordSemanticBranch> collection)
        {
            //for debug purposes
            //return;
            IExplDic aDic = null;

            try
            {
                aDic = CreateChannel();
                //int nMaxRows = aDic.GetRowCount(string.Empty, false, null, false, m_LsId);
                int nRequestLowerBound = nLowerBound - ROWS_PER_PAGE / 2;
                if (nRequestLowerBound < 1)
                {
                    nRequestLowerBound = 1;
                }
                ExplDictService.elList[] page = aDic.SupplyPageOfData(nRequestLowerBound, ROWS_PER_PAGE, true, string.Empty, false, null, false, m_LsId);
                foreach (ExplDictService.elList elem in page)
                {
                    WordSemanticBranch newBranch = GetSemanticLinkFromDB(RegistryWord.CreateNameWithHomonym(elem.word, elem.omon));
                    if (newBranch == null)
                    {
                        newBranch            = new WordSemanticBranch();
                        newBranch.ParentWord = new RegistryWord(elem);
                    }

                    int nIndex = collection.IndexOf(newBranch);
                    if (nIndex < 0)
                    {
                        collection.Add(newBranch);
                    }
                    else
                    {
                        collection[nIndex] = newBranch;
                    }
                }
                ((IClientChannel)aDic).Close();
            }
            catch (Exception ex)
            {
                if (aDic != null)
                {
                    ((IClientChannel)aDic).Abort();
                }
                MessageBox.Show(string.Format("{0} {1}", "AddDictionaryWords", ex.Message));
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// находит все исходные формы слова
        /// </summary>
        /// <param name="sParent">слово родитель</param>
        /// <param name="sAnyFormWord">слово из правой части словарной статьи</param>
        /// <param name="explChannel">канал толкового словаря</param>
        /// <param name="relGroupId">номер группы отношений. используется если одно слово имеет несколько равнозначных исходных форм</param>
        /// <returns>список потомков с снайденным типом связи</returns>
        List <WordLink> GetChildren(string sParent, string sAnyFormWord, IExplDic explChannel, short relGroupId)
        {
            Ilib5           wordFormsChannel = null;
            List <WordLink> listChildren     = null;

            try
            {
                listChildren = new List <WordLink>();
                if (sAnyFormWord.Length == 0)
                {
                    return(listChildren);
                }

                wordFormsChannel = CreateWordFormsChannel();

                WordUniAndPartAndOmon[] forms = wordFormsChannel.getAllFirstWFormsWithParts(sAnyFormWord);

                foreach (WordUniAndPartAndOmon form in forms)
                {
                    string s             = form.part;
                    string sOriginalForm = form.forma;
                    if (IsNoun(form.part))
                    {
                        sOriginalForm = RemoveAccents(sOriginalForm);
                        if (sOriginalForm.Length > 0)
                        {
                            //can this be equal to zero?
                            int nVal = explChannel.ExplCheckReestr(sOriginalForm, form.omon, m_LsId);
                            if (nVal < 0 && form.omon != 0)
                            {
                                nVal          = explChannel.ExplCheckReestr(sOriginalForm, 0, m_LsId);
                                sOriginalForm = RegistryWord.CreateNameWithHomonym(sOriginalForm, string.Empty);
                            }
                            else
                            {
                                sOriginalForm = RegistryWord.CreateNameWithHomonym(sOriginalForm, form.omon == 0 ? string.Empty : form.omon.ToString());
                            }

                            lock (m_dbHelper)
                            {
                                RelationItem newItem = m_dbHelper.GetRelationItem(sParent, sOriginalForm);
                                if (newItem == null)
                                {
                                    RelationType relType = (nVal < 0) ? RelationType.Absent : (listChildren.Count > 0 ? RelationType.Tentative : RelationType.Normal);
                                    newItem = m_dbHelper.AddRelation(sParent, sOriginalForm, relType, relGroupId);
                                }
                                WordItem aWord = m_dbHelper.GetWord(sOriginalForm);
                                WordLink aLink = new WordLink(newItem, aWord);
                                if (!listChildren.Contains(aLink))
                                {
                                    listChildren.Add(aLink);
                                }
                            }
                        }
                    }
                }

                ((IClientChannel)wordFormsChannel).Close();
            }
            catch (Exception ex)
            {
                if (wordFormsChannel != null)
                {
                    ((IClientChannel)wordFormsChannel).Abort();
                }
                MessageBox.Show(string.Format("{0} {1}", "GetChildren", ex.Message));
            }

            return(listChildren);
        }