Библиотека PHP / Класс для подсчета Слов на Различных Языках?

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

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

Счетчиком символов я имею в виду количество "возможно, одним словом", символов, содержавших в рамках данного текста с той же информацией о языке, описанной выше.

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

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

Я хотел бы знать, имеет ли Переполнение стека, любой вовлекает, где начать искать существующий продукт / метод, чтобы сделать это в PHP, поскольку я - хороший ленивый программист*

Простой тест, показывающий, как str_word_count с set_locale не работает, и функция от str_word_count страницы php.net.

*http://blogoscoped.com/archive/2005-08-24-n14.html

11
задан Michael Robinson 10 June 2010 в 04:09
поделиться

2 ответа

Подсчет символов прост:

echo strlen('一个有十的字符的句子'); // 30 (WRONG!)
echo strlen(utf8_decode('一个有十的字符的句子')); // 10

Подсчет слов - это то место, где все начинает усложняться, особенно для китайского, японского и других языков, в которых не используются пробелы (или другие распространенные символы «границы слова») в качестве разделителей слов. Я не говорю по-китайски и не понимаю, как работает подсчет слов на китайском, так что вам придется меня немного просветить - что делает слово в этих языках? Это какой-то конкретный символ или набор символов? Я помню, как читал что-то, связанное с тем, как трудно было идентифицировать японские слова в письме T9, но больше не могу это найти.

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

count(preg_split('~[\p{Z}\p{P}]+~u', $string, null, PREG_SPLIT_NO_EMPTY));
5
ответ дан 3 December 2019 в 11:51
поделиться

Ну, попробуйте:

<?
function count_words($str){
     $words = 0;
     $str = eregi_replace(" +", " ", $str);
     $array = explode(" ", $str);
     for($i=0;$i < count($array);$i++)
      {
         if (eregi("[0-9A-Za-zÀ-ÖØ-öø-ÿ]", $array[$i]))
             $words++;
     }
     return $words;
 }
 echo count_words('This is the second one , it will count wrong as well" , it will count 12 instead of 11 because the comma is counted too.');
 ?>
-1
ответ дан 3 December 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: