このたびRedPenの新バージョンv1.10をリリースしました。
本稿はRedPen v1.10が新たに提供する機能(表記ゆれ対応とエラーレベルの設定)について紹介します。
表記ゆれへの対応
今までカタカナ単語の表記ゆれを検知する機能は提供していたのですが、カタカナ以外には対応できていませんでした。この問題に対応するため、本リリースでJapaneseExpressionVariation
が追加されました。この機能は単語の表記ゆれに対応する機能の一つでカタカナ以外の単語も処理できます。
本機能は同一の発音をする単語ペアをエラーとして出力します。たとえば同一文書中にエクセルとExcelという単語が両方存在する場合、どちらかが表記ゆれがある可能性があるためエラーを出力します。
たとえば、以下の内容をもつ文書があったとします。
このエクセルはあのExcelとは違うのです。
すると、JapaneseExpressionVariation
は以下のエラーを出力します。
excel.txt:1: ValidationInfo[JapaneseExpressionVariation], Found possible Japanese word variations for "エクセル", "Excel(名詞)" at (L1,9) at line: このエクセルはあのExcelとは違うのです。
エラーレベルを指定
RedPen が提供する機能の多くは問題のない箇所であってもエラーとして出力してしまうことがあります。エラーが出力されないようにするため、今までは @suppress
アノテーションを使うか機能を設定ファイルから削除するしかありませんでした。
たとえば前節で紹介したJapaneseExpressionVariation
は強力な機能です。しかし残念ながら、出力されるエラーには間違いが含まれてしまいます。このような間違いが含まれてしまう機能は通常のチェックでは利用せず、リリース前など最終確認のときだけオンにして確認するとよいでしょう。
そこで本リリースからエラーレベルを指定できるようになりました。エラーレベルはError
、Warn
、Info
を指定できます。エラーレベルを指定するには設定ファイルの各validator
ブロックに機能のレベル(level
)を指定します。level
プロパティを指定しなかった場合のエラーレベルはError
です。
<redpen-conf lang="ja">
<validators>
<validator name="JapaneseExpressionVariation" level="Info"/>
<validator name="DoubledConjunctiveParticleGa" />
</validators>
</redpen-conf>
エラーレベルを指定した上でCLIの --threshold
オプションを指定するとRedPenの出力を調整できます。たとえば以下のようにエラーレベルのしきい値を指定しない場合には、上記の設定で info
レベルが指定されている JapaneseExpressionVariation
からエラーは出力されません。
$redpen -c conf/redpen-conf-ja.xml input.tt
...
[2017-11-14 22:44:14.409][INFO ] cc.redpen.validator.JavaScriptValidator - JavaScript validators directory: js
逆にしきい値にinfo
を指定して実行すると、設定ファイルで info レベルが指定されている機能からのエラーも出力されます。
$redpen -t info -c conf/redpen-conf-ja.xml input.txt
...
excel.txt:1: ValidationInfo[JapaneseExpressionVariation], Found possible Japanese word variations for "エクセル", "Excel(名詞)" at (L1,9) at line: このエクセルはあのExcelとは違うのです。
まとめ
RedPen v1.10 で導入された JapaneseExpressionVariation
について紹介しました。この機能は強力ですが、問題ないところもエラーとして出力してしまう恐れがあります。この機能のようにエラーを含みやすい機能のエラーレベルを info
にしておいて、必要なときだけ出力するとよいでしょう。
Appendix: 表記ゆれの実装方法
こちらのスライドに表記ゆれを検知する機能の実装方法についてまとめました。お使いの自然言語用のLinterで実装してみると便利かもしれません。