Intereting Posts
Обновлять содержимое автоматически, если база данных изменяется Что означают битовые флаги в mysqli, используя fetch_field_direct Java SHA256 выводит разные хэширования на PHP SHA256? Если оператор неправильно обрабатывает Как проверить, является ли загруженный файл изображением? Проверьте, существует ли электронная почта php Как интегрировать аутентификацию Aadhaar Card Api для проверки номера Aadhaar в PHP? Laravel, мне нужно несколько таблиц базы данных для голосования на разных моделях Как отслеживать клики / представления изображений / баннеров с помощью PHP / MySQL Загрузка файла Blueimp jQuery, передача данных дополнительной формы Передача переменной JQuery в php в модальном Создайте новый блок в Magento сравнить строку с ключом sub в парциальном совпадении php-массива Автоматическое определение языка и перенаправление пользователя WooCommerce: Добавить товар в корзину с переоценкой цены?

Разделить текст на отдельные слова

Я хотел бы разделить текст на отдельные слова, используя PHP. Вы знаете, как это достичь?

Мой подход:

function tokenizer($text) { $text = trim(strtolower($text)); $punctuation = '/[^a-z0-9äöüß-]/'; $result = preg_split($punctuation, $text, -1, PREG_SPLIT_NO_EMPTY); for ($i = 0; $i < count($result); $i++) { $result[$i] = trim($result[$i]); } return $result; // contains the single words } $text = 'This is an example text, it contains commas and full-stops. Exclamation marks, too! Question marks? All punctuation marks you know.'; print_r(tokenizer($text)); 

Это хороший подход? У вас есть идеи для улучшения?

Заранее спасибо!

Используйте класс \ p {P}, который соответствует любому символу пунктуации unicode в сочетании с классом whspace \ s.

 $result = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', $text, -1, PREG_SPLIT_NO_EMPTY); 

Это будет разделено на группу из одного или нескольких символов пробелов, но также сосать любые окружающие знаки пунктуации. Он также соответствует символам пунктуации в начале или конце строки. Это дискриминирует такие случаи, как «не надо» и «он сказал« ой! »»

Tokenize – strtok .

 <?php $text = 'This is an example text, it contains commas and full stops. Exclamation marks, too! Question marks? All punctuation marks you know.'; $delim = ' \n\t,.!?:;'; $tok = strtok($text, $delim); while ($tok !== false) { echo "Word=$tok<br />"; $tok = strtok($delim); } ?> 

Сначала я должен сделать строку в нижнем регистре, прежде чем раскалывать ее. Это сделало бы модификатор i и обработку массива впоследствии ненужными. Кроме того, я бы использовал сокращение \W для символов, отличных от слов, и добавил множитель + .

 $text = 'This is an example text, it contains commas and full stops. Exclamation marks, too! Question marks? All punctuation marks you know.'; $result = preg_split('/\W+/', strtolower($text), -1, PREG_SPLIT_NO_EMPTY); 

Изменить Используйте свойства символа Юникода вместо \W как предлагалось marcog . Что-то вроде [\p{P}\p{Z}] (знаки препинания и разделителя) будет охватывать символы, более специфичные, чем \W

вы также можете использовать функцию PHP strtok () для извлечения строковых токенов из вашей большой строки. вы можете использовать его так:

  $result = array(); // your original string $text = 'This is an example text, it contains commas and full stops. Exclamation marks, too! Question marks? All punctuation marks you know.'; // you pass strtok() your string, and a delimiter to specify how tokens are separated. words are seperated by a space. $word = strtok($text,' '); while ( $word !== false ) { $result[] = $word; $word = strtok(' '); } 

подробнее о документации php для strtok ()

Делать:

 str_word_count($text, 1); 

Или, если вам нужна поддержка юникода:

 function str_word_count_Helper($string, $format = 0, $search = null) { $result = array(); $matches = array(); if (preg_match_all('~[\p{L}\p{Mn}\p{Pd}\'\x{2019}' . preg_quote($search, '~') . ']+~u', $string, $matches) > 0) { $result = $matches[0]; } if ($format == 0) { return count($result); } return $result; } 

Вы также можете использовать метод explode: http://php.net/manual/en/function.explode.php

 $words = explode(" ", $sentence);