y-nishimura のすべての投稿

サーバー移転

さくらサーバーから、Xserverに移転した。さくらサーバーは、HDDなのでWordPressの表示に結構時間かかっていたが、XserverはSSDで、さらにメモリも256GBあるので、表示が早くなって満足。移転の際にSSL有効化したままだと移転がうまく行かなかったので、さくらサーバーのSSLを全て無効化して、MySQLやWordPressのファイル移転させて、Xserver側でSSL有効化するとうまく行った。移転する際にPHPのconfig弄ったりとちょっと手間かかるが、ググればすぐ解決する。以下のサイトが参考になった。

https://sitemiru.com/2016/08/14/sakura-xserver/

Pythonで任意の表現を任意のディレクトリ内で一括検索

任意のディレクトリ内にあるtxtファイル全てを対象に任意の文字列を検索したい。
Terminal上で、grepすれば済む話だけど、検索したい文字列が大量にあって、個々の頻度も知りたい、、、と思ってスクリプトを書いた。

検索したい文字列を予め一行一表現で、txtファイルにまとめておいて、検索対象のディレクトリとは別に用意しておく。
結果は、タブ区切りでファイル名、文字列、頻度の順で出力。

以下、スクリプト

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys,os,re,glob

argvs = sys.argv
argc = len(argvs)

file_list = sorted(glob.glob(sys.argv[1] + '*.txt'))
with open(sys.argv[2] + ".txt", 'r') as DM:
	DMs = DM.read().splitlines()
	
fw = open(sys.argv[3] + ".txt", 'w')
fw.write("Filename" + "\t" + "DiscourseMarker" + "\t" + "Frequency" + "\n")

for filename in file_list:
	fn = filename.strip("files/"".txt")
	with open(filename,'r') as f:
		files = f.read()
		for DMss in DMs:
			fre = len(re.findall(r'(\b)' + DMss + r'(\b)', files, re.IGNORECASE))
			mydict = {}
			mydict[DMss] = fre
			for DMss in mydict:
				DMlist = DMss
				print(fn)
				print(mydict)
				fw.write(str(fn) + "\t" + str(DMlist) + "\t" + str(mydict[DMss]) + "\n")
fw.close()

もうちょっと簡単に書けそうな気もするが、、、動くからいいや。

もともとは、Discourse Markerのリストを作って、そのリスト内の表現の頻度をファイル別で知りたかった。
ので、出力の見出しもFilename、DiscourseMarkerとなっている。

Rで任意のディレクトリから任意の数だけファイルを抽出

任意のディレクトリ内にあるファイルから、ランダムに抽出したい数を指定して、その数だけファイルを抽出したい。そして抽出したファイルは、新しいディレクトリ内に入れたい。さらに、任意のディレクトリ内に複数の拡張子がある場合は、指定した拡張子のファイルのみランダマイズして指定した数だけ抽出したい。とりあえずRで作ってみた。

まずは、一度抽出したファイルは二度と抽出しないように、新しいディレクトリに「移動」させる方法

rand_files_mv <- function(foldername,extension,threshold){
	filename <- list.files(pattern=extension)
	chosen <- filename[sample(length(filename),threshold)]
	dir.create(foldername)
	currentdir <- getwd()
		for (i in chosen) {
			file.rename(from=paste(currentdir,"/",i,sep=""),to=paste(currentdir,"/",foldername,"/",i,sep=""))
		}
}

次に、一度抽出したファイルをもう一度抽出できるように、新しいディレクトリに「コピー」する方法

rand_files_cp <- function(foldername,extension,threshold){
	filename <- list.files(pattern=extension)
	chosen <- filename[sample(length(filename),threshold)]
	dir.create(foldername)
	currentdir <- getwd()
		for (i in chosen) {
			file.copy(from=paste(currentdir,"/",i,sep=""),to=paste(currentdir,"/",foldername,"/",i,sep=""))
		}
}

いずれも、引数は、以下の3つ。
1. 移動・コピー先のディレクトリー名(ダブルクォートで囲む)
2. ランダマイズ抽出したいファイルの拡張子
3. ランダマイズ抽出したいファイルの数