Matlabユザコミュニティ

MATLAB & 金宝appSimulinkユ,ザ,コミュニティ,向け日本語ブログ

MATLAB答案:日本語の質問に回答してくれているのはどなた?

MATLAB回答に回答くださっている皆様,本当にありがとうございます。」
こんには,井上です。最近オンラ▪▪ンミ▪▪ティング用に遅ればせながら女優ラ▪▪トを導入しました。思いのほかまぶしいので,ここぞ!というときに活用しようと思います。

さて,MATLAB関連の質問をするならMATLAB答案ですが,ここではどんな人が回答してくれているんだろう。MATLAB答案全体のランキングは用意されているんですが,日本語の質問に絞ると··?
ということで日本語の質問に応えてくれている方を探し出し,Twitter@JPMATLABAnswersからこっそり感謝を伝えてみることにしました。今回はこの全工程をご紹介いたします。見どころは推特机器人化する為のThingSpeakxGitHub的行为の連携です!コ,ドはGitHub:who-are-the-contributors-on-MATLAB-answers-in-japaneseに公開しています。

疝婴儿さんとAtsushi上野さんには以前博客にも登場して頂いてますね!


まずは現状確認

MATLAB答案のUIを確認します。

貢献度ランキング

キャプチャ.png
週間,月間,年間の貢献度ランキングがあります。なみにこの“評価”という数字は
  • 自分の回答が採用される:4ポescント
  • 自分の回答に投票される:2ポescント
  • 自分の質問に投票される:1ポescント
という形で数値化されてまして,ポイントがたまると質問,回答,およびコメントの編集や削除などもできるようになります。詳細はこらにあります。

日本語への回答者は?

残念ながら上のランキングでは日本語の質問に回答してくれているかどうかを判別することはできません。そもそも日本語と英語両方に回答している場合考えると日本語フィルタ-は現実的ではないですね。

質問ペ,ジを調査する

質問ペ,ジを見てみます。こらには日本語フィルタがありますね。そして MathWorks Support フィルタ。これは公式サポートチームが FAQ として公開しているものをさします。それ以外のポストはすべて ”コミュニティ” になります。
キャプチャ.png
各ページには〇〇さんによって質問された,◇◇さんが回答したなどの情報があるので,これを吸い上げればいいかもしれません。


それでどうしたか?

  1. 一定期間内に更新された日本語の質問ペ,ジを抽出
  2. それらに関わるアカウント名を集計
  3. ランキング上位者を見ける
  4. 推特で呟く
  5. GitHub Actionsで定期実行
こんな感じですね。例えば週間ランキングであれば,過去1週間に更新のあった(すなわち回答やコメントが付いた)ページを対象にすればいいですね。
href = " / matlabcentral /档案/作者/ 2229289”>圭佑三浦< / >
href = " / matlabcentral /档案/作者/ 14080697”>对剧中田口< / >
と三浦圭佑さんと田口美佐さんの名前が出てきます。これを正規表現を使って抽出できそうです。まずは1から順番に。

1.一定期間内に更新された日本語の質問ペ,ジを抽出

日本語·コミュニティの2のフィルタを適用したペジを開きます。“このビュ,を購読”するとRSSフィ,ドが確認できます。RSS(RDF Site Summary/Rich Site Summary)はデータ形式の一種で、Webサイト内の新着ページや更新ページのタイトルや URL、更新日時、要約などを一覧形式で取得できるので便利。
キャプチャ.png
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(“入口”);
%アescテム数だけ配列を確保
title = strings(allListitems.getLength,1);%タescトル
url = strings(allListitems.getLength,1);%的URL
author = strings(allListitems.getLength,1);% 投稿者
updated = strings(allListitems.getLength,1);% 最終更新日時
标题,url,作者情報を出します。
k = 0:allListitems.getLength-1
thistitem = alllistitem .item(k);
获取title元素
thisList = thisistitem . getelementsbytagname (“标题”);
thisElement = thisList.item(0);
文本在第一个子节点中。
title(k+1) = string(thisElement.getFirstChild.getData);
获取link元素
thisList = thisistitem . getelementsbytagname (“链接”);
thisElement = thisList.item(0);
url是属性之一
url(k+1) = string(thisElement.getAttributes.item(0));
获取作者元素
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”“作者”})
pagelist =50×3的时间表
时间 标题 url 作者
1 2022-04-18 09:34:24 “公交のデータを算出しているサブシステム以外のサブシステムでデータ書き換えをする方法をご教示いただきたい。” “//www.tatmou.com/matlabcentral/answers/1698985-bus” “利元河合”
2 2022-04-18 07:27:38 “OpenPoseを用いた深層学習を使用した体の姿勢の推定の例で画像ではなく,動画ファイルにおける人の姿勢の推定を行う方法について” “//www.tatmou.com/matlabcentral/answers/1696285-openpose” “WH”
3. 2022-04-15 05:40:26 “yyaxis関数使用時にy軸の色が変えられない” “//www.tatmou.com/matlabcentral/answers/1696965-yyaxis-y” “佳琳杉浦”
4 2022-04-15 01:11:08 “2以上の同じ要素を持列を削除” “//www.tatmou.com/matlabcentral/answers/1696465-” “朝鲜”
5 2022-04-15 01:09:57 “マスクでの入力値を他ブロックの入力に反映させる方法” “//www.tatmou.com/matlabcentral/answers/1694450-” “kkdra57”
6 2022-04-14 09:00:13 “许可证管理器错误-16が発生するのはなぜですか?” “//www.tatmou.com/matlabcentral/answers/98578-license-manager-error-16” “MathWorks支金宝app援小组”
7 2022-04-14 07:03:35 “MATLAB学生向けライセンスまたはMATLAB家里ライセンスの領収書発行方法を教えてください。” “//www.tatmou.com/matlabcentral/answers/346697-matlab-matlab-home” “MathWorks支金宝app援小组”
8 2022-04-14 06:45:38 “任意の信号波形の作成方法が分からない” “//www.tatmou.com/matlabcentral/answers/1693385-” “山田高明”
9 2022-04-13 09:16:26 “フレムベスのデタの表示(シミュレションデタンスペクタ)” “//www.tatmou.com/matlabcentral/answers/1695400-” “kkdra57”
10 2022-04-13 06:33:32 “それぞれのboxplotに平均値をplotする+それぞれのboxplotの外れ値の色を変える” “//www.tatmou.com/matlabcentral/answers/1689845-boxplot-plot-boxplot” “葡萄酒Kawama”
11 2022-04-13 05:26:46 “信号工具箱のlowpassにいて” “//www.tatmou.com/matlabcentral/answers/1691655-signal-tool-box-lowpass” “mushi77”
12 2022-04-13 05:16:08 “ラ电子邮箱センスにラベルを追加するにはどうすればよいですか?” “//www.tatmou.com/matlabcentral/answers/1693600-” “MathWorks支金宝app援小组”
13 2022-04-13 04:48:27 “ラ▪センスセンタ▪をどのように使いますか?” “//www.tatmou.com/matlabcentral/answers/94339-” “MathWorks支金宝app援小组”
14 2022-04-12 23:59:58 “MATLAB编译器(SDK)でLogicAnalyzerを動かそうと思っても,名前dsp。LogicAnalyzerを解決できませんのエラ,になる” “//www.tatmou.com/matlabcentral/answers/1693675-matlab-compiler-sdk-logicanalyzer-dsp-logicanalyzer” “久之助三宅”
感じです。
次は各ペ,ジでに関連するユ,ザ,アカウントを探してくる作業を行います。

2.それらに関わるアカウント名を集計

例として1目の質問を見てみましょう。
名前は
href =“/ matlabcentral /档案/作者/ 14080697”>对剧中田口< / >
と出ているはずなので,正規表現は
正则表达式(txt,“href = " / matlabcentral /档案/作者/ (?:\ d +?)”>([^<].+?)“令牌”);
で行けるはず。
Url = pagelist.urls(1)
url =“//www.tatmou.com/matlabcentral/answers/1698985-bus”
TXT = webread(url);
Users_on_post = regexp(txt,“href = " / matlabcentral /档案/作者/ (?:\ d +?)”>([^<].+?)“令牌”);
字符串(users_on_post)”
ans = 3×1的字符串
“利元河合”
“施Toshinobu…
“施Toshinobu…
感じ。2回登場していますが、これは独特的関数を噛ましておけば好でしょう。
上で抽出したページに対して回すことで,最近アップデートのあった日本語ページに登場するアカウント名を取り出します。
Item2check = pagelist;
Users = [];
2 = 1:高度(item2check)
Url = item2check.urls(ii);
TXT = webread(url);
% href= " /matlabcentral/profile/authors/6704456″>上野裕史 . % href=
Users_on_post = regexp(txt,“href = " / matlabcentral /档案/作者/ (?:\ d +?)”>([^<].+?)“令牌”);
Users = [Users, string(users_on_post)];
结束
%唯一帐户
昵称=唯一的(用户);
Idx =昵称==“MathWorks支金宝app援小组”%サポ,トチ,ムは除いておきます。
昵称(idx) = [];
昵称(1:5)
ans = 5×1的字符串
“Akira Agata”
“Atsushi上野”
“疝宝贝”
“Hiroki武田”
“他欲之…
取れていますね。

3.ランキング上位者を見ける

例えば週間ランキングペジのurlは
baseURL =“https://jp.mathworks.com/matlabcentral/answers/contributors/?filter=week”
こんな様子です。これも各ペ,ジ50人の表示なので,それ以上の情報をとる場合は页を使います。
試しに上位250人を抽出するならこんな感じ。HTMLファaaplルをいじるなら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;
% 順位
tmp = findElement(c(jj),“div:第一个孩子”);
ranks(index) = extractHTMLText(tmp);
アカウント名
tmp = findElement(c(jj)," h4 > a > span ");
names(index) = extractHTMLText(tmp);
结束
结束
的名字
名称= 50×1的字符串
“_”
“图像分析师”
“沃尔特·罗伯森”
“MathWorks支金宝app持……
“明星黾”
“Torsten”
“马特·J”
“KSSV”
“为副总经理”
“山姆翟”
錚々たる面子です。
この中から,上で探し出してきた日本語の質問に関連するユ,ザ,アカウントをIsmember関数で抽出します。
Idx = ismember(名称,昵称);
数据集= table(rank (idx),names(idx),“VariableNames”, {“排名”“昵称”})
数据集=2×2表
排名 昵称
1 37 “小次郎Saito”
2 45 “Atsushi上野”
これは実行時の結果ですので,これを読まれている時点ではまた違う結果になっていると思います。
あとは推特への投稿文を構成して,後は呟くだけ!改行は换行符が使えますので,こんな感じで文章を作ってみます。
状态=“MATLABの问答サescト:MATLAB答案”+换行;
状态=状态+“日本語質問に回答する顶级アカウント(每周)”+换行+换行;
2 = 1: min(高度(数据集),5)
状态=状态+“-”+ dataset.nickname(ii) +“さん”+换行;
结束
Status = Status +换行符+“ありがとうございます!”+换行;
状态=状态+“詳細:”+ baseURL;
disp(状态);
MATLABの问答サaaplト:MATLAB答案
日本語質問に回答する顶级アカウント(每周)
-齐藤小次郎さん
-上野惇さんありがとうございます!
詳細:https://jp.mathworks.com/matlabcentral/answers/contributors/?filter=week
できあがり。

4.推特で呟く

Twitterに投稿するにはTwitter APIの取得が必要でその審査がちょっとハードル高い・・と心配された方。ご安心ください。ThingSpeakではThingTweetという機能を提供していて,Twitterアカウントとリンクすれば,ThingSpeak経由推ですることができます。TwitterアカウントをリンクしてAPI Keyを取得します。
もちろんできることは文字列を呟くだけ・・なので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を使った推特机器人の作り方にいては奇塔のMATLAB回答の新着質問をお知らせする推特机器人(由ThingSpeak支持)も参考にしてください。

5.GitHub Actionsで定期実行

さて,以上の処理(コ,ド全体はtweetRanking_JP.mを見てください)を定期実行させるのに,今回はGitHub行动を使ってみます。ThingSpeak上で MATLAB コードを実行できますし、TimeControl 機能があるので一定時間毎に実行させる設定は可能です。
ただ,ここはコードもGitHubに公開していることですし,せっかくなので(?)GitHub行动を使ってみます。MATLAB的行为が用意されているのでmatlabラescセンスは不要です。API_Keyも秘密機能で隠ぺい化できますし,コ,ドも公開できるメリットは大きいですね。
GitHub行动の設定はレポジトリ内の.github /工作流にymlファイルを設定するだけ。
运行MATLAB脚本在github托管的Runner
:
日程安排:
- cron:' 0 23 * * 0 '
工作:
我的工作:
运行MATLAB脚本
上运行:ubuntu-latest
步骤:
- name:退房存储库
用途:行动/ checkout@v2
—名称:设置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芸を構築されているのか,ぜひ教えてください。
|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。