ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

文章校正ツールRedPenを導入してみる

はじめに

ブログ記事の質を高めるためにツール導入を検討した。

take-she12.hatenablog.com

そこでRedPenを導入することにした。

ダウンロード

マニュアルは以下。

RedPen 1.7 ドキュメント

Javaが必要なのでいれておく。

無料Javaソフトウェアをダウンロード

take@MacBook-Air ~> java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

--versionじゃないのそうそうムカつくな。(笑)

Redpenをダウンロードして展開。

github.com

take@MacBook-Air ~> tar xvf redpen-*.tar.gz
(省略)
take@MacBook-Air ~> cd redpen-distribution-1.7.6/
take@MacBook-Air ~/redpen-distribution-1.7.6> 

指示通りのコマンドを叩いてみる。

take@MacBook-Air ~/redpen-distribution-1.7.6> bin/redpen -c conf/redpen-conf-en.xml sample-doc/en/sampledoc-en.txt 
[2016-10-29 18:30:57.494][INFO ] cc.redpen.Main - Configuration file: /Users/take/redpen-distribution-1.7.6/conf/redpen-conf-en.xml
[2016-10-29 18:30:57.501][INFO ] cc.redpen.config.ConfigurationLoader - Loading config from specified config file: "/Users/take/redpen-distribution-1.7.6/conf/redpen-conf-en.xml"
[2016-10-29 18:30:57.526][INFO ] cc.redpen.config.ConfigurationLoader - Succeeded to load configuration file
[2016-10-29 18:30:57.526][INFO ] cc.redpen.config.ConfigurationLoader - Language is set to "en"
[2016-10-29 18:30:57.526][WARN ] cc.redpen.config.ConfigurationLoader - No variant configuration...
[2016-10-29 18:30:57.528][INFO ] cc.redpen.config.ConfigurationLoader - No "symbols" block found in the configuration
[2016-10-29 18:30:57.531][INFO ] cc.redpen.config.SymbolTable - Default symbol settings are loaded
[2016-10-29 18:30:57.605][INFO ] cc.redpen.parser.SentenceExtractor - "[., ?, !]" are added as a end of sentence characters
[2016-10-29 18:30:57.605][INFO ] cc.redpen.parser.SentenceExtractor - "[', "]" are added as a right quotation characters
[2016-10-29 18:30:57.723][INFO ] org.reflections.Reflections - Reflections took 53 ms to scan 1 urls, producing 4 keys and 50 values 
[2016-10-29 18:30:57.810][INFO ] org.reflections.Reflections - Reflections took 3 ms to scan 1 urls, producing 159 keys and 162 values 
[2016-10-29 18:30:57.921][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load UnexpandedAcronymValidator default dictionary.
[2016-10-29 18:30:57.927][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load weak expressions.
[2016-10-29 18:30:57.933][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load word frequencies.
[2016-10-29 18:30:57.935][INFO ] cc.redpen.validator.JavaScriptValidator - JavaScript validators directory: js
sampledoc-en.txt:1: ValidationError[SentenceLength], 文長("195")が最大値 "120" を超えています。 at line: Some software tools work in more than one machine, and such distributed (cluster)systems can handle huge data or tasks, because such software tools make use of large amount of computer resources.
sampledoc-en.txt:1: ValidationError[SymbolWithSpace], シンボルの前にスペースが必要です ())。 at line: Some software tools work in more than one machine, and such distributed (cluster)systems can handle huge data or tasks, because such software tools make use of large amount of computer resources.
sampledoc-en.txt:2: ValidationError[Contraction], 省略形 "we'll" が見つかりました。 at line: In this article, we'll call a computer server that works as a member of a cluster an "instance".
sampledoc-en.txt:2: ValidationError[SuccessiveWord], 単語 "the" は連続して使用されています。 at line:  for example, each instance in distributed search engines stores the the fractions of data.
sampledoc-en.txt:2: ValidationError[EndOfSentence], 文末表現が不正 ""." です。 at line: In this article, we'll call a computer server that works as a member of a cluster an "instance".
sampledoc-en.txt:1: ValidationError[WeakExpression], "Some" is considered a weak expression. at line: Some software tools work in more than one machine, and such distributed (cluster)systems can handle huge data or tasks, because such software tools make use of large amount of computer resources.
sampledoc-en.txt:1: ValidationError[WeakExpression], "huge" is considered a weak expression. at line: Some software tools work in more than one machine, and such distributed (cluster)systems can handle huge data or tasks, because such software tools make use of large amount of computer resources.
sampledoc-en.txt:3: ValidationError[Spelling], ミススペルの可能性がある単語 "distriubuted" がみつかりました。 at line: Such distriubuted systems need a component to merge the preliminary results from member instnaces.
sampledoc-en.txt:3: ValidationError[Spelling], ミススペルの可能性がある単語 "instnaces" がみつかりました。 at line: Such distriubuted systems need a component to merge the preliminary results from member instnaces.

[2016-10-29 18:30:57.956][ERROR] cc.redpen.Main - The number of errors "9" is larger than specified (limit is "1").

なんか出た。いいっぽい。

とりあえず-cでconf指定、bin/redpenで実行してますね。pathを通しておきましょう。

take@MacBook-Air ~> set -U fish_user_paths $fish_user_paths /Users/take/redpen-distribution-1.7.6/bin
take@MacBook-Air ~> echo $PATH
/Users/take/redpen-distribution-1.7.6/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin

気づいたひともいるかもしれませんが、実はシェルをしれーっとfishにしています。記事書いてないのか。しかもいれただけで特に何の恩恵も預かってなくてこういうときに方法が違うと困る。別に時間とってカスタマイズしよう… 補完機能は便利ですよ。

わーい、通りました。

take@MacBook-Air ~> redpen
[2016-10-29 18:36:22.029][INFO ] cc.redpen.Main - Configuration file: /Users/take/redpen-distribution-1.7.6/conf/redpen-conf-ja.xml
[2016-10-29 18:36:22.036][ERROR] cc.redpen.Main - Input file is not given
usage: redpen-cli [Options] [<INPUT FILE>]
 -c,--conf <CONF FILE>                Configuration file (REQUIRED)
 -f,--format <FORMAT>                 Input file format
                                      (markdown,plain,wiki,asciidoc,latex)
 -h,--help                            Displays this help information and exits
 -l,--limit <LIMIT NUMBER>            error limit number
 -r,--result-format <RESULT FORMAT>   Output result format
                                      (json,json2,plain,plain2,xml)
 -v,--version                         Displays version information and exits

config

さて、ここが重要です。育てていくしかないと思うんですが、他の方の設定を参考にしていきましょう。

読み込んでいるようにここが設定ファイルのようですね。

[2016-10-29 18:36:22.029][INFO ] cc.redpen.Main - Configuration file: /Users/take/redpen-distribution-1.7.6/conf/redpen-conf-ja.xml

サンプル文章として以下の記事をmarkdown文章として実行してみましょう。

take-she12.hatenablog.com

予想通り大量に出ました。

take@MacBook-Air ~> redpen -f markdown Dropbox/23_blog/asciidoc_is_good.md
[2016-10-29 18:42:31.867][INFO ] cc.redpen.Main - Configuration file: /Users/take/redpen-distribution-1.7.6/conf/redpen-conf-ja.xml
[2016-10-29 18:42:31.875][INFO ] cc.redpen.config.ConfigurationLoader - Loading config from specified config file: "/Users/take/redpen-distribution-1.7.6/conf/redpen-conf-ja.xml"
[2016-10-29 18:42:31.900][INFO ] cc.redpen.config.ConfigurationLoader - Succeeded to load configuration file
[2016-10-29 18:42:31.901][INFO ] cc.redpen.config.ConfigurationLoader - Language is set to "ja"
[2016-10-29 18:42:31.901][WARN ] cc.redpen.config.ConfigurationLoader - No variant configuration...
[2016-10-29 18:42:31.902][INFO ] cc.redpen.config.ConfigurationLoader - No "symbols" block found in the configuration
[2016-10-29 18:42:31.907][INFO ] cc.redpen.config.SymbolTable - "ja" is specified.
[2016-10-29 18:42:31.908][INFO ] cc.redpen.config.SymbolTable - "zenkaku" variant is specified
[2016-10-29 18:42:32.429][INFO ] cc.redpen.parser.SentenceExtractor - "[。, ?, !]" are added as a end of sentence characters
[2016-10-29 18:42:32.429][INFO ] cc.redpen.parser.SentenceExtractor - "[’, ”]" are added as a right quotation characters
[2016-10-29 18:42:32.507][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=1, content='はじめに', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='はじめ', offset=0, tags=[名詞, 副詞可能, *, *, *, *, はじめ, ハジメ, ハジメ]}, TokenElement{surface='に', offset=3, tags=[助詞, 格助詞, 一般, *, *, *, に, ニ, ニ]}], offsetMap=[LineOffset(1, 2), LineOffset(1, 3), LineOffset(1, 4), LineOffset(1, 5)]}
[2016-10-29 18:42:32.521][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=6, content='ドキュメント作成システム構築ガイド', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='ドキュメント', offset=0, tags=[名詞, 一般, *, *, *, *, ドキュメント, ドキュメント, ドキュメント]}, TokenElement{surface='作成', offset=6, tags=[名詞, サ変接続, *, *, *, *, 作成, サクセイ, サクセイ]}, TokenElement{surface='システム', offset=8, tags=[名詞, 一般, *, *, *, *, システム, システム, システム]}, TokenElement{surface='構築', offset=12, tags=[名詞, サ変接続, *, *, *, *, 構築, コウチク, コーチク]}, TokenElement{surface='ガイド', offset=14, tags=[名詞, サ変接続, *, *, *, *, ガイド, ガイド, ガイド]}], offsetMap=[LineOffset(6, 2), LineOffset(6, 3), LineOffset(6, 4), LineOffset(6, 5), LineOffset(6, 6), LineOffset(6, 7), LineOffset(6, 8), LineOffset(6, 9), LineOffset(6, 10), LineOffset(6, 11), LineOffset(6, 12), LineOffset(6, 13), LineOffset(6, 14), LineOffset(6, 15), LineOffset(6, 16), LineOffset(6, 17), LineOffset(6, 18)]}
[2016-10-29 18:42:32.527][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=17, content='markdown vs asciidoc', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='markdown', offset=0, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}, TokenElement{surface=' ', offset=8, tags=[記号, 空白, *, *, *, *, *, *, *]}, TokenElement{surface='vs', offset=9, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}, TokenElement{surface=' ', offset=11, tags=[記号, 空白, *, *, *, *, *, *, *]}, TokenElement{surface='asciidoc', offset=12, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}], offsetMap=[LineOffset(17, 2), LineOffset(17, 3), LineOffset(17, 4), LineOffset(17, 5), LineOffset(17, 6), LineOffset(17, 7), LineOffset(17, 8), LineOffset(17, 9), LineOffset(17, 10), LineOffset(17, 11), LineOffset(17, 12), LineOffset(17, 13), LineOffset(17, 14), LineOffset(17, 15), LineOffset(17, 16), LineOffset(17, 17), LineOffset(17, 18), LineOffset(17, 19), LineOffset(17, 20), LineOffset(17, 21)]}
[2016-10-29 18:42:32.537][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=39, content='asciidocの環境', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='asciidoc', offset=0, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}, TokenElement{surface='の', offset=8, tags=[助詞, 連体化, *, *, *, *, の, ノ, ノ]}, TokenElement{surface='環境', offset=9, tags=[名詞, 一般, *, *, *, *, 環境, カンキョウ, カンキョー]}], offsetMap=[LineOffset(39, 2), LineOffset(39, 3), LineOffset(39, 4), LineOffset(39, 5), LineOffset(39, 6), LineOffset(39, 7), LineOffset(39, 8), LineOffset(39, 9), LineOffset(39, 10), LineOffset(39, 11), LineOffset(39, 12)]}
[2016-10-29 18:42:32.544][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=50, content='iconを出す方法', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='icon', offset=0, tags=[名詞, 一般, *, *, *, *, *, *, *]}, TokenElement{surface='を', offset=4, tags=[助詞, 格助詞, 一般, *, *, *, を, ヲ, ヲ]}, TokenElement{surface='出す', offset=5, tags=[動詞, 自立, *, *, 五段・サ行, 基本形, 出す, ダス, ダス]}, TokenElement{surface='方法', offset=7, tags=[名詞, 一般, *, *, *, *, 方法, ホウホウ, ホーホー]}], offsetMap=[LineOffset(50, 2), LineOffset(50, 3), LineOffset(50, 4), LineOffset(50, 5), LineOffset(50, 6), LineOffset(50, 7), LineOffset(50, 8), LineOffset(50, 9), LineOffset(50, 10)]}
[2016-10-29 18:42:32.546][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=61, content='今後', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='今後', offset=0, tags=[名詞, 副詞可能, *, *, *, *, 今後, コンゴ, コンゴ]}], offsetMap=[LineOffset(61, 2), LineOffset(61, 3)]}
[2016-10-29 18:42:32.683][INFO ] org.reflections.Reflections - Reflections took 62 ms to scan 1 urls, producing 4 keys and 50 values 
[2016-10-29 18:42:32.765][INFO ] org.reflections.Reflections - Reflections took 2 ms to scan 1 urls, producing 159 keys and 162 values 
[2016-10-29 18:42:32.773][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load InvalidExpressionValidator default dictionary.
[2016-10-29 18:42:32.780][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load double negative expression rules.
[2016-10-29 18:42:32.781][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load double negative words.
[2016-10-29 18:42:32.790][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load katakana word dictionary.
[2016-10-29 18:42:32.791][INFO ] cc.redpen.validator.JavaScriptValidator - JavaScript validators directory: js
asciidoc_is_good.md:17: ValidationError[ParagraphNumber], セクション内のパラグラフ数が最大の"5"を超えています at line: markdown vs asciidoc
asciidoc_is_good.md:2: ValidationError[InvalidExpression], 不正な表現 "じゃない" がみつかりました。 at line: 今月は技術学習をしないからってブログを書いちゃダメってわけじゃないんですがどうも滞ってますね。
asciidoc_is_good.md:4: ValidationError[InvalidSymbol], 不正なシンボル ":" がみつかりました。 at line: asin:B01DB3G1VO:detail
asciidoc_is_good.md:9: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 次にredpenという構成ツールでドキュメントのテストをする。
asciidoc_is_good.md:11: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: そしてコミットが起きるたびにredpenが動くようにTravisでgithubと連携する。
asciidoc_is_good.md:11: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: そしてコミットが起きるたびにredpenが動くようにTravisでgithubと連携する。
asciidoc_is_good.md:11: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: そしてコミットが起きるたびにredpenが動くようにTravisでgithubと連携する。
asciidoc_is_good.md:13: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: できあがったドキュメントをasciidoctorでpdfやhtml、epubに変換する。
asciidoc_is_good.md:13: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: できあがったドキュメントをasciidoctorでpdfやhtml、epubに変換する。
asciidoc_is_good.md:13: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: できあがったドキュメントをasciidoctorでpdfやhtml、epubに変換する。
asciidoc_is_good.md:18: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: はてなブログもmarkdownで書けることでそもそもブログをたくさん書くようになりましたし、日常的にmarkdownを使っています。
asciidoc_is_good.md:18: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: はてなブログもmarkdownで書けることでそもそもブログをたくさん書くようになりましたし、日常的にmarkdownを使っています。
asciidoc_is_good.md:24: ValidationError[InvalidSymbol], 不正なシンボル "." がみつかりました。 at line: http://qiita.com/xmeta/items/de667a8b8a0f982e123a:embed:cite
asciidoc_is_good.md:24: ValidationError[InvalidSymbol], 不正なシンボル ":" がみつかりました。 at line: http://qiita.com/xmeta/items/de667a8b8a0f982e123a:embed:cite
asciidoc_is_good.md:26: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: さて実際にasciidocを使ってみた感想ですが、多くの点でasciidocのほうが優れていると感じます。
asciidoc_is_good.md:26: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: さて実際にasciidocを使ってみた感想ですが、多くの点でasciidocのほうが優れていると感じます。
asciidoc_is_good.md:26: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: さらにmarkdownに慣れてるひとなら習得も容易です。
asciidoc_is_good.md:28: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 具体的にasciidocが優れている点は
asciidoc_is_good.md:35: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 特にcsvをそのままテーブルにできるのはかなりいいなと。
asciidoc_is_good.md:37: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 簡単なメモはもちろんこれまで通りmarkdownで、少し大きめな、仕様書レベルだと絶対にasciidocがいいです。
asciidoc_is_good.md:37: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 簡単なメモはもちろんこれまで通りmarkdownで、少し大きめな、仕様書レベルだと絶対にasciidocがいいです。
asciidoc_is_good.md:31: ValidationError[InvalidSymbol], 不正なシンボル "(" がみつかりました。 at line: linkが簡単(url書くだけ)
asciidoc_is_good.md:31: ValidationError[InvalidSymbol], 不正なシンボル ")" がみつかりました。 at line: linkが簡単(url書くだけ)
asciidoc_is_good.md:40: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: Atomにasciidoc-previewというプラグインがあるんですが、それはインストールに失敗しました。
asciidoc_is_good.md:42: ValidationError[KatakanaEndHyphen], カタカナ単語 "プレビュー" に不正なハイフンが見つかりました。 at line: 今は普通のエディタで書いて、firefoxのアドオンでプレビューしています。
asciidoc_is_good.md:42: ValidationError[KatakanaEndHyphen], カタカナ単語 "リアルタイムプレビュー" に不正なハイフンが見つかりました。 at line: リアルタイムプレビューではありませんが、十分かなと。
asciidoc_is_good.md:42: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: (がchromeのほうは動作しませんでした。
asciidoc_is_good.md:44: ValidationError[JapaneseStyle], 不正な日本語のスタイルを発見しました "だった" at line: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
asciidoc_is_good.md:44: ValidationError[JapaneseAmbiguousNounConjunction], 助詞「の」が連続しています: "〜変換の*製の*〜" at line: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 最期にasciidocで書いたadocファイルをhtmlやpdfに変換するには、asciidoctor、asciidoctor-pdfを使います。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 最期にasciidocで書いたadocファイルをhtmlやpdfに変換するには、asciidoctor、asciidoctor-pdfを使います。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 最期にasciidocで書いたadocファイルをhtmlやpdfに変換するには、asciidoctor、asciidoctor-pdfを使います。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 最期にasciidocで書いたadocファイルをhtmlやpdfに変換するには、asciidoctor、asciidoctor-pdfを使います。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
asciidoc_is_good.md:44: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
asciidoc_is_good.md:46: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: これはmacかlinux環境が必要なので、windowsユーザにはいちいち持って行って変換するのが少しめんどくさいかもしれませんね。
asciidoc_is_good.md:46: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: これはmacかlinux環境が必要なので、windowsユーザにはいちいち持って行って変換するのが少しめんどくさいかもしれませんね。
asciidoc_is_good.md:51: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: asciidocでは NOTEやCAUTIONといった注意書きを書けます。
asciidoc_is_good.md:53: ValidationError[InvalidSymbol], 不正なシンボル "." がみつかりました。 at line: http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/:title
asciidoc_is_good.md:53: ValidationError[InvalidSymbol], 不正なシンボル ":" がみつかりました。 at line: http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/:title
asciidoc_is_good.md:57: ValidationError[JapaneseAmbiguousNounConjunction], 助詞「の」が連続しています: "〜*の*のメタ部分〜" at line: asciidocのheaderのメタ部分に以下の記述を書けばokです
asciidoc_is_good.md:57: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: asciidocのheaderのメタ部分に以下の記述を書けばokです
asciidoc_is_good.md:57: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: asciidocのheaderのメタ部分に以下の記述を書けばokです
asciidoc_is_good.md:62: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 今ちょうど会社で新しいツールを作っていて、その仕様書兼マニュアルをasciidocで書いています。
asciidoc_is_good.md:62: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: デフォルトの変換でhtmlもpdfも十分綺麗に書けて満足してます。
asciidoc_is_good.md:62: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: デフォルトの変換でhtmlもpdfも十分綺麗に書けて満足してます。
asciidoc_is_good.md:64: ValidationError[InvalidSymbol], 不正なシンボル "(" がみつかりました。 at line: そしてasciidoctor変換時にstyle(css)指定もできるようになりたいですね。
asciidoc_is_good.md:64: ValidationError[InvalidSymbol], 不正なシンボル ")" がみつかりました。 at line: そしてasciidoctor変換時にstyle(css)指定もできるようになりたいですね。
asciidoc_is_good.md:64: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 今後はasciidoctor-diagramを使ってUMLを書けるようになりたい。
asciidoc_is_good.md:64: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: 今後はasciidoctor-diagramを使ってUMLを書けるようになりたい。
asciidoc_is_good.md:64: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: これができればもうシステム設計も完全にasciidocで書けることになる。
asciidoc_is_good.md:64: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: そしてasciidoctor変換時にstyle(css)指定もできるようになりたいですね。
asciidoc_is_good.md:64: ValidationError[SpaceBetweenAlphabeticalWord], アルファベット単語の前にスペースが存在しません。 at line: そしてasciidoctor変換時にstyle(css)指定もできるようになりたいですね。

[2016-10-29 18:42:32.860][ERROR] cc.redpen.Main - The number of errors "55" is larger than specified (limit is "1").
  • アルファベット単語の前のスペースは不要です。SpaceBetweenAlphabetWordはコメントアウトしましょう。
  • 不正なハイフンとはなんでしょうか。どのハイフンにすればいいか分からないのでKatakanaEndHyphenもコメントアウトします。
  • ()がInvalidSymbolとされてますね。これもはぶきますか。

上記の設定を変更します。

take@MacBook-Air ~> diff redpen-distribution-1.7.6/conf/redpen-conf-ja.xml.bak1 redpen-distribution-1.7.6/conf/redpen-conf-ja.xml
22,23c22,23
<         <validator name="InvalidSymbol"/>
<         <validator name="KatakanaEndHyphen"/>
---
> <!--        <validator name="InvalidSymbol"/>  -->
> <!--        <validator name="KatakanaEndHyphen"/>  -->
25c25
<         <validator name="SpaceBetweenAlphabeticalWord" />
---
> <!--        <validator name="SpaceBetweenAlphabeticalWord" />  -->

再実行します。

take@MacBook-Air ~> redpen -f markdown -r plain2 Dropbox/23_blog/asciidoc_is_good.md
[2016-10-29 18:50:28.174][INFO ] cc.redpen.Main - Configuration file: /Users/take/redpen-distribution-1.7.6/conf/redpen-conf-ja.xml
[2016-10-29 18:50:28.181][INFO ] cc.redpen.config.ConfigurationLoader - Loading config from specified config file: "/Users/take/redpen-distribution-1.7.6/conf/redpen-conf-ja.xml"
[2016-10-29 18:50:28.192][INFO ] cc.redpen.config.ConfigurationLoader - Succeeded to load configuration file
[2016-10-29 18:50:28.192][INFO ] cc.redpen.config.ConfigurationLoader - Language is set to "ja"
[2016-10-29 18:50:28.193][WARN ] cc.redpen.config.ConfigurationLoader - No variant configuration...
[2016-10-29 18:50:28.194][INFO ] cc.redpen.config.ConfigurationLoader - No "symbols" block found in the configuration
[2016-10-29 18:50:28.197][INFO ] cc.redpen.config.SymbolTable - "ja" is specified.
[2016-10-29 18:50:28.197][INFO ] cc.redpen.config.SymbolTable - "zenkaku" variant is specified
[2016-10-29 18:50:28.615][INFO ] cc.redpen.parser.SentenceExtractor - "[。, ?, !]" are added as a end of sentence characters
[2016-10-29 18:50:28.616][INFO ] cc.redpen.parser.SentenceExtractor - "[’, ”]" are added as a right quotation characters
[2016-10-29 18:50:28.677][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=1, content='はじめに', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='はじめ', offset=0, tags=[名詞, 副詞可能, *, *, *, *, はじめ, ハジメ, ハジメ]}, TokenElement{surface='', offset=3, tags=[助詞, 格助詞, 一般, *, *, *, に, ニ, ニ]}], offsetMap=[LineOffset(1, 2), LineOffset(1, 3), LineOffset(1, 4), LineOffset(1, 5)]}
[2016-10-29 18:50:28.691][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=6, content='ドキュメント作成システム構築ガイド', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='ドキュメント', offset=0, tags=[名詞, 一般, *, *, *, *, ドキュメント, ドキュメント, ドキュメント]}, TokenElement{surface='作成', offset=6, tags=[名詞, サ変接続, *, *, *, *, 作成, サクセイ, サクセイ]}, TokenElement{surface='システム', offset=8, tags=[名詞, 一般, *, *, *, *, システム, システム, システム]}, TokenElement{surface='構築', offset=12, tags=[名詞, サ変接続, *, *, *, *, 構築, コウチク, コーチク]}, TokenElement{surface='ガイド', offset=14, tags=[名詞, サ変接続, *, *, *, *, ガイド, ガイド, ガイド]}], offsetMap=[LineOffset(6, 2), LineOffset(6, 3), LineOffset(6, 4), LineOffset(6, 5), LineOffset(6, 6), LineOffset(6, 7), LineOffset(6, 8), LineOffset(6, 9), LineOffset(6, 10), LineOffset(6, 11), LineOffset(6, 12), LineOffset(6, 13), LineOffset(6, 14), LineOffset(6, 15), LineOffset(6, 16), LineOffset(6, 17), LineOffset(6, 18)]}
[2016-10-29 18:50:28.697][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=17, content='markdown vs asciidoc', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='markdown', offset=0, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}, TokenElement{surface=' ', offset=8, tags=[記号, 空白, *, *, *, *, *, *, *]}, TokenElement{surface='vs', offset=9, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}, TokenElement{surface=' ', offset=11, tags=[記号, 空白, *, *, *, *, *, *, *]}, TokenElement{surface='asciidoc', offset=12, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}], offsetMap=[LineOffset(17, 2), LineOffset(17, 3), LineOffset(17, 4), LineOffset(17, 5), LineOffset(17, 6), LineOffset(17, 7), LineOffset(17, 8), LineOffset(17, 9), LineOffset(17, 10), LineOffset(17, 11), LineOffset(17, 12), LineOffset(17, 13), LineOffset(17, 14), LineOffset(17, 15), LineOffset(17, 16), LineOffset(17, 17), LineOffset(17, 18), LineOffset(17, 19), LineOffset(17, 20), LineOffset(17, 21)]}
[2016-10-29 18:50:28.707][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=39, content='asciidocの環境', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='asciidoc', offset=0, tags=[名詞, 固有名詞, 組織, *, *, *, *, *, *]}, TokenElement{surface='', offset=8, tags=[助詞, 連体化, *, *, *, *, の, ノ, ノ]}, TokenElement{surface='環境', offset=9, tags=[名詞, 一般, *, *, *, *, 環境, カンキョウ, カンキョー]}], offsetMap=[LineOffset(39, 2), LineOffset(39, 3), LineOffset(39, 4), LineOffset(39, 5), LineOffset(39, 6), LineOffset(39, 7), LineOffset(39, 8), LineOffset(39, 9), LineOffset(39, 10), LineOffset(39, 11), LineOffset(39, 12)]}
[2016-10-29 18:50:28.711][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=50, content='iconを出す方法', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='icon', offset=0, tags=[名詞, 一般, *, *, *, *, *, *, *]}, TokenElement{surface='', offset=4, tags=[助詞, 格助詞, 一般, *, *, *, を, ヲ, ヲ]}, TokenElement{surface='出す', offset=5, tags=[動詞, 自立, *, *, 五段・サ行, 基本形, 出す, ダス, ダス]}, TokenElement{surface='方法', offset=7, tags=[名詞, 一般, *, *, *, *, 方法, ホウホウ, ホーホー]}], offsetMap=[LineOffset(50, 2), LineOffset(50, 3), LineOffset(50, 4), LineOffset(50, 5), LineOffset(50, 6), LineOffset(50, 7), LineOffset(50, 8), LineOffset(50, 9), LineOffset(50, 10)]}
[2016-10-29 18:50:28.714][WARN ] cc.redpen.parser.markdown.ToFileContentSerializer - Failed to add parent for a Section: Sentence{links=[], lineNumber=61, content='今後', startPositionOffset=2, isFirstSentence=true, tokens=[TokenElement{surface='今後', offset=0, tags=[名詞, 副詞可能, *, *, *, *, 今後, コンゴ, コンゴ]}], offsetMap=[LineOffset(61, 2), LineOffset(61, 3)]}
[2016-10-29 18:50:28.791][INFO ] org.reflections.Reflections - Reflections took 44 ms to scan 1 urls, producing 4 keys and 50 values 
[2016-10-29 18:50:28.860][INFO ] org.reflections.Reflections - Reflections took 3 ms to scan 1 urls, producing 159 keys and 162 values 
[2016-10-29 18:50:28.866][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load InvalidExpressionValidator default dictionary.
[2016-10-29 18:50:28.871][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load double negative expression rules.
[2016-10-29 18:50:28.872][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load double negative words.
[2016-10-29 18:50:28.879][INFO ] cc.redpen.util.DictionaryLoader - Succeeded to load katakana word dictionary.
[2016-10-29 18:50:28.879][INFO ] cc.redpen.validator.JavaScriptValidator - JavaScript validators directory: js
Document: asciidoc_is_good.md
    Line: 2, Offset: 0
        Sentence: 今月は技術学習をしないからってブログを書いちゃダメってわけじゃないんですがどうも滞ってますね。
            InvalidExpression: 不正な表現 "じゃない" がみつかりました。
    Line: 17, Offset: 0
        Sentence: markdown vs asciidoc
            ParagraphNumber: セクション内のパラグラフ数が最大の"5"を超えています
    Line: 44, Offset: 73
        Sentence: 以前はpython実装のasciidocで変換できたみたいですが、後発のruby製のasciidoctorのほうが楽だったのでそちらをおすすめします。
            JapaneseStyle: 不正な日本語のスタイルを発見しました "だった"
            JapaneseAmbiguousNounConjunction: 助詞「の」が連続しています: "〜変換の*製の*〜"
    Line: 57, Offset: 0
        Sentence: asciidocのheaderのメタ部分に以下の記述を書けばokです
            JapaneseAmbiguousNounConjunction: 助詞「の」が連続しています: "〜*の*のメタ部分〜"

[2016-10-29 18:50:28.938][ERROR] cc.redpen.Main - The number of errors "5" is larger than specified (limit is "1").

5個になりました!output formatをplain2にすると結果が見やすくなりましたね。

助詞の連続は厳しいところですが、納得するので残します。じゃない、という口語表現も微妙なところですね… セクション内のパラグラフももっと書いていいだろうという気がします。あとで数を調整することとします。

おわりに

とりあえず使えるところまで来ました。今後のブログ執筆はAtom+MakdownプレビューでDropboxに保存し、保存後にRedpen実行という流れでやってみます。10記事ほど書いたあと、設定ファイルがどう落ち着いたかをまとめて、文章の質や文章を書く時間、手間がどう変わったかを振り返りたいと思います。