Php найти согласные буквы

soundex

Двум словам, имеющим схожее произношение, соответствует один и тот же ключ soundex. Это свойство может быть использовано, например, при поиске по базе данных, когда известно произношение слова и неизвестно его написание.

Данная реализация функции soundex описана Дональдом Кнутом (Donald Knuth) в книге «The Art Of Computer Programming, vol. 3: Sorting And Searching», Addison-Wesley (1973), стр. 391-392.

Список параметров

Возвращаемые значения

Возвращает ключ soundex в виде строки ( string ). Возвращает ключ soundex в виде строки ( string ) с четырьмя символами. Если в string содержится хотя бы одна буква, возвращаемая строка начинается с буквы. В противном случае возвращается «0000» .

Список изменений

Версия Описание
8.0.0 До этой версии при вызове функции с пустой строкой возвращалось false без особой причины.

Примеры

Пример #1 Примеры использования soundex

soundex ( «Euler» ) == soundex ( «Ellery» ); // E460
soundex ( «Gauss» ) == soundex ( «Ghosh» ); // G200
soundex ( «Hilbert» ) == soundex ( «Heilbronn» ); // H416
soundex ( «Knuth» ) == soundex ( «Kant» ); // K530
soundex ( «Lloyd» ) == soundex ( «Ladd» ); // L300
soundex ( «Lukasiewicz» ) == soundex ( «Lissajous» ); // L222
?>

Смотрите также

  • levenshtein() — Вычисляет расстояние Левенштейна между двумя строками
  • metaphone() — Возвращает ключ metaphone для строки
  • similar_text() — Вычисляет степень похожести двух строк

User Contributed Notes 20 notes

Since soundex() does not produce optimal results for German language
we have written a function to implement the so called Kölner Phonetik
(Cologne Phonetic).

Читайте также:  Кратно пяти в питоне

Please find the code below in the hope it might be useful:

/**
* A function for retrieving the Kölner Phonetik value of a string
*
* As described at http://de.wikipedia.org/wiki/Kölner_Phonetik
* Based on Hans Joachim Postel: Die Kölner Phonetik.
* Ein Verfahren zur Identifizierung von Personennamen auf der
* Grundlage der Gestaltanalyse.
* in: IBM-Nachrichten, 19. Jahrgang, 1969, S. 925-931
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* @package phonetics
* @version 1.0
* @link http://www.einfachmarke.de
* @license GPL 3.0
* @copyright 2008 by einfachmarke.de
* @author Nicolas Zimmer
*/

function cologne_phon ( $word )

/**
* @param string $word string to be analyzed
* @return string $value represents the Kölner Phonetik value
* @access public
*/

//prepare for processing
$word = strtolower ( $word );
$substitution =array(
«ä» => «a» ,
«ö» => «o» ,
«ü» => «u» ,
«ß» => «ss» ,
«ph» => «f»
);

foreach ( $substitution as $letter => $substitution ) $word = str_replace ( $letter , $substitution , $word );
>

//Rule for exeptions
$exceptionsLeading =array(
4 =>array( «ca» , «ch» , «ck» , «cl» , «co» , «cq» , «cu» , «cx» ),
8 =>array( «dc» , «ds» , «dz» , «tc» , «ts» , «tz» )
);

$exceptionsFollowing =array( «sc» , «zc» , «cx» , «kx» , «qx» );

//Table for coding
$codingTable =array(
0 =>array( «a» , «e» , «i» , «j» , «o» , «u» , «y» ),
1 =>array( «b» , «p» ),
2 =>array( «d» , «t» ),
3 =>array( «f» , «v» , «w» ),
4 =>array( «c» , «g» , «k» , «q» ),
48 =>array( «x» ),
5 =>array( «l» ),
6 =>array( «m» , «n» ),
7 =>array( «r» ),
8 =>array( «c» , «s» , «z» ),
);

//Exceptions
if ( $i == 0 AND $word [ $i ]. $word [ $i + 1 ]== «cr» ) $value [ $i ]= 4 ;

foreach ( $exceptionsLeading as $code => $letters ) if ( in_array ( $word [ $i ]. $word [ $i + 1 ], $letters ))

if ( $i != 0 AND ( in_array ( $word [ $i — 1 ]. $word [ $i ],
$exceptionsFollowing )))

//Normal encoding
if ( $value [ $i ]== «» ) foreach ( $codingTable as $code => $letters ) if ( in_array ( $word [ $i ], $letters )) $value [ $i ]= $code ;
>
>
>

//delete double values
$len = count ( $value );

for ( $i = 1 ; $i < $len ; $i ++)if ( $value [ $i ]== $value [ $i - 1 ]) $value [ $i ]= "" ;
>

//delete vocals
for ( $i = 1 ; $i > $len ; $i ++) < //omitting first characer code and h
if ( $value [ $i ]== 0 ) $value [ $i ]= «» ;
>

$value = array_filter ( $value );
$value = implode ( «» , $value );

administrator at zinious dot com:

Sorry but your code wasnt soundex compliant
here were my results with your code, my code, and the default..

string: rest
R620 perform administrator’s function 0.009452
R230 perform cg’s function 0.001779
R230 perform default soundex function 9.4999999999956E-005

string: reset
R620 perform administrator’s function 0.0055900000000001
R230 perform cg’s function 0.00091799999999997
R230 perform default soundex function 0.00010600000000005

i dunno why the default, every once in a while, will for some reason be 9.xxx. very odd i think..
my code is at the bottom.. these tests were before the soundex modification as i discribe below..
btw for all the original specs on the soundex algorithm goto
http://www.star-shine.net/~functionifelse/GFD/?word=soundex

dalibor dot toth at podravka dot hr:

yes it is perhaps sad that it gives you the same code,
even metaphone has that problem..
but one might not want to be so accurate.. if somone
is on search engine.. lets call it shmoogle looking
for «php array reset» and search for «php array rest»
then shmoogle might return stuff about beds and such..
(if they were all stupid and didnt use the first words
as more important) so anyways shmoogle might need it to
be less accurate in such cases.. but nonetheless..
my fix for this is to add the number of syllables at the end of the string making it 5 characters long..
this would work as fallows..

or if you wanted to just use the default soundex function

revolutionary more or less.. problly less.
This function is only meant for one word though.. i’d like to see someone
modify it to use split and run it through a loop to get each words cg_soundex
that’ll be fun 😉
i would also like to sujest to the php zend apache kinda people who make php
to add an optional additional variable the user can specify as fallows

which would return the number of syllables at the end of the string
highly accurate sound testing woo! also you could add VOW for vowels
and CONS for consonant or whatever else someone would want..
but i really think the number of syllables will be pleanty efficiant.
umm.. if this helps anyone your welcome.. ummm.. good luck in all
your php adventures.. oh. and the final results

syllables
1 rest
2 reset
metaphone
RST rest
RST reset
soundex
R230 rest
R230 reset

string: rest
R2301 perform cg’s function 0.00211
R230 perform default soundex function 0.00011299999999997

string: reset
R2302 perform cg’s function 0.001691
R230 perform default soundex function 0.00010399999999999

the default function is a tad bit faster..
so maybe they will add this option and we’ll have speed and accuracy.

SILENT WIND OF DOOM WOOSH!

Источник

Найти в строке 5 согласных букв подряд

Найти только те слова , которые имеют наибольшие под цепочки согласных букв
Найти только те слова , которые имеют наибольшие под цепочки согласных букв . (Пусть на длину.

Найти частоту появления согласных букв в строке
Найти частоту появления согласных букв в строке.можно в с++ или си.

Найти частоту появления согласных букв в строке (перевод с С++)
условия: Найти частоту появления согласных букв в строке. #include <iostream> #include <string>.

var_dump( preg_match('/[aeouyAEYUOA]/', '123eaeoab12',$found) , $found );
$text = 'Здесь много всяких слов включая вот такие странные ваоеаеру грноуеии оаоуи'; echo preg_replace('#(\s?)((\S+)?[уеаоэяиУЕАОЭЯИ](\S+)?)(\s?)#U', '$1$2$3', $text);

ЦитатаСообщение от fa2m Посмотреть сообщение

$text = 'Здесь много всяких слов включая вот такие странные ваоеаеру грноуеии оаоуи'; echo preg_replace('#(\s?)((\S+)?[уеаоэяиУЕАОЭЯИ](\S+)?)(\s?)#U', '$1$2$3', $text);

Здесь же код работает неверно-слова с 5 согл подряд не заключаются в курсив как надо или не заключаются вообще.

Добавлено через 1 минуту

ЦитатаСообщение от crautcher Посмотреть сообщение

var_dump( preg_match('/[aeouyAEYUOA]/', '123eaeoab12',$found) , $found );

Эксперт HTML/CSSЭксперт PHP

ЦитатаСообщение от GreatTalker Посмотреть сообщение

1 2 3 4 5 6 7 8 9 10 11 12 13 14
 $fp = file("sample.txt"); //echo 'Количество строк в файле: '.count($fp); $fp = fopen('sample.txt', 'r+'); if ($fp) { foreach ($fp as $line) { if (preg_match('/[aeouyAEYUOA]/', $line) $line=""+$line+""; } } $fp=fclose ("sample.txt") echo ("
"
); echo readfile("sample.txt"); ?>

Эксперт HTML/CSSЭксперт PHP

примерно, но в данном примере бессмысленно — сохранять надо не в $line, а в любой другой переменной, и не просто сохранять, а добавлять — иначе в итоге ничего не увидите в результате (ну или последнее найденное значение)

Переделал алгоритм. теперь строки заносятся в массив,и позже в цикле каждая из них проверяется у словием,но теги не добавляются

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 $base = file("sample.txt"); $result = array(); foreach($base AS $row) { $result[] = $row; } print_r($result); echo ('
'
); foreach ($result AS $i => $value){ if (preg_match('/[aeouyAEYUOA]/', $result[$i])){ $result[$i]=''.$result[$i].''
; } } foreach ($result AS $j => $value){ echo("$result[$j]"); } ?>

Добавлено через 13 минут
Прооверил-условие некорректное. как его переделать на если 5 подряд согласных букв в строке,то прибавить теги?

if (preg_match('/[aeouyAEYUOA]/', $result[$i])){ echo ("$result[$i]"); } else { echo ("$result[$i]");

Добавлено через 11 минут
Всё понял,исправил код для русских букв,все работает.Спасибо всем большое за помощь.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
 $base = file("sample.txt"); $result = array(); foreach($base AS $row) { $result[] = $row; } print_r($result); echo ('
'
); foreach ($result AS $i => $value){ if (preg_match('/[^аеиоуыэюяАЕИОУЫЭЮЯ]/', $result[$i])){ echo ("$result[$i]"); } else { echo ("$result[$i]"); } } ?>

Найти количество гласных и согласных букв в строке, а также символов (, . : ? !
Задана строка S, содержащая русскоязычный текст, записанный малыми буквами. Найти количество.

В заданной строке найти количество больших и маленьких согласных английских букв.
Всем привет. Я надеюсь кто нибудь мне поможет. Дело такое: pacal abc изучаю всего два дня, но мне.

В строке найти слова, в которых гласных букв больше, чем согласных
В общем, такое задание : Написать программу, которая выводит на экран слова введенной с клавиатуры.

Посчитать количество гласных букв, согласных букв, цифр и знаков препинания в строке
С клавиатуры введена строка на кирилице. Посчитать количество гласных букв, согласных букв, цифр.

Источник

Простой способ подсчета гласных в строке в PHP?

Если я определяю простую строковую переменную, как бы я мог бы подсчитать и вывести количество гласных в строке самым простым способом?

Я искал и нашел несколько подобных способов, но большинство кажется более сложным, чем необходимо. Все они функциональны и, возможно, сложность необходима, но я ищу простейшее решение.

Моя строковая переменная будет выглядеть примерно так:

$someString = "This is some text with some more text and even more text." 

Я просто хочу показать общие экземпляры a, e, i, o, u. Заранее спасибо.

$Vowels = substr_count($someString, 'a')+substr_count($someString, 'e')+substr_count($someString, 'i')+substr_count($someString, 'o')+substr_count($someString, 'u'); 

Однако я бы использовал его в функции, иначе вам приходилось менять имена переменных каждый раз, когда вы хотите их повторно использовать:

function CountVowels($String) < return substr_count($String, 'a')+substr_count($String, 'e')+substr_count($String, 'i')+substr_count($String, 'o')+substr_count($String, 'u'); >echo CountVowels('This is some text with some more text and even more text.'); //Echos 17 

непроверенный, но должен работать:

$matches = preg_match_all('/[aeiou]/i', $someString, $ignore); 
preg_match('#[aeiou]#i', $someString, $matches); echo count($matches) - 1, "\n"; 

Что-то вроде этого должно работать. Я не могу придумать более простой метод.

Вот еще один способ сделать это …

$vowels = array('a', 'e', 'i', 'o', 'u'); $vowelsCounts = array_sum( array_intersect_key( array_count_values( str_split( strtolower($str) ) ), array_flip($vowels) ) ); 

Но это тоже работает, просто убедитесь, что вы не используете это в исходной строке, так как это изменит ее.

str_replace($vowels, FALSE, $str, $vowelsCounts); 

Я знаю, что уже довольно поздно, но я тестировал все ответы выше, и производительность была плохой при обработке большой строки.

Я считаю, что этот код лучше по памяти и времени выполнения

$counter = 0; $a = array("a","e","i","o","u"); foreach (count_chars($str, 1) as $k => $v) < //echo "There were $v instance(s) of \"" .$k."/". chr($k) . "\" in the string.\n"; if(in_array(strtolower(chr($k)), $a)) $counter += $v; > 
$someString = "This is some text with some more text and even more text."; echo preg_match_all('/[aouie]/i', $someString, $out); 

Не подходит для строк в многобайтовых наборах символов.

function countSpecificChars ($string, $charsOfInterest) < $count = 0; $len = strlen($string); for ($i = 0; $i < $len; $i++) < if (in_array($string[$i], $charsOfInterest)) < $count++; >> return $count; > function countVowels ($string) < return countSpecificChars($string, array('a', 'e', 'i', 'o', 'u')); >echo countVowels('This is some text with some more text and even more text.'); // echoes '17' 
$someString = "This is some text with some more text and even more text."; $total = 0; $vowels = Array('a','e','i','o','u'); for ($i=0;$i > echo $total; 

Подсчитайте гласный в строке, используя функцию в php.

echo substr_count("£string","a")+substr_count("£string","e")+substr_count("£string","i")+substr_count("£string","o")+substr_count("£string","u"); 

Источник

Оцените статью