str_word_count() 用于非拉丁单词?

问题描述 投票:0回答:5

我试图计算用非拉丁语言(保加利亚语)编写的变量中的单词数。但似乎 str_word_count() 没有计算非拉丁单词。 php文件的编码是UTF-8

$str = "текст на кирилица";
echo 'Number of words: '.str_word_count($str);
//this returns 0
php count
5个回答
10
投票

您可以使用正则表达式来做到这一点:

$str = "текст на кирилица";
echo 'Number of words: '.count(preg_split('/\s+/', $str));

这里我将单词分隔符定义为空格字符。如果可能有其他内容被视为单词分隔符,您需要将其添加到正则表达式中。

另请注意,由于正则表达式中没有 utf 字符(不是字符串) - 不需要 /u

 修饰符。但如果您希望一些 utf 字符充当分隔符,则需要添加此正则表达式修饰符。

更新

如果您只想在单词中处理

西里尔字母,您可以使用:

$str = "текст на 12453 кирилица"; echo 'Number of words: '.count(preg_split('/[^А-Яа-яЁё]+/u', $str));
    

1
投票
这是我想到的解决方案:

$var = "текст на кирилица с пет думи"; $array = explode(" ", $var); $i = 0; foreach($array as $item) { if(strlen($item) > 2) $i++ ; } echo $i; // will return 5
    

1
投票
正如

str_word_count

描述中所述

'word' 被定义为依赖于语言环境的字符串

致电前指定保加利亚语言环境

str_word_count



setlocale(LC_ALL, 'bg_BG'); echo str_word_count($content);

阅读更多关于

setlocale

这里
    


1
投票

发现的最佳解决方案是为字数统计功能提供字符列表:

$text = 'текст на кирилице and on english too'; $count = str_word_count($text, 0, 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'); echo $count; // => 7
    

0
投票
有一个简单而优雅的方法可以做到这一点,就是使用 transliterator_transliterate:

$str = "текст на кирилица"; 'Number of words: '.str_word_count(transliterator_transliterate('Any-Latin; Latin-ASCII;', $str)); //this returns 3
    
© www.soinside.com 2019 - 2024. All rights reserved.