Форум программистов, компьютерный форум, киберфорум PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 26.05.2015
Сообщений: 124
1

Деление слов на слоги в php

21.10.2016, 21:51. Показов 6554. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите составить скрипт деления слов на слоги. В одном форуме нашел следующие функции:

Слова из массива строк s по одному будем посылать на обработку в функцию delslog($str).
PHP Скопировано
1
2
3
4
5
6
7
8
9
function delslog($str)
 {$k=k_slog($str); //посчитаем количество слогов
 $mas=slog($str, $k); //разобьём слово на слоги
 $f=fopen("slogi.txt","a");//откроем файл slogi.txt 
 for($i=0;$i<count($mas);$i++) //для записи и 
 {//через «-» запишем в 
 $mas[$i].='-'; //него слоги
 fwrite( $f,$mas[$i]);}
 fclose($f);} //закроем файл
В этой части программы происходит вызов функций k_slog($str)и slog($s, $k). Рассмотрим их подробнее.
PHP Скопировано
1
2
3
4
5
6
 function k_slog($str) //считает количество слогов
 {//бежим по строке
 for($i=0, $q=0; $i < strlen($str); $i++)
 if(glas($str[$i])) // если очередная буква 
 $q++; //гласная, увеличим счетчик
 return $q; } //вернём значение счетчика
PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function slog($s, $k) //разбивает слово на слоги
 {for($i=0, $q=0, $j=0; $i<strlen($s) 
 {if(glas($s[$i]) && $q==0)//если очередная буква
 { //гласная и первая
 $mas[$j].=$s[$i]; //припишем ее к слогу 
 $q=1; //установим флажок
 $i++; //перейдем на след. букву}
 else
 if(!glas($s[$i]) && ($i==0 || $q!=1 || (glas($s[$i-1]) && !glas($s[$i+1])) || $j==$k-1))
 /*если буква не гласная и: первая, или до гласной, или между гласной и согласной, или последняя*/
 {
 $mas[$j].=$s[$i];//припишем её к слогу
 $i++; //перейдем на след. букву}
 else 
 { $q=0; //иначе снимем флажок и
 $j++;} //перейдем на след. слог} 
 return $mas;} //вернём массив слогов
В приведенных функциях вызывается функция glas($a). Она выглядит так:
PHP Скопировано
1
2
3
4
5
6
7
8
9
function glas($a) //проверяет, гласная ли буква 'а'
 {
 $gls='аеёиоуыэюя'; //Запишем строки из строчных и
 $glb='АЕЁИОУЫЭЮЯ'; //заглавных букв
 for($i=0; $i < 11; $i++)
 if(substr_count($gls,$a)>0|| //если 'а' входит
 substr_count($glb,$a) > 0)//в одну из строк
 return 1; // вернём 1
 return 0;}
Но не разобрался в них (очень много ошибок). Помогите написать или собрть из этих функций одну рабочую.
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2016, 21:51
Ответы с готовыми решениями:

Деление слов на слоги (С++)
Нужно написать программу деления слов на слоги на С++. Пожалуйста, помогите!)

Деление слов на слоги
Прога делит английские слова на слоги, но здесь не все правила слогоделения (слово name, например, выдает как двухсложное). Помогите,...

Деление на слоги (не Лян-Кнут)
Всем здравствуйте. Есть задача, разделить выделенный текст в Word на слоги, не используя алгоритм Ляна-Кнута. Думаю организовать так:...

4
 Аватар для crautcher
2449 / 2300 / 597
Регистрация: 27.05.2011
Сообщений: 7,836
24.10.2016, 16:37 2
Лучший ответ Сообщение было отмечено Шохрух как решение

Решение

Проще несколькими правилами автозаменой
PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
$text="признаны уязвимыми или вымирающими Международным союзом охраны природы";
#char patterns
$RusA = "[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]";
$RusV = "[аеёиоуыэюя]";
$RusN = "[бвгджзклмнпрстфхцчшщ]";
$RusX = "[йъь]";
 
#main ruller
$regs[] = "~(". $RusX . ")(" . $RusA . $RusA . ")~iu";
$regs[] = "~(". $RusV . ")(" . $RusV . $RusA  . ")~iu";
$regs[] = "~(". $RusV . $RusN . ")(" . $RusN . $RusV . ")~iu";
$regs[] = "~(". $RusN . $RusV . ")(" . $RusN . $RusV . ")~iu";
$regs[] = "~(". $RusV . $RusN . ")(" . $RusN . $RusN. $RusV . ")~iu";
$regs[] = "~(". $RusV . $RusN . $RusN . ")(". $RusN . $RusN . $RusV . ")~iu";
$regs[] = "~(". $RusX . ")(" . $RusA . $RusA . ")~iu";
$regs[] = "~(". $RusV . ")(" . $RusA . $RusV  . ")~iu";
 
 
foreach($regs as $cur_regxp) {
        $text = preg_replace( $cur_regxp , "$1-$2" , $text);
}
var_dump($text);
string(155) "приз-на-ны у-яз-ви-мы-ми и-ли вы-ми-ра-ю-щи-ми Меж-ду-на-род-ным со-ю-зом ох-ра-ны при-ро-ды"
1
1 / 1 / 0
Регистрация: 26.05.2015
Сообщений: 124
25.10.2016, 09:05  [ТС] 3
Спасибо.Большое.

Добавлено через 7 минут
Скажите пожалуйста, а для чего вот это : ~iu и ~ ?
0
 Аватар для crautcher
2449 / 2300 / 597
Регистрация: 27.05.2011
Сообщений: 7,836
25.10.2016, 11:57 4
Лучший ответ Сообщение было отмечено Шохрух как решение

Решение

Цитата Сообщение от Шохрух Посмотреть сообщение
а для чего вот это : ~iu
i значит плевать какого регистра буквы, большие или мелкие
u значит работаем с utf8 кодировкой
Цитата Сообщение от Шохрух Посмотреть сообщение
и ~
начало регулярки, конец регулярки
1
1 / 1 / 0
Регистрация: 26.05.2015
Сообщений: 124
25.10.2016, 21:00  [ТС] 5
Спасибо большое, за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2016, 21:00
Помогаю со студенческими работами здесь

Разбиение Слов на Слоги.
Всем здраствуйте. Задание следущее: написать программу на VB которая будет разбивать слово на слоги. Принцип таков: в слоге может...

Разделение слов на слоги
Мне нужно написать программу для деления слов на слоги по определенным правилам. Пока что столкнулся с проблемой цикла. Для одного слова...

Разделение слов на слоги в С++
Помогите пожалуйста написать программу для курсовой! Очень надо, буду благодарен. Дан текст, состоящий из русских слов. Составить...

Программа деления слов на слоги
надо составить программу деления слов на слоги, пожалуйста помогите

Попытка сделать задачу "деление слова на слоги"
Здравствуйте. Меня очень заинтересовала задача из топика ниже- деление слова на слоги и я попытался решить ее. Но, к сожалению, я не имею...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
py-thonny 19.03.2025
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту. . .
Работа с метаданными EXIF и JPEG в JavaScript
run.dev 19.03.2025
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними. . .
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Mr. Docker 19.03.2025
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?. . .
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
GameUnited 19.03.2025
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать. . .
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер