Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

全対象URLをローカルで機械学習し、質問する前に選別する #204

Draft
wants to merge 14 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 54 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,8 @@ clean:
rm -f www-data/index.json

###
### crawler
### 一番最初にwgetでクローリングをする
###

.PHONY: wget
wget:
# csv内の全ドメインをwww-data以下にミラーリングする
Expand All @@ -38,27 +37,70 @@ endif
cat ../tmp/urls.txt |xargs -I{} wget --force-directories --no-check-certificate {}
cd -

# www-data内の巨大なファイルを削除する
###
### wgetで収集したwww-data内の巨大なファイルを削除する
###
.PHONY: remove-large-files
remove-large-files:
./crawler/remove-large-files.sh

# www-data内のHTMLとPDFをgrepで検索する
# tmp/grep_コロナ.txt.tmp を生成する
###
### wgetで収集したwww-data内のHTMLとPDFをgrepで検索しgrep_コロナ.txt.tmpを生成する
###
.PHONY: grep
grep: tmp/grep_コロナ.txt.tmp

tmp/grep_コロナ.txt.tmp: remove-large-files
./crawler/grep.sh

# grep結果を集計する
# 複数のキーワードでgrepしているので重複があったりするのをuniqする
# tmp/results.txt, tmp/urls.txt を生成する
.PHONY: aggregate
aggregate: tmp/results.txt
###
### grepの結果を集計する
### 複数のキーワードでgrepしているので重複があったりするのをuniqしgrep_aggregate.txtを生成する
###
.PHONY: grep-aggregate
aggregate: tmp/grep_aggregate.txt

tmp/grep_aggregate.txt: grep
./crawler/grep-aggregate.sh

###
### grepの結果からURLのみを収集しmd5を計算しurls-md5.csvを生成する
###
.PHONY: urls-md5
urls-md5: data/urls-md5.csv

data/urls-md5.csv: tmp/grep_aggregate.txt
./crawler/urls-md5.sh

###
### URLの一覧すべてをwgetし機械学習できるテキストファイル形式にする
###
data/eval.csv: data/urls-md5.csv
./auto-ml/urls-md5-csv-to-eval-csv.sh

###
### これまでの回答を使って機械学習の訓練をしてモデルをつくる
###
data/model.pkl:
cd scripts-ml
sudo docker run --rm -v $(pwd)/../data:/data covid19surveyorml:latest -v train /data/auto-ml-vote.csv /data/model.pkl
cd -


tmp/results.txt: grep
./crawler/aggregate.sh
###
### URLの一覧から生成したテキストファイルを機械学習で評価し結果を出力する
###
data/eval-result.csv: data/eval.csv
cd scripts-ml
sudo docker run --rm -v $(pwd)/../data:/data covid19surveyorml:latest eval /data/model.pkl --input_file /data/eval.csv > ../data/eval-result.csv
cd -

###
### 機械学習で評価した結果とURLのmd5を対応付けたファイルを生成する
###
data/eval-results-md5.csv: tmp/eval-result.csv
cat tmp/eval.csv|cut -d',' -f 1 > tmp/md5.csv
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tmp/eval.csv というファイルパスは意図通りですか?
他の eval.csvdata/eval.csv となっているようですが。

paste -d ' ' tmp/md5.csv tmp/eval-result.csv > data/eval-results-md5.csv

# www-data/index.html, www-data/index.jsonを生成する
.PHONY: publish
Expand Down
4 changes: 2 additions & 2 deletions auto-ml/reduce-csv-to-auto-ml-csv.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ main() {
orgname=`echo $line| cut -d',' -f 1`
prefname=`echo $line| cut -d',' -f 2`
url=`echo $line| cut -d',' -f 3`
title=`echo $line| cut -d',' -f 4|sed s/\"/ /g`
desc=`echo $line| cut -d',' -f 5|sed s/\"/ /g`
title=`echo $line| cut -d',' -f 4|sed "s/\"/ /g"`
desc=`echo $line| cut -d',' -f 5|sed "s/\"/ /g"`
takano32 marked this conversation as resolved.
Show resolved Hide resolved
echo "$title $desc, covid19_help"
done < reduce.csv
}
Expand Down
4 changes: 2 additions & 2 deletions auto-ml/url-vote-reduce-for-auto-ml.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ get_row_by_url_with_label() {
if [ $? -ne 0 ]; then
return 1
fi
title=$(get_title_by_res "$res")
desc=$(get_desc_by_res "$res" | remove_newline_and_comma)
title=$(get_title_by_res "$res"|sed "s/\"/ /g")
desc=$(get_desc_by_res "$res" | remove_newline_and_comma | sed "s/\"/ /g")
takano32 marked this conversation as resolved.
Show resolved Hide resolved
echo "$title $desc, $label"
}

Expand Down
36 changes: 36 additions & 0 deletions auto-ml/urls-md5-csv-to-eval-csv.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash
set -e


# 依存lib
. ./lib/url-helper.sh
. ./lib/string-helper.sh

get_text_by_url() {
set +e
url=$1
res=$(wget -q -O - --tries=1 --timeout=5 --dns-timeout=5 --connect-timeout=5 --read-timeout=5 $url)
takano32 marked this conversation as resolved.
Show resolved Hide resolved
if [ $? -ne 0 ]; then
return 1
fi
title=$(get_title_by_res "$res"|sed "s/\"/ /g")
desc=$(get_desc_by_res "$res" | remove_newline_and_comma | sed "s/\"/ /g")
set -e
echo "$title $desc"
}


echo "" > ./data/eval.csv
while read line;do
echo $line
md5=$(echo $line|cut -d',' -f 1)
url=$(echo $line|cut -d',' -f 2)
if [[ $url == "" ]]; then
continue
fi
text=$(get_text_by_url $url)
if [[ $text == "" ]]; then
continue
fi
echo "$md5,$text" >> ./data/eval.csv
done < ./data/urls-md5.csv
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

urls-md5.csvにある4万件のURLをすべてwgetして、テキストを抽出して、機械学習できるcsvに整える

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

入力データの urls-md5.csv の最後のほうが壊れているように見えるのは既出でしたっけ。

capt_20200427_221313_00

この PR に限った話ではないですが、各 .csv の各列が何を示しているか分かる情報が無いとコードレビューにも少し支障をきたすかな、というお気持ちがあります。

たとえば .csv であれば1行目に見出しとして各列の意味情報を入れておく(その上で .csv を読み取るプログラムは1行目の読み込みはスキップする)と分かりやすいです。このファイルの場合は hash,url という構造なのだな、ということは「雰囲気で」分かるのですが。

7 changes: 7 additions & 0 deletions crawler/grep-aggregate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash
set -e

# ファイルを結合して一つにまとめる
# ソートする
# 重複を取り除く
cat ./tmp/grep_コロナ_*.txt.tmp | sort | uniq > ./tmp/grep_aggregate.txt
10 changes: 3 additions & 7 deletions crawler/aggregate.sh → crawler/urls-md5.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,9 @@ set -e
# 依存lib
. ./lib/url-helper.sh

# ファイルを結合して一つにまとめる
# ソートする
# 重複を取り除く
cat ./tmp/grep_コロナ_*.txt.tmp | sort | uniq > ./tmp/results.txt

# result.txtからURLのみを抜き出す
urls=$(cat ./tmp/results.txt | cut -d':' -f 1 | sed -z 's/\.\/www-data\///g')
urls=$(cat ./tmp/grep-aggregate.txt | cut -d':' -f 1 | sed -z 's/\.\/www-data\///g')
Comment on lines 20 to +21
Copy link
Collaborator

@kobake kobake Apr 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今回の変更で tmp/results.txttmp/grep-aggregate.txt にリネームされたという解釈で合ってますか?
解釈が合っている前提でコメントすると、

  • # result.txtからURLのみを抜き出す というコメント文も書き換えてほしいです。(要望)
  • tmp/grep-aggregate.txt というファイル自体はどこから出現する(生成される)ものなのでしょうか?(質問)
  • .dockerignore ファイル内に書かれている /result.txt という行も追随して変更しなくて大丈夫ですか?(疑問)


echo "" > ./tmp/urls.txt

Expand All @@ -34,7 +30,7 @@ done
# sortしてuniqする
sort < ./tmp/urls.txt | uniq > ./tmp/urls-uniq.txt

echo "" > ./urls-md5.csv
echo "" > ./data/urls-md5.csv

for domain_and_path in `cat ./tmp/urls-uniq.txt`; do
# domain=example.com
Expand All @@ -51,5 +47,5 @@ for domain_and_path in `cat ./tmp/urls-uniq.txt`; do
# url=https://example.com/foo/bar.html
url="$schema//$domain/$path"
md5=`get_md5_by_url $url`
echo "$md5,$url" >> ./urls-md5.csv
echo "$md5,$url" >> ./data/urls-md5.csv
done
Loading