Rを使用して、日本語のテキストをファイルに保存するWebページを削り取ろうとしています。最終的には、毎日何百ものページに取り組むために、これをスケーリングする必要があります。私はすでにPerlで実行可能なソリューションを持っていますが、複数言語間の切り替えの認知負荷を軽減するためにスクリプトをRに移行しようとしています。これまで私は成功していない。関連する質問はthis one on saving csv filesとthis one on writing Hebrew to a HTML fileと思われます。しかし、私はそこでの答えに基づいて解決策をまとめることに成功していません。編集:this question on UTF-8 output from R is also relevant but was not resolved.R:RCurlで掻き集めたWebページから「クリーン」UTF-8テキストを抽出
ページはヤフー日本の財務とこのように見える私のPerlコード。
use strict;
use HTML::Tree;
use LWP::Simple;
#use Encode;
use utf8;
binmode STDOUT, ":utf8";
my @arr_links =();
$arr_links[1] = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203";
$arr_links[2] = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7201";
foreach my $link (@arr_links){
$link =~ s/"//gi;
print("$link\n");
my $content = get($link);
my $tree = HTML::Tree->new();
$tree->parse($content);
my $bar = $tree->as_text;
open OUTFILE, ">>:utf8", join("","c:/", substr($link, -4),"_perl.txt") || die;
print OUTFILE $bar;
}
このPerlスクリプトは、オフラインを採掘して操作することができ、適切な漢字とかなで、下のスクリーンショットのように見えるCSVファイルを生成します。
なことのように私のRコードを、次のようになります。 Rスクリプトはちょうど与えられたPerlソリューションの正確な複製ではありません.HTMLを取り除いてテキストを残さないからです(this answerはRを使ってアプローチを提案しますが、この場合私にとってはうまくいかない)ループなどがありますが、意図は同じです。
require(RCurl)
require(XML)
links <- list()
links[1] <- "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203"
links[2] <- "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7201"
txt <- getURL(links, .encoding = "UTF-8")
Encoding(txt) <- "bytes"
write.table(txt, "c:/geturl_r.txt", quote = FALSE, row.names = FALSE, sep = "\t", fileEncoding = "UTF-8")
このRスクリプトは、次のスクリーンショットに示す出力を生成します。基本的にはごみです。
は、私は私がRでPerlのソリューションと同様の結果を生成することができますHTML、テキストやファイルのエンコーディングのいくつかの組み合わせが存在することを前提としていますが、私はそれを見つけることができません。私が掻き取ろうとしているHTMLページのヘッダーは、チャートセットがutf-8であり、getURL
コールとwrite.table
関数のエンコーディングをutf-8に設定したとしていますが、これだけでは十分ではありません。
質問 どのようにRを用いて、上記Webページをこすりし、「整形」日本語のテキストではなく、ラインノイズのようなものでCSVなどのテキストを保存することができますか?
編集:私はEncoding
のステップを省略するとどうなるかを示すためのスクリーンショットを追加しました。私はUnicodeコードのように見えますが、文字のグラフィック表示はできません。これはロケールに関連する問題かもしれませんが、まったく同じロケールでPerlスクリプトは有用な出力を提供します。だからこれはまだ困惑している。 マイセッション情報: Rバージョン2.15.0パッチ適用(2012-05-24 r59442) プラットフォーム:I386-PC-MINGW32/I386(32ビット) ロケール: 1 LC_COLLATE = ENGLISH_UNITED Kingdom.1252 2 LC_CTYPE = ENGLISH_UNITED Kingdom.1252
3 LC_MONETARY = ENGLISH_UNITED Kingdom.1252 4 LC_NUMERIC = C
5 LC_TIME = ENGLISH_UNITED王国。1252の
取り付けられたベースパッケージ: 1統計グラフィックgrDevicesのutilsのデータセットのメソッドベースは
多分あなたは 'エンコーディング(txt)< - "バイト "'を必要とせず、私の環境でうまく動作します。 – kohske
@ kohske、この提案に感謝します。私は 'Encoding()'なしで別の試みをしました。残念ながら私はうまくいかなかった。 – SlowLearner