Использование str_word_count для текстов UTF8

У меня есть этот текст:

$text = "Başka, küskün otomobil kaçtı buraya küskün otomobil neden kaçtı kaçtı buraya, oraya KISMEN @here #there JJJohanson hep. Danny:Where is mom? I don't know! Café est weiß for 2 €uros. My 2nd nickname is mike18."; 

Недавно я использовал это.

 $a1= array_count_values(str_word_count($text, 1, 'ÇçÖöŞşİIıĞğÜü@#é߀1234567890')); arsort($a1); 

Вы можете проверить эту скрипту:
http://ideone.com/oVUGYa

Но это решение не решает все проблемы UTF8. Я не могу записать весь набор UTF8 в str_word_count в качестве параметра.

Поэтому я создал это:

 $wordsArray = explode(" ",$text); foreach ($wordsArray as $k => $w) { $wordsArray[$k] = str_replace(array(",","."),"",$w); } $wordsArray2 = array_count_values($wordsArray); arsort($wordsArray2); 

Результат должен быть следующим:

 Array ( [kaçtı] => 3 [küskün] => 2 [buraya] => 2 [@here] => 1 [#there] => 1 [Danny] => 1 [mom] => 1 [don't] => 1 [know] => 1 ... ... ) 

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

Например, это решение не охватывает такие слова: Hello Mike,how are you ? Майк и как не будут рассматриваться как разные слова.

Это не рассматривается в решении KISMEN @here #there : KISMEN @here #there . Знак «Вкл» и «Стрелка» не учитывается.

Это не будет покрыто JJJohanson . Хотя это слово, оно будет рассматриваться как JJJohanson

Вопрос, восклицательные знаки должны быть удалены из слов.

Есть ли лучший способ получить поведение str_word_count с поддержкой UTF8 ? Текст $text который существует в верхней части этого вопроса, является ссылкой для меня.

(Было бы лучше, если бы вы могли дать скрипку свой ответ)

Related of "Использование str_word_count для текстов UTF8"

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

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

Если вы хотите поддерживать несколько языков, вам понадобится конкретный движок токенизатора. Для получения дополнительной информации вы можете исследовать полнотекстовый индекс, токензатор, CJK-токенизатор, CJK-анализатор.

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

Я думаю, что вы на правильном пути с explode , но это не обрабатывает регулярное выражение.

Измените свой код на:

 $namePattern = '/[\s,:?!]+/u'; $wordsArray = preg_split($namePattern, $text, -1, PREG_SPLIT_NO_EMPTY); $wordsArray2 = array_count_values($wordsArray); arsort($wordsArray2); print_r($wordsArray2); 

Конечно, вам может понадобиться настроить регулярное выражение ( $regexPattern ) для удовлетворения ваших потребностей.

Сценарий: http://ideone.com/JoIJqv