RedPen を公開しました (ベータバージョン)

RELEASE
2014.05.19
---
BLOG


 はじめまして、ATL でソフトウェアエンジニアをやっている伊藤 (@takahi_i) です。この度 RedPen という自然言語で書かれた文書のチェックツールをベータ公開しました (ベータバージョンでの告知となってしまい恐縮です)。本ツールが対象とする自然言語で書かれた文書としては、マニュアル、論文、E-メールなどがあります。以下プロジェクトの URL となります。


http://redpen.bigram.org

 本稿では RedPen の機能と使い方について紹介します。

RedPen の機能

 RedPen は文書内で使用されている表現の非統一や、読みにくい文、あきらかな不整合を見つけ警告を出力します。現在提供されているのは、以下のように非常にプリミティブな機能です。

 

  • 文長、パラグラフ長
  • 不正な表現
  • 不正なシンボル
  • カタカナの終了ハイフンの有無
  • カタカナのスペルチェック
  • シンボル前後のスペース
  •  

     現在プリミティブな機能しか提供していないのには理由があります。本ツールははじめにフォーカスしたいのは自然言語処理などの学問分野で研究されている高度な解析ではなく、プログラミング言語の静的解析ツールが行ってくれるような 明らかな誤りやフォーマット異常 の検出だからです。

    対応フォーマット

     現状の RedPen は Markdown と Textile の一部のタグ、およびプレインテキストに対応しています。

    RedPen を利用する

     詳しい利用方法はマニュアルを参照していただくことにして、今回は RedPen に同梱されているデフォルトの設定とサンプル文書を利用して RedPen を使ってみます。

    サンプル設定

     RedPen は3つの設定ファイルを持ちます。1つは全体の設定ファイルで、以下のように残り2つの設定ファイルと入力言語を指定します (以下の設定ファイルでは日本語、”ja” が指定されています)。

    
       <configuration>
          <validator>conf/validation-conf-ja.xml</validator>
          <lang char-conf="conf/symbol-conf-ja.xml”>ja</lang>
       </configuration>
    
    

     全体の設定ファイルで指定される2つの設定ファイルは Validator 設定ファイルと、使用文字設定ファイルです。

    Validator 設定ファイル

     Validator 設定ファイルではチェックしたい項目をカバーする Validator を追加します。Validator とは入力文書を1つの側面からチェックします(入力文長、不正なシンボルなど)。

    
    <component name="Validator">
      <component name="SentenceIterator">
        <component name="SentenceLength">
          <property name="max_length" value="150"/>
        </component>
        <component name="InvalidCharacter"/>
        <component name="SpaceWithSymbol"/>
        <component name="KatakanaEndHyphen"/>
        <component name="KatakanaSpellCheck"/>
      </component>
    </component>
    
    

     上記の設定では、

  • 文長 (SentenceLength)
  • 不正な文字 (InvalidCharacter)
  • スペース (SpaceWithSymbol)
  • カタカナの長音 (KatakanaEndHypen)
  • カタカナのスペルチェック(KatakanaSpell)
  • が登録されています。

    使用文字設定ファイル

     使用する文字集合のデフォルト設定はメインの設定ファイルの言語 (langフィールド) で決定されます。指定した言語の使用文字のデフォルト設定と違った設定を利用したい場合には、使用文字設定ファイルでデフォルトの設定を上書きします。

     使用文字設定ファイルには、利用する文字と、使っては行けない文字、前後にスペースが必要かを設定します。今回は詳しい説明を割愛しますが、文末のピリオドを “。”、コンマを “、” に設定しています。 invalid-chars では各文字と同機能の文字で不正なものを列挙します。たとえば、以下の設定ではコンマに全角文字 “、” を設定し、半角コンマ “,” を不正な文字として登録しています。

    
    <?xml version="1.0"?>
    <character-table>
      <character name="EXCLAMATION_MARK" value="!" invalid-chars="!" after-space="true" />
      <character name="LEFT_QUOTATION_MARK" value="\'"  invalid-chars="“" before-space="true" />
      <character name="RIGHT_QUOTATION_MARK" value="\'"  invalid-chars="”" after-space="true" />
      <character name="NUMBER_SIGN" value="#" invalid-chars="#" after-space="true" />
      <character name="FULL_STOP" value="。" invalid-chars=".." />
      <character name="COMMA" value="、" invalid-chars=","/>
    </character-table>
    
    

    サンプル文書

     今回 RedPen を適用する文書として以下を利用します。以下の文書は RedPen に同梱されています。

    
    最近利用されているソフトウェアの中には複数の計算機上で動作(分散)するものが多く存在し、このような分散ソフトウェアは複数の計算機で動作することで大量のデータを扱えたり、高負荷な状況に対処できたりします。
    本稿では,複数の計算機(クラスタ)で動作する各サーバーを「インスタンス」と呼びます。
    たとえば検索エンジンやデータベースではインデックスを複数のインスタンスで分割して保持します。
    このような場合、各インデクスの結果をマージしてクライアントプログラムに渡す機構が必要となります。
    
    

    インストールと実行

     では RedPen をダウンロードして使ってみましょう。

    RedPen のインストール

     以下の手順で RedPen をダウンロード、ビルドしてください (Git と Maven が必要になります)。

    
    $ git clone git@github.com:recruit-tech/redpen.git
    $ cd redpen
    $ mvn package
    
    

    RedPen の実行

     ではビルドした RedPen を実行してみます。

    
    $ cd redpen-app/target/
    $ tar xzvf redpen-app-0.6-assembled.tar.gz
    $ cd redpen-app-0.6
    $ bin/redpen -c conf/dv-conf-ja.xml doc/txt/ja/sampledoc-ja.txt
    
    

    実行結果

     上記のコマンドを実行すると、以下のように警告が出力されます。

    
    15:53:31.833 [main] INFO  o.b.docvalidator.ConfigurationLoader - Succeeded to load configuration file
    15:53:31.838 [main] INFO  o.b.docvalidator.ConfigurationLoader - Validation Setting file: conf/validation-conf-ja.xml
    15:53:31.842 [main] WARN  o.b.d.c.ValidationConfigurationLoader - Found more than one root "component" blocks in the configuration
    15:53:31.842 [main] WARN  o.b.d.c.ValidationConfigurationLoader - Use the first configuration block ...
    15:53:31.843 [main] INFO  o.b.docvalidator.ConfigurationLoader - Succeeded to load validator configuration setting
    15:53:31.843 [main] INFO  o.b.docvalidator.ConfigurationLoader - Setting lang as "ja"
    15:53:31.843 [main] INFO  o.b.docvalidator.ConfigurationLoader - Setting character table setting file as "conf/symbol-conf-ja.xml"
    15:53:31.844 [main] INFO  o.b.docvalidator.ConfigurationLoader - Symbol setting file: conf/symbol-conf-ja.xml
    15:53:31.852 [main] INFO  o.b.d.config.CharacterTableLoader - Succeeded to load character table
    15:53:31.852 [main] INFO  o.b.docvalidator.ConfigurationLoader - Succeeded to load character configuration setting
    15:53:31.864 [main] INFO  o.b.d.parser.BasicDocumentParser - "。" is added as a end of sentence character
    15:53:31.864 [main] INFO  o.b.d.parser.BasicDocumentParser - "?" is added as a end of sentence character
    15:53:31.864 [main] INFO  o.b.d.parser.BasicDocumentParser - "!" is added as a end of sentence character
    15:53:31.872 [main] INFO  o.b.d.distributor.ResultDistributor - Creating Distributor...
    ValidationError[SentenceLength][doc/txt/ja/sampledoc-ja.txt : 0 (The length of the line exceeds the maximum 101.)] at line: 最近利用されているソフトウェアの中には複数の計算機上で動作(分散)するものが多\
    く存在し、このような分散ソフトウェアは複数の計算機で動作することで大量のデータを扱えたり、高負荷な状況に対処できたりします。
    ValidationError[InvalidCharacter][doc/txt/ja/sampledoc-ja.txt : 1 (Invalid symbol found: ",")] at line: 本稿では,複数の計算機(クラスタ)で動作する各サーバーを「インスタンス」と呼びまます。
    ValidationError[KatakanaEndHyphen][doc/txt/ja/sampledoc-ja.txt : 1 (Invalid Katakana end hypen found "サーバー")] at line: 本稿では,複数の計算機(クラスタ)で動作する各サーバーを「インスタンス」と呼びまます。
    ValidationError[KatakanaSpellCheck][doc/txt/ja/sampledoc-ja.txt : 3 (Found a Katakana word: "インデクス", which is similar to "インデックス" at postion 2.)] at line: このような場合、各インデクスの結果をマージしてクライアントプログラムに渡す機構が必要となります。
    
    

     では上記の結果をみてみましょう。上記の結果には4つの警告 (ValidationError) が出力されています。1つ目の警告は入力文書の一文目が長すぎるという警告です。2つ目の警告は、利用されたコンマが登録された文字と異なっていることを表しています。3つ目の警告は “サーバー” という単語のハイフンがいらないために出力されています。4つ目の警告はカタカナ単語 “インデックス” と字面が似ている “インデクス” というカタカナ単語があることを教えてくれています。

    現状と今後

     RedPen はベータリリースの状態です。現状アプリケーションとしてとりあえず動作する状態で、今後正式リリースまでに多くの変更が予定されています。特に設定ファイルのフォーマット (XML) は開発陣の間で変えたいという声が多数派をしめており、今後変更されることになりそうです。また Validator のインターフェースなども変更も開発陣の間で活発に議論されていますのでその点につきましてご了承いただければと思います。

     我々が現状の RedPen を使みた際の最も大きな不満は設定の煩雑さです。たとえば現在の RedPen では不正な表現を検知する Validator (InvalidExpressionValidator) はユーザ自身が不正な表現リストを作る必要があります。設定の煩雑さを設定やリソースの追加なしで利用できるように言語毎の初期設定を与えたり、設定無しで利用できる Validator を揃えることで解決してゆきたいと考えています。設定なしでできる Validator として省略表記に対する正式名称が文書中に存在するかのチェックや、日本語の文語、口語の混在をチェックすることなどを考えています。

     そのほか今後予定されている大きな改良としては、簡単に Validator を追加するためのプラグイン対応があります。今後もゆっくりと開発が続いてゆく予定ですので生暖かく見守っていただければと思います。どうぞよろしくお願いいたします。