Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Шохрух
1 / 1 / 0
Регистрация: 26.05.2015
Сообщений: 103
Завершенные тесты: 1
1

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

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

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

Слова из массива строк 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2016, 21:51
Ответы с готовыми решениями:

PHP функция деление двух значений - вывод результата
Есть вывод цены в интернет-магазине, нужно реализовать рядом ЦЕНУ товара в...

Сделать фильтр слов на php
Здравствуйте! Помогите пожалуйста советом. К примеру, есть чекбокс с...

подсчет количества вхождений слов на php
Есть задачка подсчитать количество вхождений каждого слова в тексте. Вот...

Проверить текст на наличие СТОП слов - PHP
Есть страница сайта, которая для вывода тайтла берет текст из URL ...

Окончания слов при изменение цифры php
Не могу сообразить как написать такое - если 0,11....20, то выводим товарОВ...

4
crautcher
2019 / 1991 / 463
Регистрация: 27.05.2011
Сообщений: 6,837
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
Сообщений: 103
Завершенные тесты: 1
25.10.2016, 09:05  [ТС] 3
Спасибо.Большое.

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

Решение

Цитата Сообщение от Шохрух Посмотреть сообщение
а для чего вот это : ~iu
i значит плевать какого регистра буквы, большие или мелкие
u значит работаем с utf8 кодировкой
Цитата Сообщение от Шохрух Посмотреть сообщение
и ~
начало регулярки, конец регулярки
1
Шохрух
1 / 1 / 0
Регистрация: 26.05.2015
Сообщений: 103
Завершенные тесты: 1
25.10.2016, 21:00  [ТС] 5
Спасибо большое, за помощь.
0
25.10.2016, 21:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2016, 21:00

Перебор возможных комбинаций цифр или слов на PHP
Недавно встала такая задача, сделать списки возможных комбинаций слов, которых...

php поиск в txt Файле двух одинаковых слов
Здравствуйте! уважаемые пользователи! я начинающи ученик самоучка в php поэтому...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru