-1

Linuxデスクトップ環境でキーワードに基づいてテキストマイニングを行うアプリケーションを構築しています。私の目標は、wget を使用して Wordpress サイトのリストから Web ページをダウンロードし、ページをディスクに保存してから、さらに処理するために各記事を分離することです。アイデアは、特定の単語の頻度に基づいて個々の記事をランク付けできるようにすることです。Wordpress ブログの記事は、次の規則に従う傾向があります。

 <article></article> 

間に実際の書き込みがあります。これまでのところ、次のような perl コードを思いつきました。

  $site = "somepage.somedomain"; #can be fed from a database later
  $outfile = "out1.txt"; #can be incremented as we go along
  $wgcommand = "wget --output-document $outfile $site";
  system($wgcommand);

  open SITEIN, '<', $outfile;
  @sitebodyarr = <SITEIN>;
  close SITEIN;

  $pagescaler = join('', @sitebodyarr); #let us parse the page.

  #this is where I have trouble. the though is to look for a mated pair of tags.
  #word press documents are stored between <article> and </article>

  $article =~ m/<article>*<\/article>/$pagescaler/g;

  #I put the /g flag there, but it doesn't seem to get me
  #what I want from the string - *ALL* of the articles one-by-one.

これを html ドキュメントから返された記事タグのペアのすべてのセットに一致させることについて何か考えはありますか?

正規表現が不可能な場合、次に考えることは、配列全体を順次処理し、パターンをキャッチすることです

   $line =~m/<article>/

次に、記事の内容を保持する文字列変数を開始します。パターンをキャッチするまで、この変数を連結し続けます

   $line =~m/<\/article>/

次に、記事を含む文字列をデータベースまたはディスクに保存し、@sitebodyarr の終わりまで繰り返します。しかし、可能であれば、ワンライナーの正規表現が本当に欲しいです。もしそうなら、誰かが私にそれがどのように見えるかを見せてもらえますか?

4

2 に答える 2

1

==>これを html ドキュメントから返された記事タグのペアのすべてのセットに一致させることについて何か考えはありますか?

以下のコードは、記事が HTML ページに表示される回数を示します。

   #!/usr/bin/perl
    open $html_file_handle, "< $html_file";
    while(my $line=<$html_file_handle>) {
        if($line =~ /<article>(.+?)<\/article>/) {
            $counter_hash{$1}++;
        }
    }   
    foreach $article (keys %counter_hash) {
        print "$article  ==> $counter_hash{$article}\n";
    }
于 2013-10-27T03:39:22.590 に答える