使用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

下一篇: How to implement Android Pull