OSS開発ブログ

製作物やアイデアを共有する /TypeScript/Ruby/C++/

【開発録】テキストアノテーション支援ツール「MESA」を作った

NLP分野の研究者はしばしばテキストにアノテーションを行う。 アノテーションには専門知識を要することが多い上、守秘義務などもあるから外部委託できなかったりする。 したがって研究者自らアノテーションすることがあると思うが、膨大なテキストに対して行うのは苦痛である。 そこで、少しでも労力を軽減するために支援ツールを作った(実際に作ったのは半年以上前ですが)。(利用はこちら1MESA

demo

マウス操作だけでタグ付けできる。タグは2種類あり、1つ目は文末につける用のタグ、2つ目はXMLタグである。XMLタグの場合は属性も追加できる。作ったタグはローカルに保存でき、再読み込みできる。タグの表示されているエリアはドラッグ移動できる。 エディタ内で文字列検索ができるので一括タグ付けできる。一度アクセスすれば以降オフラインでも動作する。 なにより大切なこととして、作業ファイルをサーバーとやり取りすることがないので、データ流出の心配がない。(オフラインでも動作するのが証拠(?))

タグ付けは通常のエディタでも可能だが、コピペの手間がかかる。本ツールを使えばコピペの手間なくマウスクリックだけでタグがつく。1回ごとの労力軽減は軽微なものだが、膨大な回数繰り返されるタグ付け作業全体では無視できない労力軽減になると思う。

github.com

先行ツール

記事を書くために情報を集めていたら、LightTagというツールを見つけた。 こちらもテキストアノテーション支援ツールである。(記事LightTagはチームでも作業できるらしい。詳しく見てないんですが、アノテーションのクオリティなんかも表示してくれるらしい。基本的に機能はLightTagのほうがリッチです。

ただ、アカウントが必要だし、研究データはLightTagのサーバーに上がってしまうので、この辺を気にする方にはMESAをおすすめしたい。

ポエム

MESAは半年以上前、2019/02頃にJavaScriptを勉強し始めて3日くらいで作ったWebアプリです。 ちょうど研究でタグ付けをする必要があって作りました。

作って数カ月後にTypeScriptで書きなおしてからはずっと放置していました。 でも最近使ってくれる人が出てきたので、思い出して記事にしました。

補足

MESAの特徴的な機能に「オフラインで動作する」というものがあります。これは単にキャッシュに必要なファイルを保存してるだけなんですが、記事を書くにあたってコードを眺めていたら気になる点があったので補足します。 MESAで使用しているAceエディタに限っては、CDNで読み込んでいるので、オフラインだとエディタ内の検索などは動かなくなるかもしれません。(基本的なタグ付け機能は動きます。)

記事を書くついでに直そうと思ったんですが、Aceエディタのパッケージが見つからなかった。代わりにmonaco-editorを見つけたので余裕があるときにこれに乗り換えたい。


  1. スマホでの利用は想定していません

【アイデア】プロフィールサマリをこしらえるOSS

くさころです。こんにちは。

プロフィールサマリ(勝手に呼んでいる)を作るOSSは人気があるようです。 ここでいうプロフィールサマリとは、「視覚的に楽しいデザインでまとめたプロフィール」です。

tipsy/profile-summary-for-github

統計情報を加えたGitHubプロフィールを作ってくれるサイトです。(GitHub: tipsy/profile-summary-for-github)

profile-summary-for-github.com f:id:qsako6:20191010205342p:plain

lepture/github-cards

GitHubのユーザー、リポジトリのカードを作ってくれるサイトです。(GitHub: lepture/github-cards)

f:id:qsako6:20191010211416p:plain
https://lab.lepture.com/github-cards/より引用
lab.lepture.com

po3rin/github_link_creator

こちらもGitHubリポジトリのカードを作ってくれるGo製ツールです。CLI版、Web版があります。(GitHub: po3rin/github_link_creator)

f:id:qsako6:20191010210759p:plain
po3rin/github_link_creatorより引用
ghlinkcard.com

nwtgck/gh-card

こちらもGitHubリポジトリのカードを作ってくれるScala製ツールです。Web版があります。(GitHub: nwtgck/gh-card)

f:id:qsako6:20191010211018p:plain
nwtgck/gh-cardより引用
https://gh-card.dev/

ポエム

本記事で取り上げたのは全てGitHubのプロフィールサマリーを作るOSSでしたが、GitHubに限らず需要がありそうです。 例えば、オンサイトでイベントがある界隈で、名刺としてそのまま使えるプロフィールサマリー作成サイトとか良さそうな気がしています。

【開発録】AtCoderで提出した解答がいくつのテストケースでACか, WAか...等が一目でわかるように表示するスクリプトを作った

くさころです。わーい。

えー遡ることもう半年前のことなんですが、表題のものを作りました。

デバッグをしていると、WAやTLEが減ってるのか気になることがあります。数えるのはつらすぎるので、見えるようにしました。

f:id:qsako6:20191010203616p:plain
こんな感じで見えます

インストールはこちら

github.com

機能としてはあまりにもしょぼいのですが、2019/10/10現在106回インストールしてもらっているらしく、嬉しいです。作ったものが使われると嬉しい。

ポエム

自分が欲しいと思った機能は、案外他の人も欲しがっているかも。作るのがだいじ。

P.S. twitterで意見をくれたかっささん、ありがとうございました!

https://twitter.com/9sako6/status/1134070101785759744

【開発録】GitHubの非公式コミットviewer「commit-stalker」を作った

くさころです。こんにちは。

これは何

demo commit-stalkerGitHubコミットページのviewerです。 ページングで好きなページに飛べます。一番古いコミットまで遡ることもできます。 また、1ページに100件のコミットを表示します。(公式は1ページ30件です。)

f:id:qsako6:20191010190212p:plain
GitHub公式ページ

GitHub公式ページのcommitsページにページングが欲しかったので作りました。 ページングがあるとコミットを遡るのが容易になって、漠然と眺めているだけでもコミットメッセージの書き方やOSS発展の歴史を学ぶことができたりできなかったりします。

github.com

技術

TypeScriptとReactでガワを書き、GitHub Pagesでホスティングしています。

自作API

ページングを実現するためにはリポジトリの合計コミット数を取得する必要がある1のですが、GitHub API v3には合計コミット数を取得するAPIがありません。

そこで、リポジトリのこれ

f:id:qsako6:20191010190249p:plain

スクレイピングして返すAPIを作って使っています。

github.com

GitHub公式のHTMLが変わると死ぬ可能性があるのがちょっと悩みです。

UI

操作がキーボードで済むように、input要素でEnterキーを押すと検索が走るようになっています。 UIはWebアプリを作る際に最も悩むポイントです。この辺の知識は他のサイトをパク...参考にするしかないんですかね><

課題

匿名ユーザーの場合、GitHub API v3へのリクエストは60回/hに制限されます2。authorizeする、つまり利用者にGitHubログインしてもらえば5000回/hにまで増えますが、それをする元気がないので諦めです。

ポエム(OSS開発の楽しさ)

実はこの「commit-stalker」、JavaScriptを勉強し始めて1週間くらいで作ったほぼ初めてのWebアプリで、思い入れがあります。 作って数日経ったころ、海外の方から複数スターが飛んできていてあまりのびっくりとうれしみで飛び上がりました。

ツイートにあるように、作ってすぐdev.toに記事を投稿したのがトリガーになったのかもしれませんが、真相は謎です。GitHubはどこからスターが飛んでくるかわかりません。が、READMEを充実させることと、英語で書くことは重要だと感じます。

最近TypeScriptとReactで全部書き直してデザインをさらにGitHub公式に寄せました。 過去に作ったOSSを新しい技術の勉強のために書き直すことをたまにします。新しく得た知識で殴るその瞬間、自分の成長を感じます。