Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (40)

Наибольший вклад в теги

Все теги (72)

Лучшие ответы пользователя

Все ответы (25)
  • Как определить все места в слове, в которых можно осуществить перенос части этого слова на другую строку, по правилам русского языка?

    @ERAFY Автор вопроса
    В общем у меня получился нижеприведенный класс, позволяющий расставлять знаки "тире" в местах переноса слов по правилам русского языка.
    Класс работает на основе алгоритма Христова, и написан на языке C#.

    Запускать на выполнение нижеприведенный код можно строкой:
    word = PasteDashes.SeparateWord(word);
    Возможно кому пригодиться в будущем.

    -------------------------------------------------------

    public static class PasteDashes
        {
            // Метод проверки, есть ли в строке гласные?
            private static bool isNotLastSep(string subStr)
            {
                string vowel = "аеёиоуыэюя";
    
                var b = false;
                for (var i = 0; i < subStr.Length; i++)
                {
                    if (vowel.IndexOf(subStr.Substring(i, 1)) != -1)
                    {
                        b = true;
                        break;
                    }
                }
                return b;
            }
    
    
            // Метод разбиения слова на слоги
            private static List<string> addSeparator(string tmpS, List<string> sepList)
            {
                sepList.Add(tmpS);
                //tmpS = "";
    
                return sepList;
            }
    
    
            // Метод убирания знаков тире после первой буквы и перед последней (если там есть знаки тире)
            private static string ConnectFirstAndLastLettersToSyllables(string word)
            {
                if (word[1] == '-')
                    word = word.Remove(1, 1);
    
                if (word[word.Length - 2] == '-')
                    word = word.Remove(word.Length - 2, 1);
    
                return word;
            }
    
    
    
            //Основной метод работающий по алгоритму Христова
            public static string SeparateWord(string word)
            {
                string vowel = "аеёиоуыэюя";
                string voiced = "бвгджзлмнрхцчшщ";
                string deaf = "кпстф";
                string brief = "й";
                string other = "ьъ";
                string consonant = "бвгджзйклмнпрстфхцчшщ";
    
                string letter, syllable = "";
                var syllables = new List<string>();
    
    
                for (var i = 0; i < word.Length; i++)
                {
                    letter = word.Substring(i, 1);
                    syllable += letter;
    
                    bool l;
                    if (word.Length != i + 1)
                    {
                        var k = word.Substring(i + 1, 1);
                        Regex rgx = new Regex("[А-Яа-я]");
                        l = rgx.IsMatch(k);
                    }
                    else
                        l = false;
    
    
                    if (l)
                    {
                        // Проверка на признаки конца слогов
                        // Если буква равна 'й' и она не первая и не последняя и это не последний слог
                        if (
                            (i != 0) &&
                            (i != word.Length - 1) &&
                            (brief.IndexOf(letter) != -1) &&
                            (isNotLastSep(word.Substring(i + 1)))
                            )
                        {
                            syllables = addSeparator(syllable, syllables);
                            syllable = "";
                            //continue;
                        }
    
                        // Если текущая гласная и следующая тоже гласная
                        // EDIT: этот блок необходим если задача - корректно разбить слово на фонетические слоги,
                        // и не нужен если задача - разбить слово на части, которые можно переносить
                        //if (
                        //    (i < word.Length - 1)
                        //    && (vowel.IndexOf(letter) != -1) &&
                        //    (vowel.IndexOf(word.Substring(i + 1, 1)) != -1)
                        //    )
                        //{
                        //    syllables = addSeparator(syllable, syllables);
                        //    syllable = "";
                        //    // continue;
                        //}
    
                        // Если текущая гласная, следующая согласная, а после неё гласная
                        if (
                            (i < word.Length - 2) &&
                            (vowel.IndexOf(letter) != -1) &&
                            (consonant.IndexOf(word.Substring(i + 1, 1)) != -1) &&
                            (vowel.IndexOf(word.Substring(i + 2, 1)) != -1)
                            )
                        {
                            syllables = addSeparator(syllable, syllables);
                            syllable = "";
                            // continue;
                        }
    
                        // Если текущая гласная, следующая глухая согласная, а после согласная и это не последний слог
                        if (
                            (i < word.Length - 2) &&
                            (vowel.IndexOf(letter) != -1) &&
                            (deaf.IndexOf(word.Substring(i + 1, 1)) != -1) &&
                            (consonant.IndexOf(word.Substring(i + 2, 1)) != -1) &&
                            (isNotLastSep(word.Substring(i + 1)))
                            )
                        {
                            syllables = addSeparator(syllable, syllables);
                            syllable = "";
                            // continue;
                        }
    
                        // Если текущая звонкая или шипящая согласная, перед ней гласная, следующая не гласная и не другая, и это не последний слог
                        if (
                            (i > 0) &&
                            (i < word.Length - 1) &&
                            (voiced.IndexOf(letter) != -1) &&
                            (vowel.IndexOf(word.Substring(i - 1, 1)) != -1) &&
                            (vowel.IndexOf(word.Substring(i + 1, 1)) == -1) &&
                            (other.IndexOf(word.Substring(i + 1, 1)) == -1) &&
                            (isNotLastSep(word.Substring(i + 1)))
                            )
                        {
                            syllables = addSeparator(syllable, syllables);
                            syllable = "";
                            // continue;
                        }
    
                        // Если текущая другая, а следующая не гласная если это первый слог
                        if (
                            (i < word.Length - 1) &&
                            (other.IndexOf(letter) != -1) &&
                            ((vowel.IndexOf(word.Substring(i + 1, 1)) == -1) ||
                            (isNotLastSep(word.Substring(0, i))))
                            )
                        {
                            syllables = addSeparator(syllable, syllables);
                            syllable = "";
                            //continue;
                        }
                    }
                }
                syllables = addSeparator(syllable, syllables);
    
                string finalWord = string.Join("-", syllables);
    
                finalWord = ConnectFirstAndLastLettersToSyllables(finalWord);
    
                return finalWord;
            }
        }
    Ответ написан
  • Какие существуют программные библиотеки для поиска оптимального решения в теории игр?

    @ERAFY Автор вопроса
    Solver:
    GLPK (GNU Linear Programming Kit)
    COIN
    CPLEX
    GUROBI
    Revised Simplex Method
    Interior Point Methods
    Interior-Point-Legacy Linear Programming
    Active-Set linprog Algorithm

    Modeling Framework:
    - SciPy (обучающее видео)
    - PyOMO
    - PuLP (обучающее видео)

    Источник: видео.
    Ответ написан
    Комментировать
  • Какие существуют расширения для выделения текста прямо в браузере?

    @ERAFY Автор вопроса
    Вот это расширение мне больше всего понравилось:
    Diigo Web Collector – Capture and Annotate
    Оно подойдет для Google Chrome, Яндекс браузера, Opera
    И на FireFox это расширение работает:
    https://addons.mozilla.org/en-US/firefox/addon/dii...

    Еще есть статья о подобных расширениях:
    https://www.maketecheasier.com/google-chrome-exten...
    Ответ написан
    Комментировать
  • Как парсить HTML при помощи HttpClient?

    @ERAFY Автор вопроса
    У меня еще при помощи HttpWebRequest получилось сделать:
    HttpWebRequest http = (HttpWebRequest)WebRequest.Create(pathToHtml);
            WebResponse response = http.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader sr = new StreamReader(stream);
            string html = sr.ReadToEnd();
    
            // Создание экземпляра локальной переменной «doc».
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    
            // Загрузка HTML кода в локальную переменную «doc».
            doc.LoadHtml(html);
    
            var x = doc.DocumentNode.SelectNodes(pathToHTMLTextNode).Elements("tr").ToList();

    Может кому пригодиться в будущем.
    Ответ написан
    Комментировать
  • Как перекрасить фон тега < br >?

    @ERAFY Автор вопроса
    Использовать < hr/ > заместо < br / > и для < hr > установить opacity 0. Как здесь:
    jsfiddle.net/GQXZx

    А еще можно заменить < br > на теги < span >< /span >
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (135)