使用str
我有这样的文字:
$text = "Başka, küskün otomobil kaçtı buraya küskün otomobil neden kaçtı
kaçtı buraya, oraya KISMEN @here #there J.J.Johanson 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 ?
迈克和如何不会被视为不同的话。
这在str_word_count解决方案中没有涉及: KISMEN @here #there
。 在和破折号并不会被考虑在内。
这不包括JJJohanson
。 虽然它是一个字,但它将被视为JJJohanson
问题,感叹号应该从文字中删除。
有没有更好的方式来获得支持UTF8
str_word_count
行为? 在这个问题的顶部存在的$text
是我的参考。
(如果你可以提供你的答案小提琴会更好)
你永远不会有一个完美的字数统计解决方案,因为在某些语言中字数统计概念不存在或太难。 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
链接地址: http://www.djcxy.com/p/59325.html上一篇: Using str