1

英語で使用されている上位 1000 語のテキスト ファイルのリストがあります。各行には、次のように最大 50 語のリストがあります。

the,stuff,is,thing,hi,bye,hello,a,stuffs
cool,free,awesome,the,pray,is,crime
など

そのファイルを入力として使用してコードを記述し、少なくとも 50 の異なるリストに一緒に表示される単語のペアのリストを含む出力ファイルを作成する必要があります。たとえば、上記の例では、THE & IS は一緒に 2 回表示されますが、他のすべてのペアは 1 回だけ表示されます。

考えられるすべての単語のペアを保存することはできないため、ブルートフォースはありません。

私はその言語を学ぼうとしていますが、この本の演習に行き詰まっています。助けてください。これに関するロジック、ガイダンス、またはコードは役に立ちます。

これは私がこれまでに持っているものです。それは意図したことをしませんが、私は立ち往生しています:

コード:

//open the file
$handle = fopen("list.txt", 'r');

$count = 0;
$is = 0;
while(!feof($handle)) {

    $line = fgets($handle); 

    $words = explode(',', $line);

    echo $count . "<br /><br />";
    print_r($words);
    foreach ($words as $word) {
        if ($word == "is") {
            $is++;
        }
    }
    echo "<br /><br />";

$count++;
}

echo "Is count: $is";

//close the file
fclose($handle);

$fp = fopen('output.txt', 'w');
fwrite($fp, "is count: " . $is);
fclose($fp);

これは私が思いついたものですが、肥大化しすぎていると思います:

計画:配列
の最初の値をチェックします 値を 配列$wordsのキーとしてストア ( )に 保存し、カウンター (行番号) をそのキーの値として保存し ます この時点で 1 になります各行に がある かどうかを確認します次に 、配列に少なくとも 50 個の値があるかのようにキーを使用し て値が入れられた場合は、続行 します。そうでない場合は、配列の次の値に移動し ます。50 個の値がある場合 は、次の値に移動し、同じことを行い、 両方のリストを比較します。 少なくとも 50 の場合に一致する値の数を確認する には、単語を出力ファイルに 追加します
$cur_word
$cur_word$compare


$cur_word
$compare$cur_word
$words




すべての単語でこのプロセスを繰り返します

4

1 に答える 1

0

この問題にはおそらく数百の解決策があります。これが1つです

$contents = file_get_contents("list.txt");

//assuming all words are separated by a , and converting new lines to word separators as well
$all_words = explode(",", str_replace("\n", ",", $contents)); 
$unique_words = array();    
foreach ($all_words as $word) {
    $unique_words[$word] = $word;
}

これにより、ファイル内のすべての一意の単語が配列で提供されます。

同じテクニックを使って単語を数えることもできます

$word_counts = array();
foreach ($all_words as $word) {
    if (array_key_exists($word, $word_counts)) {
        $word_counts[$word]++;
    } else {
        $word_counts[$word] = 1;
    }
}

その後、ループして結果を保存できます

$fp = fopen("output.txt", "w");
foreach ($word_counts as $word => $count) {
    fwrite($fp, $word . " occured " . $count . " times" . PHP_EOL);
}
fclose($fp);
于 2013-01-23T01:43:06.760 に答える