12

私はこのテキストを持っています:

$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 の問題が解決されるわけではありません。パラメータとして str_word_count にUTF8 セット全体を書き込むことができません。

だから私はこれを作成しました:

$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 ?されません。Mike と how は別の単語として扱われません。

これは str_word_count solution: ではカバーされていませんKISMEN @here #there。アットマークとダッシュ記号は考慮されません。

これはカバーされませんJ.J.Johanson。言葉ではありますが、JJJohanson

質問、感嘆符は単語から削除する必要があります。

サポートstr_word_countで動作を取得するより良い方法はありますか? UTF8この$text質問の上部にある は、私にとって参考になります。

(答えにフィドルを提供できるとよいでしょう)

4

2 に答える 2

7

単語数の概念が存在しないか、一部の言語では難しすぎるため、単語数の完全な解決策はありません。UTF8の有無は問いません。

日本語と中国語は宇宙のトークニズム言語ではありません。静的な単語リストさえありません。動詞と名詞を見つける前に、文全体を読む必要があります。

複数の言語をサポートする場合は、言語固有のトークナイザー エンジンが必要になります。詳細については、フルテキスト インデックス、トークナイザー、CJK トークナイザー、CJK アナライザーを調べてください。

限られた選択された言語のみをサポートしたい場合は、より多くのケースで正規表現パターンを改善してください。

于 2014-02-18T06:13:57.283 に答える
1

で正しい軌道に乗っていると思いますが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

于 2014-02-11T21:17:51.190 に答える