修正したバージョンに差し替え
青空文庫で公開されている圧縮zipファイルのダウンロードリンク(URL)を文字列として引数に指定すると ダウンロードして解凍、ルビなどのメタ情報を削除します。解凍したファイルは実行フォルダに保存され、ルビ処理後のファイルは実行フォルダ内に新規に作成されたNORUBYフォルダに保存されます。関数自体の返り値は、NORUBY ファルダと保存された加工ファイルへの相対パスです。
なお、MacやLinuxで実行した場合、処理の途中で文字コードをUTF-8に変換します。 第二引数に処理後のファイル名を指定することもできます。
#' see http://rmecab.jp/wiki/index.php?RMeCabFunctions#b1945a7c
#' @param url txtname
#'
Aozora <- function(url = NULL, txtname = NULL){
enc <- switch(.Platform$pkgType, "win.binary" = "CP932", "UTF-8")
if (is.null(url)) stop ("specify URL")
tmp <- unlist (strsplit (url, "/"))
tmp <- tmp [length (tmp)]
curDir <- getwd()
tmp <- paste(curDir, tmp, sep = "/")
download.file (url, tmp)
textF <- unzip (tmp)
unlink (tmp)
if(!file.exists (textF)) stop ("something wrong!")
if (is.null(txtname)) txtname <- paste(unlist(strsplit(basename (textF), ".txt$")))
if (txtname != "NORUBY") {
newDir <- paste(dirname (textF), "NORUBY", sep = "/")
if (! file.exists (newDir)) dir.create (newDir)
newFile <- paste (newDir, "/", txtname, "2.txt", sep = "")
con <- file(textF, 'r', encoding = "CP932" )
outfile <- file(newFile, 'w', encoding = enc)
flag <- 0;
reg1 <- enc2native ("\U005E\U5E95\U672C")
reg2 <- enc2native ("\U3010\U5165\U529B\U8005\U6CE8\U3011")
reg3 <- enc2native ("\UFF3B\UFF03\U005B\U005E\UFF3D\U005D\U002A\UFF3D")
reg4 <- enc2native ("\U300A\U005B\U005E\U300B\U005D\U002A\U300B")
reg5 <- enc2native ("\UFF5C")
while (length(input <- readLines(con, n=1, encoding = "CP932")) > 0){
if (grepl(reg1, input)) break ;
if (grepl(reg2, input)) break;
if (grepl("^------", input)) {
flag <- !flag
next;
}
if (!flag){
input <- gsub (reg3, "", input, perl = TRUE)
input <- gsub (reg4, "", input, perl = TRUE)
input <- gsub (reg5, "", input, perl = TRUE)
writeLines(input, con=outfile)
}
}
close(con); close(outfile)
return (newFile);
}
}
以下、旧記事
朝一の作業で必要になって泥縄で作成したが,これで間に合うだろうか
http://rpubs.com/ishida/lesson1
#USAGE:
## source ("Aozora.R")
## 1. arg URL, 2. arg outputfile name
## Aozora ("http://www.aozora.gr.jp/cards/000129/files/673_ruby_23254.zip", "Out") # カレントディレクトリに ./NORUBY/0ut.txtを生成
Aozora <- function(url = NULL, name = NULL){
if (is.null(url)) stop ("specify URL")
tmp <- unlist (strsplit (url, "/"))
tmp <- tmp [length (tmp)]
curDir <- getwd()
tmp <- paste(curDir, tmp, sep = "/")
download.file (url, tmp)
tmp <- unzip (tmp)
if(!file.exists (tmp)) stop ("something wrong!")
if (is.null(name)) name <- paste(unlist(strsplit(basename (tmp), ".txt$")))
if (name != "NORUBY") {
newDir <- paste(dirname (tmp), "NORUBY", sep = "/")
if (! file.exists (newDir)) dir.create (newDir)
newFile <- paste (newDir, "/", name, "2.txt", sep = "")
con <- file(tmp, 'r', encoding = "CP932" )
outfile <- file(newFile, 'w', encoding = "utf8")
flag <- 0;
while (length(input <- readLines(con, n=1, encoding = "CP932")) > 0){
if (grepl("^底本", input)) break ;
if (grepl("【入力者注】", input)) break;
if (grepl("^------", input)) {
flag <- !flag
next;
}
if (!flag){
input <- gsub ("[#[^]]*]", "", input, perl = TRUE)
input <- gsub ("《[^》]*》", "", input, perl = TRUE)
input <- gsub ("|", "", input, perl = TRUE)
writeLines(input, con=outfile)
}
}
close(con); close(outfile)
return (newFile);
}
}