1

私は次の質問phpを使用しました:特定の文字列内の単語のインスタンスを並べ替えてカウントする

DB にテキスト フィールドのあるテーブルがあり、そのフィールド内の単語を分析したいのですが、結果を組み合わせる必要があります。

ID | Text Field
1  | happy beautiful happy lines pear gin happy lines rock happy lines pear 
2  | happy lines pear gin happy lines rock happy lines pear 

私は今、このような配列を持っています(ただし、行ごとです)

行 1

Array (
    [happy] => 4
    [beautiful] => 1
    [lines] => 3
    [pear] => 2
    [gin] => 1
    [rock] => 1 )

行 2

Array (
    [happy] => 4
    [lines] => 3
    [pear] => 2
    [gin] => 1
    [rock] => 1 )

結果を結合するためにすべての行に対してこれを行うにはどうすればよいですか - DBには30000行のテキストがあります

予想された結果:

Array (
    [happy] => 8
    [beautiful] => 1
    [lines] => 6
    [pear] => 4
    [gin] => 2
    [rock] => 2 )
4

5 に答える 5

2

私はあなたのデータベースを手元に持っていないので、配列をステップスルーすることによってデモンストレーションします:

[ghoti@pc ~]$ cat doit.php
#!/usr/local/bin/php
<?php

$a=array(
  '1' => "happy beautiful happy lines pear gin happy lines rock happy lines pear",
  '2' => "happy lines pear gin happy lines rock happy lines pear",
  '3' => "happy rock pear happy happy happy",
);

$wordlist=array();

foreach ($a as $index => $line) {
  foreach (explode(" ", $line) as $word) {
    $wordlist[$word]++;
  }
}

print_r($wordlist);

[ghoti@pc ~]$ ./doit.php
Array
(
    [happy] => 11
    [beautiful] => 1
    [lines] => 6
    [pear] => 5
    [gin] => 2
    [rock] => 3
)
[ghoti@pc ~]$ 

これをユースケースに当てはめるにはforeach()、テーブルをステップスルーするwhileループに置き換えます。

$sql = "SELECT id,wordlist FROM yadda";
$result = db_query($sql);
while ($row = db_fetch_row($result)) {
  ...
}

使用しているデータベースサーバーがわからないため、適切であることがわかっている具体的な例を提供することはできません。

于 2012-05-01T18:43:17.290 に答える
2

DB から各行を取得するたびに、現在の合計を維持します

$total = array();
foreach($row as $word=>val){
    if(!isset($totals[$word])) $totals[$word] = 0;
    $totals[$word] += $val;
}
于 2012-05-01T18:16:21.447 に答える
1

SQL を使用して単語数を直接数えることができます。この以前の回答を見てください:

SQL を使用してテキスト フィールドの単語数統計を判断する

于 2012-05-01T18:27:31.313 に答える
1

私はこれを行います:wordsと呼ばれる新しいテーブルを作成し、データベースから各行を引き出し、それをループして文字列を分解し、データに各単語を挿入します。オプションで、メインテーブルIDなどのデータを保存して、取得できるようにしますコンテキストまたは単語に関するほとんどの追加統計。多くの行と大規模なデータセットを扱う場合、これは最良の選択肢ではない

次に、SQLを使用してカウントなどを構築できます

于 2012-05-01T18:17:16.813 に答える
1

PHP 配列をマップとして使用できます。したがって、各行のデータを取得し、キーとして単語の単一の配列マップを維持し、そのカウントを値として維持するだけです。キーが存在することがわかるたびに、カウントに追加するか、対応するカウントで新しいキーを追加します。

$grandtotal = array();
foreach($row as $key=>$val) {
 if(array_key_exists($key, $grandtotal)) {
  $grandtotal[$key] += $val;
 }
 else {
  $grandtotal[$key] = $val;
 }
}
于 2012-05-01T18:34:32.370 に答える