MATLAB答案:日本語の質問に回答してくれているのはどなた?
MATLAB回答に回答くださっている皆様,本当にありがとうございます。」
こんには,井上です。最近オンラ邮箱ンミ邮箱ティング用に遅ればせながら女優ラ邮箱トを導入しました。思いのほかまぶしいので,ここぞ!というときに活用しようと思います。
さて,MATLAB関連の質問をするならMATLAB答案ですが,ここではどんな人が回答してくれているんだろう。MATLAB回答全体のランキングは用意されているんですが,日本語の質問に絞ると··?
ということで日本語の質問に応えてくれている方を探し出し,推特@JPMATLABAnswersからこっそり感謝を伝えてみることにしました。今回はこの全工程をご紹介いたします。見どころは推特机器人化する為のThingSpeakxGitHub的行为の連携です!コドはGitHub:who-are-the-contributors-on-MATLAB-answers-in-japaneseに公開しています。
目次
まずは現状確認
MATLAB回答のUIを確認します。
貢献度ランキング
まずこれ,コントリビュタリスト。
週間,月間,年間の貢献度ランキングがあります。なみにこの“評価”という数字は
- 自分の回答が採用される:4ポe @ e @ント
- 自分の回答に投票される:2ポe @ e @ント
- 自分の質問に投票される:1ポe @ e @ント
という形で数値化されてまして,ポイントがたまると質問,回答,およびコメントの編集や削除などもできるようになります。詳細はこらにあります。
日本語への回答者は?
残念ながら上のランキングでは日本語の質問に回答してくれているかどうかを判別することはできません。そもそも日本語と英語両方に回答している場合考えると日本語フィルタ-は現実的ではないですね。
質問ペジを調査する
質問ペジを見てみます。こらには日本語フィルタがありますね。そして MathWorks Support フィルタ。これは公式サポートチームが FAQ として公開しているものをさします。それ以外のポストはすべて ”コミュニティ” になります。
各ページには〇〇さんによって質問された,◇◇さんが回答したなどの情報があるので,これを吸い上げればいいかもしれません。
それでどうしたか?
- 一定期間内に更新された日本語の質問ペジを抽出
- それらに関わるアカウント名を集計
- ランキング上位者を見ける
- 推特で呟く
- GitHub Actionsで定期実行
こんな感じですね。例えば週間ランキングであれば,過去1週間に更新のあった(すなわち回答やコメントが付いた)ページを対象にすればいいですね。
例えば”テキストマのソスを見ると
href = " / matlabcentral /档案/作者/ 2229289”>圭佑三浦< / >
href = " / matlabcentral /档案/作者/ 14080697”>对剧中田口< / >
と三浦圭佑さんと田口美撒さんの名前が出てきます。これを正規表現を使って抽出できそうです。まずは1から順番に。
1.一定期間内に更新された日本語の質問ペジを抽出
日本語·コミュニティの2のフィルタを適用したペジを開きます。"このビュを購読"するとRSSフィドが確認できます. "RSS(RDF Site Summary/Rich Site Summary)はデータ形式の一種で、Webサイト内の新着ページや更新ページのタイトルや URL、更新日時、要約などを一覧形式で取得できるので便利。
XML形式になっていますので,Xmlread関数を使います。
xDoc = xmlread([“https://jp.mathworks.com/matlabcentral/answers”...
' /问题吗?语言+ desc&status = = ja&format = atom&sort =更新回答”...
“和页面= 1”]);
MATLAB回答の場合は1ペジあたり50個しか情報が含まれないので,页面= 1とペジ番号を振って過去にさかのぼっていくことになります。欲しい情報だけを取り出していきますが,XML形式は中身の確認が面倒・・欲しい情報がどこに隠れているかを地道に探っていきます。
%まず各投稿は<入口>入口>
allListitems = xDoc.getElementsByTagName(“入口”);
%ア@テム数だけ配列を確保
title = strings(alllistitem . getlength,1);%タ@トル
url =字符串(alllistitem . getlength,1);%的URL
作者=字符串(alllistitem . getlength,1);% 投稿者
updated = strings(alllistitem . getlength,1);% 最終更新日時
%各アテムから标题,url,作者情報を出します。
为k = 0: alllistitem . getlength -1
thisistitem = alllistitem .item(k);
获取标题元素
thisList = thisistitem . getelementsbytagname (“标题”);
thisElement = thisList.item(0);
文本在第一个子节点中。
title(k+1) = string(thisElement.getFirstChild.getData);
获取链接元素
thisList = thisistitem . getelementsbytagname (“链接”);
thisElement = thisList.item(0);
url是属性之一
url(k+1) = string(thisElement.getAttributes.item(0));
获取author元素
thisList = thisistitem . getelementsbytagname (“作者”);
thisElement = thisList.item(0);
childNodes = thisElement.getChildNodes;
author(k+1) = string(childNodes.item(1).getFirstChild.getData);
获取2020-04-18T16:40:12Z
thisList = thisistitem . getelementsbytagname (“更新”);
thisElement = thisList.item(0);
updated(k+1) = string(thisElement.getFirstChild.getData);
结束
%日時デタはdatetime型に変換しておきます。
Updated_at = datetime(已更新,“InputFormat”,“uuuu-MM-dd 'HH: mm: ss 'Z”);
updated_at。格式=“uuuu-MM-dd HH: mm: ss”;
% urlは以下の形になっているので,
% href = " //www.tatmou.com/matlabcentral/answers/477845 -波金宝app德-模型- 360”
url = extractBetween(url," href = " " ",”“”“);% url部分だけ取得
entryID = double(extractBetween(url,“答案/”,“-”));%投稿idを別途確保
ここまでの情報をテブルにまとめると以下の通り。
Pagelist =时间表(标题,url,作者,“RowTimes”updated_at,...
“VariableNames”, {“标题”,“url”,“作者”})
苹果手机感じです。
次は各ペジでに関連するユザアカウントを探してくる作業を行います。
2.それらに関わるアカウント名を集計
例として1目の質問を見てみましょう。
名前は
href =“/ matlabcentral /档案/作者/ 14080697”>对剧中田口< / >
と出ているはずなので,正規表現は
正则表达式(txt,“href = " / matlabcentral /档案/作者/ (?:\ d +?)”>([^<].+?) >”,“令牌”);
で行けるはず。
Url = pagelist.urls(1)
TXT = webread(url);
Users_on_post = regexp(txt,“href = " / matlabcentral /档案/作者/ (?:\ d +?)”>([^<].+?) >”,“令牌”);
字符串(users_on_post)”
苹果手机感じ。2回登場していますが、これは独特的関数を噛ましておけば好でしょう。
上で抽出したページに対して回すことで,最近アップデートのあった日本語ページに登場するアカウント名を取り出します。
Item2check =页面列表;
Users = [];
为2 = 1:高度(item2check)
Url = item2check.urls(ii);
TXT = webread(url);
% href= " /matlabcentral/profile/authors/6704456″>上野特sushi .
Users_on_post = regexp(txt,“href = " / matlabcentral /档案/作者/ (?:\ d +?)”>([^<].+?) >”,“令牌”);
Users = [Users, string(users_on_post)];
结束
%唯一帐户
昵称=唯一的(用户);
Idx = nicknames ==“MathWorks支金宝app援小组”;%サポトチムは除いておきます。
别名(idx) = [];
昵称(1:5)
取れていますね。
3.ランキング上位者を見ける
例えば週間ランキングペジのurlは
baseURL =“https://jp.mathworks.com/matlabcentral/answers/contributors/?filter=week”;
こんな様子です。これも各ペジ50人の表示なので,それ以上の情報をとる場合は页を使います。
試しに上位250人を抽出するならこんな感じ。HTMLファルをいじるならWebread関数からのhtmlTree関数。これは文本分析工具箱が必要ですが,要素を抽出するのに便利です。がんばれば正規表現で対応できそうですけども。
この辺はHTMLのソースとにらめっこしながら欲しい情報がどこにあるか調べながらコードに落とし込みます。
Perpage = 50;%ペジ当たりの人数
Pages = 1;% 5ペジ確認します(合計250人)
rank = 0 (perpage*pages,1);
Names =字符串(perpage*pages,1);
为2 = 1:页面
url = baseURL +“和页面= "+ 2;
A = webread(url);
b = htmlTree(a);
c = findElement(b,“道明:第一个孩子”);
为jj = 1: perpage
Index = (ii-1)*perpage+jj;
% 順位
(c(jj),“div:第一个孩子”);
rank (index) = extractHTMLText(tmp);
%アカウント名
(c(jj)," h4 > > span ");
names(index) = extractHTMLText(tmp);
结束
结束
的名字
錚々たる面子です。
この中から,上で探し出してきた日本語の質問に関連するユザアカウントをIsmember関数で抽出します。
Idx = ismember(名称,别名);
Dataset = table(rank (idx),names(idx),“VariableNames”, {“排名”,“昵称”})
これは実行時の結果ですので,これを読まれている時点ではまた違う結果になっていると思います。
あとは推特への投稿文を構成して,後は呟くだけ!改行は换行符が使えますので,こんな感じで文章を作ってみます。
状态=“MATLABのQ&Aサト:MATLAB答案”+换行;
地位=地位+“日本語質問に回答するTopアカウント(每周)”+ newline + newline;
为2 = 1: min(高度(数据集),5)
地位=地位+“-”+ dataset.nickname(ii) +“さん”+换行;
结束
Status = Status +换行符+“ありがとうございます!”+换行;
地位=地位+"詳細:"+ baseURL;
disp(状态);
できあがり。
4.推特で呟く
Twitterに投稿するにはTwitter APIの取得が必要でその審査がちょっとハードル高い・・と心配された方。ご安心ください。ThingSpeakではThingTweetという機能を提供していて,Twitterアカウントとリンクすれば,ThingSpeak経由推ですることができます。TwitterアカウントをリンクしてAPI密钥を取得します。
もちろんできることは文字列を呟くだけ・・なのでTwitter APIと比較するとかなり機能は限定されますが,今回の用途には十分です。
コドはこんな感じ。
tturl =“https://api.thingspeak.com/apps/thingtweet/1/statuses/update”;
Api_key = getenv(“THINGTWEETAPIKEY”);%隠しておきます(適宜変更してください)
选项= weboptions(“MediaType”,“应用程序/ x-www-form-urlencoded”);
选项。时间out = 10;
webwrite (tturl“api_key”api_key,“状态”,状态,选项);
ThingSpeakを使ったTwitter Botの作り方にいてはQiitaのMATLAB回答の新着質問をお知らせする推特机器人(由ThingSpeak提供支持)も参考にしてください。
5.GitHub Actionsで定期実行
さて,以上の処理(コ,ド全体はtweetRanking_JP.mを見てください)を定期実行させるのに,今回はGitHub Actionを使ってみます。ThingSpeak上で MATLAB コードを実行できますし、TimeControl 機能があるので一定時間毎に実行させる設定は可能です。
ただ,ここはコードもGitHubに公開していることですし,せっかくなので(?)GitHub行动を使ってみます。MATLAB的行为が用意されているのでmatlabラ。API_Keyも秘密機能で隠ぺい化できますし,コドも公開できるメリットは大きいですね。
GitHub行动の設定はレポジトリ内の.github /工作流にymlファイルを設定するだけ。
运行MATLAB在github上运行的脚本
:
日程安排:
- cron:' 0 23 * * 0 '
工作:
我的工作:
运行MATLAB脚本
上运行:ubuntu-latest
步骤:
- name:退房存储库
用途:行动/ checkout@v2
—name:设置MATLAB
用途:matlab-actions / setup-matlab@v1
—name:执行脚本
用途:matlab-actions / run-command@v1
env:
THINGTWEETAPIKEY:${{秘密。THINGTWEETAPIKEY}}
:
命令:tweetRanking_JP
こんな感じです。cron:“23 * * 0”のおまじないはUTC 23:00(日曜日)に実行してねという設定です。これは日本時間(JST)だと月曜日の朝8時ですね。
ポイントとしてはAPI密匙は実行時に環境変数として設定することで,MATLABコードからも参照できるようになっています。
まとめ
毎週月曜日の朝8時に,ここで紹介したコドが実行され@MATLABAnswersから感謝の推特ができるようになりました。MATLAB的答案に回答くださっている皆様、本当にありがとうございます。
また,GitHub行动はMATLABのライセンス不要で使える=ややこしい設定不要なのでかなりお手軽ですので遊んでみてください。こんなことに使っているよ!という方,どんなGitHub x MATLAB芸を構築されているのか,ぜひ教えてください。
- 类别:
- MATLAB的答案,
- 社会媒体,
- ユザ紹介
评论
如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。