3

私はperlスクリプトを機能させることに取り組んでいますが、これはかなり新しいことに注意してください。

これが私が達成しようとしていることです:.txtファイルを取り、ファイル内の各単語を数えるスクリプトを作成します。そして、それが数えられるとき、ファイルのトップ10の単語が私が数えた各単語の回数を表示するならば、単語はリストを作ります。

これがiveがこれまでに得たものです。iveはスクリプトに単語とそれらが出現する回数をカウントさせることができました。今、私はトップ10のリストを作成する必要がありますが、それをどこでどのように行うのか本当にわかりません。これは宿題なので、あなたが私のためにそれを解決することを望んでいない/期待していません。どこから始めればよいかを教えてください。

助けてくれてありがとう(事前に)


10月15日更新

わかりました、それはすべてを素晴らしいものに分類していますが..

今のところ、すべてを1行で印刷しているだけです。次のように印刷する必要があります:

4ワード
3次のワード
2次のワード

よくわかります。


私はそれを持っていると思います...私は思う:P


.....................................。

#! /usr/bin/perl

use utf8;


print ("Vilken fil?\n");
my $filen = @ARGV ? shift(@ARGV) : <STDIN>;
chomp $filen;

my %freq;

open my $DATA, $filen or die "Hittade inte den filen!";


while(<$DATA>) {

    s/[;:()".,!?]/ /gio;    
    foreach $word(split(' ', lc $_)) {  
    $freq{$word}++;                  
     }
}

@listing = (sort { $freq{$b} <=> $freq{$a} } keys %freq)[0..9];
foreach my $word (@listing )
    { print $freq{$word}." $word\n"; };
4

3 に答える 3

3

Perlソート関数のドキュメントを見てください:

http://perldoc.perl.org/functions/sort.html

これには、要素の順序を定義するためのコードのブロックを指定できるフォームがあります。これを使用して、単語のアルファベット順ではなく、頻度でリストを並べ替えることができます。

ドキュメントには次の例が含まれています。

# this sorts the %age hash by value instead of key
# using an in-line function
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;

このパターンを自分の問題に適応させることができるはずです。

おそらく、トップ10リストを取得する最も効率的な方法は、トップ10を追跡することです。カウントを計算するたびに、それがトップ10に属しているかどうかを確認し、含まれている場合は、正しい場所に挿入します。リストの一番下の項目をノックオフする可能性があります。そうすれば、辞書の大きさに関係なく、一度に10語の順序を追跡するだけで済みます。ただし、この追加の効率が必要かどうかはわかりません。

ちなみに、このような質問はいくつかの就職の面接で見たことがありますので、理解しておくのは良いことです。

于 2012-10-14T03:11:10.633 に答える
2

ネイトの答えに基づいて、スライスを使用して上位 10 個の要素を抽出できます。

@eldest = ( sort { $age{$b} <=> $age{$a} } キー %age)[0..9];

于 2012-10-14T08:20:34.043 に答える
-1

はぁ、あなたの問題の説明を読み終える頃には、それはある種の宿題だとわかっていました!:)

次のステップでは、%countハッシュをスキャンして、出現回数が最も多い単語を特定する必要があります。

最も単純な方法は、リストを10回スキャンすることです。毎回、カウントが最も高いものを見つけてトップ10リストに保存し、%countから削除します(または0に設定しても機能します)。

もっと野心的になりたい場合は、%countエントリを並べ替える並べ替え関数を実装すると、上位10個が一緒になります。

私のPerlはさびていますが、Perllibにはいくつかのソート関数があるかもしれません。一般に、ライブラリのリファレンスをざっと読んで、何が利用できるかを理解することは間違いなく価値があります。

于 2012-10-14T03:09:54.333 に答える