「TCPプロトコル」、「DTOオブジェクト」、「VRリアリティ」などの単語の頭文字をとった略語とその後に続く単語の意味がかぶっている文章を検知するtextlintのルールを書きました。 日本語だけではなく”This is TCP protocol.“などの英単語のパターンも対応しています。

元ネタは次のTweetです。

仕組み

略語をまとめたマシーンリーダブルなデータは見つからなかったので、Wikipediaを元に略語と元の単語の対応をまとめた辞書を作りました。 次のSpreadSheetにデータを公開しています。

元となるWikipediaのページは、次のようなページです。

この辞書にマッチする略語がでてきたら、その次の単語が略語の最後の単語と同じなら重複しているというエラーを報告します。

Screenshot

「BGPプロトコル」の「BGP」は「Border Gateway Protocol」なので、「Protocol」と「プロトコル」は同じ意味だとしてエラーにしています。

“BGPプロトコル” has duplicated suffix word. “BGP” stands for “Border Gateway Protocol”.

日本語と英単語間で同じ意味合いかどうかの判定には、Sudachi 同義語辞書を利用しています。

使い方

textlintのルールなので、「textlint ルール 設定」で検索したり次のページを参照してください。

npmなどでルールをインストールします。

npm install --save-dev @textlint-rule/textlint-rule-no-duplicate-abbr textlint

.textlintrc設定ファイルで有効化します。

{
  "rules": {
    "@textlint-rule/no-duplicate-abbr": true
  }
}

おわりに

略語の辞書が結構手作業で直したりしているので、壊れてるデータがあるかもしれません。 SpreadSheetは誰でも編集できるようになっているので、おかしなところがあったら修正してみてください。 また、足りない略語は勝手に追加してみてください。(辞書もnpmパッケージとして配布したいのでどうにかしたいです)