漢字変換ミスで、たまに長音記号がかな文字以外の後に置かれる事例を見かけたので、それをLanguageToolのルールにして取り込んでもらいました。
現状ある日本語のルールをざっと見たのですが、うまい具合に表現する方法が思い浮かばなかったので、思い切ってメーリングリストで聞いてみました。
メイン開発者のDanielさんは親切で反応も早い方で、「正規表現でUnicodeの範囲を使えばできる」という方法を示してくれました。また、過去にも日本語のルールを書いているSilvanさんからは、JavaにおけるUnicodeのクラス表現(\p{IsXxx})を紹介してくれました。
これらを踏まえ、以下のようなルールをpull requestとして書き、無事masterにマージしてもらえました。
<rule id="SINGLE-MARKON" name="長音"> <pattern case_sensitive="no"> <token regexp="yes">[^\p{IsKatakana}\p{IsHiragana}]+</token> <token >ー</token> </pattern> <message>不適切な長音符</message> <example><marker>リンカー</marker></example> <example correction=""><marker>隣家ー</marker></example> </rule>
カタカナとひらがな以外が長音記号の前にあるとき、LanguageToolは警告を出します。
$ echo "隣家ー" |java -jar languagetool-commandline.jar -l ja-JP -c UTF-8 Expected text language: Japanese (no spell checking active, specify a language variant like 'en-GB' if available) Working on STDIN... 1.) Line 1, column 1, Rule ID: SINGLE-MARKON[1] Message: 不適切な長音符 隣家ー ^^^ Time: 529ms for 1 sentences (1.9 sentences/sec)
この機会に、Doc-ja Wikiの”LanguageTool使い方メモ“も若干修正しました。自前のgrammar.xmlを指定して起動する方法と、ソースコード上で変更をしたときにルールのテストをする方法について新た説明を加えています。
LanguageToolのリリースバージョンは現在2.9ですが、次期バージョン3.0ではgrammar.xmlの書式も変わっているため、いずれWiki内の説明もそちらに合わせて修正したいところです。