ブログの
ブログの
また、
記事のRedPen の<wbr>警告数 / 文字数 = 警告率
で
実施した
実施する 目的
ブログ記事 の
- 警告率 の
高い 文書の 修正を 実施する ことで、 サイト全体の 文書品質を 効率良く 上げたい。 - サイト全体の
文書品質が 上がれば、 Google の 評価も 上がる (と 思う)。 - Google の
評価が 上がれば、 PageView が 増えて 広告収入が 増える。
過去文書を
実施した こと
以下、
- 前提情報と
RedPen の 設定に ついて - Markdown ファイル の
ファイルリストを 作成する - ファイルリストを
もとに、 RedPen コマンドを 実行し、 json 形式で 出力する - json 形式の
ファイルを csv ファイルに する - csv ファイル を
Google Spread Sheet に インポートする
- 前提情報と
- Markdown ファイルの
文書統計量を Python スクリプトで 収集、 csv 出力する - csv を
Google Spread Sheet に インポートする
- Markdown ファイルの
警告率
の計算 - データ可視化
RedPen の 警告情報の 収集
前提情報と RedPen の 設定に ついて
OS の
Version % sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G65
RedPen の
Vesion % redpen -v 1.10.1
出力形式の
設定
RedPen をコマンドラインで 実行する 場合、 出力形式 を 以下から 選択が できます。
Google Spread Sheet にデータを インポートしたかったので、 json
で出力しています。
値 | 解説 |
---|---|
plain | 平文 |
plain2 | 平文(文ごとのエラーを出力) |
xml | xml フォーマット |
json | json フォーマット |
json2 | json フォーマット(文ごとのエラーを出力) |
- 設定ファイル
以下 Gist にアップロードした 設定ファイルを 使用しています。 特に 変わった 設定は していないです。
RedPen の設定ファイル
Markdown ファイル の ファイルリストを 作成する
私の環境では
ディレクトリ構成の
. ├── jupyter // jupyter notebook の格納先ディレクトリ ├── blogs // blog に投稿した Markdwon ファイルの格納先ディレクトリ ├── gists // gists に投稿した ファイルの格納先ディレクトリ ├── redpen_configration // RedPen の辞書ファイルの格納先ディレクトリ ├── check_results // 集計ファイルの格納先ディレクトリ ├── redpen-conf-ja.xml // RedPen の設定ファイル ├── redpen_json_to_csv.py // json を csv に変換するスクリプト ├── calc_markdown_statistics.py // markdown の文書統計情報を計算するスクリプト
スクリプトは、
find . -name "*.md" > markdown_list.txt
more markdown_list.txt ------------------------------ ./blogs/2015/201512/wicketとdropwizardを連携する.md ./blogs/2015/201512/EclipseLinkのDDLにsemicolonを付与する.md ./blogs/2015/201512/Apache Wicket 6でRestAPIを使う.md ./blogs/2015/201512/djangoのsettings.py内で、LogHandler StreamHandlerのログ出力先を指定する.md ./blogs/2015/201512/Mezzanine HTML に Google Adsense の広告を組み込む.md ./blogs/2015/201512/java.lang.IllegalArgumentException- Invalid BSON field name java.runtime.name.md ./blogs/2015/201512/java URL文字列からクエリストリングを取得.md ./blogs/2015/201512/EclipseLink at org.eclipse.persistence.exceptions.QueryException.incorrectClassForObjectComparison(QueryException.java-601).md ./blogs/2015/201512/dropwizard Application<Configuration>の型指定を忘れる.md ./blogs/2015/201512/Java Batch Framework EasyBatch について.md ./blogs/2015/201512/morphia CompoundでUniqueなIndexを作成する.md ./blogs/2015/201512/Wicket A child with id 'xxx' already exists エラーについて.md ./blogs/2015/201512/wicketでページ内遷移を実装する.md ./blogs/2015/201512/PyGraphvizをOS X (Yosemite)のvirtualenv環境にインストールする.md ./blogs/2015/201512/wicket bodyタグのcssを切り替える.md ------------------------------
ファイルパス記載は、
ファイルリストを もとに、 RedPen コマンドを 実行し、 json 形式で 出力する
ファイルリストを
- exec_check_redpen.sh
#!/bin/sh MARKDOWN_LIST="markdown_list.txt" CHECK_RESULT="./check_results/redpen_results.json" # 前回記録を削除 rm -f $CHECK_RESULT cat $MARKDOWN_LIST | while read line do redpen -t info -c redpen-conf-ja.xml -f markdown "$line" --r json >> $CHECK_RESULT done
ファイルリストの
sh exec_check_redpen.sh
スクリプトを
[{"document":"wicketとdropwizardを連携する.md","errors":[{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Error","validator":"SentenceLength","lineNum":5,"sentenceStartColumnNum":0,"message":"The length of the sentence (173) exceeds the maximum of 150."},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Error","validator":"CommaNumber","lineNum":5,"sentenceStartColumnNum":0,"message":"The number of commas (4) exceeds the maximum of 3."},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Warn","endPosition":{"offset":10,"lineNum":6},"validator":"SpaceBetweenAlphabeticalWord","lineNum":5,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":9,"lineNum":6}},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Warn","endPosition":{"offset":5,"lineNum":7},"validator":"SpaceBetweenAlphabeticalWord","lineNum":5,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":4,"lineNum":7}},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Warn","endPosition":{"offset":11,"lineNum":7},"validator":"SpaceBetweenAlphabeticalWord","lineNum":5,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":10,"lineNum":7}},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Warn","endPosition":{"offset":31,"lineNum":7},"validator":"SpaceBetweenAlphabeticalWord","lineNum":5,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":30,"lineNum":7}},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Warn","endPosition":{"offset":32,"lineNum":7},"validator":"SpaceBetweenAlphabeticalWord","lineNum":5,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":31,"lineNum":7}},{"sentence":"wicket guice glassfish の組み合わせでアプリ構築をしていたのですが、 glassfishだとデプロイが遅い(ような気がした)ため、 組み込みTomcatで動かしたくなり、Spring BootがDropwizardか迷ったあげく、 wicket guice dropwizard の組み合わせで動くようにしてみました。","level":"Warn","endPosition":{"offset":42,"lineNum":7},"validator":"SpaceBetweenAlphabeticalWord","lineNum":5,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":41,"lineNum":7}},{"sentence":"作成したコード一式は、Githubに置きました。","level":"Warn","endPosition":{"offset":18,"lineNum":10},"validator":"SpaceBetweenAlphabeticalWord","lineNum":10,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":17,"lineNum":10}},{"sentence":"wicketとdropwizard,guiceを連携する","level":"Warn","endPosition":{"offset":9,"lineNum":3},"validator":"SpaceBetweenAlphabeticalWord","lineNum":3,"sentenceStartColumnNum":2,"message":"Space not present after an alphabetical word.","startPosition":{"offset":8,"lineNum":3}},{"sentence":"wicketとdropwizard,guiceを連携する","level":"Warn","endPosition":{"offset":10,"lineNum":3},"validator":"SpaceBetweenAlphabeticalWord","lineNum":3,"sentenceStartColumnNum":2,"message":"Space not present before an alphabetical word.","startPosition":{"offset":9,"lineNum":3}},{"sentence":"wicketとdropwizard,guiceを連携する","level":"Warn","endPosition":{"offset":26,"lineNum":3},"validator":"SpaceBetweenAlphabeticalWord","lineNum":3,"sentenceStartColumnNum":2,"message":"Space not present after an alphabetical word.","startPosition":{"offset":25,"lineNum":3}},{"sentence":"wicketとdropwizard,guiceを連携する","level":"Error","endPosition":{"offset":20,"lineNum":3},"validator":"InvalidSymbol","lineNum":3,"sentenceStartColumnNum":2,"message":"Found invalid symbol \",\".","startPosition":{"offset":19,"lineNum":3}},{"sentence":"wicketとdropwizard,guiceを連携する","level":"Error","endPosition":{"offset":20,"lineNum":3},"validator":"InvalidSymbol","lineNum":3,"sentenceStartColumnNum":2,"message":"Found invalid symbol \",\".","startPosition":{"offset":19,"lineNum":3}},{"sentence":"gradleでDropwizard ","level":"Warn","endPosition":{"offset":11,"lineNum":20},"validator":"SpaceBetweenAlphabeticalWord","lineNum":20,"sentenceStartColumnNum":4,"message":"Space not present after an alphabetical word.","startPosition":{"offset":10,"lineNum":20}},{"sentence":"gradleでDropwizard ","level":"Warn","endPosition":{"offset":12,"lineNum":20},"validator":"SpaceBetweenAlphabeticalWord","lineNum":20,"sentenceStartColumnNum":4,"message":"Space not present before an alphabetical word.","startPosition":{"offset":11,"lineNum":20}},{"sentence":"Wicketのquickstartプロジェクト(Maven)をGradleに移行する ","level":"Warn","endPosition":{"offset":11,"lineNum":22},"validator":"SpaceBetweenAlphabeticalWord","lineNum":22,"sentenceStartColumnNum":4,"message":"Space not present after an alphabetical word.","startPosition":{"offset":10,"lineNum":22}},{"sentence":"Wicketのquickstartプロジェクト(Maven)をGradleに移行する ","level":"Warn","endPosition":{"offset":12,"lineNum":22},"validator":"SpaceBetweenAlphabeticalWord","lineNum":22,"sentenceStartColumnNum":4,"message":"Space not present before an alphabetical word.","startPosition":{"offset":11,"lineNum":22}},{"sentence":"Wicketのquickstartプロジェクト(Maven)をGradleに移行する ","level":"Warn","endPosition":{"offset":22,"lineNum":22},"validator":"SpaceBetweenAlphabeticalWord","lineNum":22,"sentenceStartColumnNum":4,"message":"Space not present after an alphabetical word.","startPosition":{"offset":21,"lineNum":22}},{"sentence":"Wicketのquickstartプロジェクト(Maven)をGradleに移行する ","level":"Warn","endPosition":{"offset":36,"lineNum":22},"validator":"SpaceBetweenAlphabeticalWord","lineNum":22,"sentenceStartColumnNum":4,"message":"Space not present before an alphabetical word.","startPosition":{"offset":35,"lineNum":22}},{"sentence":"Wicketのquickstartプロジェクト(Maven)をGradleに移行する ","level":"Warn","endPosition":{"offset":42,"lineNum":22},"validator":"SpaceBetweenAlphabeticalWord","lineNum":22,"sentenceStartColumnNum":4,"message":"Space not present after an alphabetical word.","startPosition":{"offset":41,"lineNum":22}},{"sentence":"3. dropwizard-wicketのFolk後に実施したこと","level":"Warn","endPosition":{"offset":76,"lineNum":30},"validator":"SpaceBetweenAlphabeticalWord","lineNum":30,"sentenceStartColumnNum":5,"message":"Space not present after an alphabetical word.","startPosition":{"offset":75,"lineNum":30}},{"sentence":"3. dropwizard-wicketのFolk後に実施したこと","level":"Warn","endPosition":{"offset":77,"lineNum":30},"validator":"SpaceBetweenAlphabeticalWord","lineNum":30,"sentenceStartColumnNum":5,"message":"Space not present before an alphabetical word.","startPosition":{"offset":76,"lineNum":30}},{"sentence":"3. dropwizard-wicketのFolk後に実施したこと","level":"Warn","endPosition":{"offset":81,"lineNum":30},"validator":"SpaceBetweenAlphabeticalWord","lineNum":30,"sentenceStartColumnNum":5,"message":"Space not present after an alphabetical word.","startPosition":{"offset":80,"lineNum":30}},{"sentence":"3.1. build.gradleの設定、編集","level":"Warn","endPosition":{"offset":23,"lineNum":32},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":5,"message":"Space not present after an alphabetical word.","startPosition":{"offset":22,"lineNum":32}},{"sentence":"Folk元のプロジェクトがMavenプロジェクトのため、Gradleプロジェクトへ変換を行いました。","level":"Warn","endPosition":{"offset":5,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":4,"lineNum":36}},{"sentence":"Folk元のプロジェクトがMavenプロジェクトのため、Gradleプロジェクトへ変換を行いました。","level":"Warn","endPosition":{"offset":14,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":13,"lineNum":36}},{"sentence":"Folk元のプロジェクトがMavenプロジェクトのため、Gradleプロジェクトへ変換を行いました。","level":"Warn","endPosition":{"offset":19,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":18,"lineNum":36}},{"sentence":"Folk元のプロジェクトがMavenプロジェクトのため、Gradleプロジェクトへ変換を行いました。","level":"Warn","endPosition":{"offset":35,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":34,"lineNum":36}},{"sentence":"3.1.1. MavenプロジェクトをGradleプロジェクトに変換","level":"Warn","endPosition":{"offset":19,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":18,"lineNum":34}},{"sentence":"3.1.1. MavenプロジェクトをGradleプロジェクトに変換","level":"Warn","endPosition":{"offset":26,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":6,"message":"Space not present before an alphabetical word.","startPosition":{"offset":25,"lineNum":34}},{"sentence":"3.1.1. MavenプロジェクトをGradleプロジェクトに変換","level":"Warn","endPosition":{"offset":32,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":31,"lineNum":34}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":11,"lineNum":46},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":10,"lineNum":46}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":12,"lineNum":46},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":11,"lineNum":46}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":18,"lineNum":46},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":17,"lineNum":46}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":19,"lineNum":46},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":18,"lineNum":46}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":26,"lineNum":46},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":25,"lineNum":46}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":6,"lineNum":47},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":5,"lineNum":47}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Warn","endPosition":{"offset":34,"lineNum":47},"validator":"SpaceBetweenAlphabeticalWord","lineNum":46,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":33,"lineNum":47}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Error","endPosition":{"offset":21,"lineNum":47},"validator":"InvalidSymbol","lineNum":46,"sentenceStartColumnNum":0,"message":"Found invalid symbol \",\".","startPosition":{"offset":20,"lineNum":47}},{"sentence":"dropwizardとwicketのversionは新しいものに変更し、 guiceと、guice-servlet,wicket-guiceを依存関係に追加しました。","level":"Error","endPosition":{"offset":21,"lineNum":47},"validator":"InvalidSymbol","lineNum":46,"sentenceStartColumnNum":0,"message":"Found invalid symbol \",\".","startPosition":{"offset":20,"lineNum":47}},{"sentence":"3.1.2. build.gradleのdependenciesの記述を以下の記述に変更","level":"Warn","validator":"JapaneseAmbiguousNounConjunction","lineNum":43,"sentenceStartColumnNum":6,"message":"Found ambiguous noun conjunction: \"...3のdependenciesの記述...\""},{"sentence":"3.1.2. build.gradleのdependenciesの記述を以下の記述に変更","level":"Warn","endPosition":{"offset":26,"lineNum":43},"validator":"SpaceBetweenAlphabeticalWord","lineNum":43,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":25,"lineNum":43}},{"sentence":"3.1.2. build.gradleのdependenciesの記述を以下の記述に変更","level":"Warn","endPosition":{"offset":27,"lineNum":43},"validator":"SpaceBetweenAlphabeticalWord","lineNum":43,"sentenceStartColumnNum":6,"message":"Space not present before an alphabetical word.","startPosition":{"offset":26,"lineNum":43}},{"sentence":"3.1.2. build.gradleのdependenciesの記述を以下の記述に変更","level":"Warn","endPosition":{"offset":39,"lineNum":43},"validator":"SpaceBetweenAlphabeticalWord","lineNum":43,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":38,"lineNum":43}},{"sentence":"pluginの記述","level":"Warn","endPosition":{"offset":7,"lineNum":62},"validator":"SpaceBetweenAlphabeticalWord","lineNum":62,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":6,"lineNum":62}},{"sentence":"shadowJarタスクの記述 ","level":"Warn","endPosition":{"offset":10,"lineNum":70},"validator":"SpaceBetweenAlphabeticalWord","lineNum":70,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":9,"lineNum":70}},{"sentence":"3.1.3. plugin記述にshadowを追加して、shadowjarタスクを使用可能にする。","level":"Warn","endPosition":{"offset":20,"lineNum":60},"validator":"SpaceBetweenAlphabeticalWord","lineNum":60,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":19,"lineNum":60}},{"sentence":"3.1.3. plugin記述にshadowを追加して、shadowjarタスクを使用可能にする。","level":"Warn","endPosition":{"offset":23,"lineNum":60},"validator":"SpaceBetweenAlphabeticalWord","lineNum":60,"sentenceStartColumnNum":6,"message":"Space not present before an alphabetical word.","startPosition":{"offset":22,"lineNum":60}},{"sentence":"3.1.3. plugin記述にshadowを追加して、shadowjarタスクを使用可能にする。","level":"Warn","endPosition":{"offset":29,"lineNum":60},"validator":"SpaceBetweenAlphabeticalWord","lineNum":60,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":28,"lineNum":60}},{"sentence":"3.1.3. plugin記述にshadowを追加して、shadowjarタスクを使用可能にする。","level":"Warn","endPosition":{"offset":44,"lineNum":60},"validator":"SpaceBetweenAlphabeticalWord","lineNum":60,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":43,"lineNum":60}},{"sentence":"3.2. Folk元のプログラムの変更点","level":"Warn","endPosition":{"offset":15,"lineNum":83},"validator":"SpaceBetweenAlphabeticalWord","lineNum":83,"sentenceStartColumnNum":5,"message":"Space not present after an alphabetical word.","startPosition":{"offset":14,"lineNum":83}},{"sentence":"Folk元のクラスは、Guiceを使用しない実装だったので、 WicketBundle.javaの以下の点を修正しました。","level":"Warn","endPosition":{"offset":27,"lineNum":86},"validator":"JapaneseStyle","lineNum":86,"sentenceStartColumnNum":0,"message":"Found invalid Japanese Style \"だった\"","startPosition":{"offset":24,"lineNum":86}},{"sentence":"Folk元のクラスは、Guiceを使用しない実装だったので、 WicketBundle.javaの以下の点を修正しました。","level":"Warn","validator":"JapaneseAmbiguousNounConjunction","lineNum":86,"sentenceStartColumnNum":0,"message":"Found ambiguous noun conjunction: \"...Guiceの以下の点...\""},{"sentence":"Folk元のクラスは、Guiceを使用しない実装だったので、 WicketBundle.javaの以下の点を修正しました。","level":"Warn","endPosition":{"offset":5,"lineNum":86},"validator":"SpaceBetweenAlphabeticalWord","lineNum":86,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":4,"lineNum":86}},{"sentence":"Folk元のクラスは、Guiceを使用しない実装だったので、 WicketBundle.javaの以下の点を修正しました。","level":"Warn","endPosition":{"offset":17,"lineNum":86},"validator":"SpaceBetweenAlphabeticalWord","lineNum":86,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":16,"lineNum":86}},{"sentence":"Folk元のクラスは、Guiceを使用しない実装だったので、 WicketBundle.javaの以下の点を修正しました。","level":"Warn","endPosition":{"offset":18,"lineNum":87},"validator":"SpaceBetweenAlphabeticalWord","lineNum":86,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":17,"lineNum":87}},{"sentence":"SessionHandlerは設定しないと、","level":"Warn","endPosition":{"offset":15,"lineNum":94},"validator":"SpaceBetweenAlphabeticalWord","lineNum":94,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":14,"lineNum":94}},{"sentence":"3.2.1. WicketBundleの記述を変更","level":"Warn","endPosition":{"offset":26,"lineNum":85},"validator":"SpaceBetweenAlphabeticalWord","lineNum":85,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":25,"lineNum":85}},{"sentence":"FilterHolderに設定するFilterクラスをGuiceFilterに変更。","level":"Warn","endPosition":{"offset":16,"lineNum":89},"validator":"SpaceBetweenAlphabeticalWord","lineNum":89,"sentenceStartColumnNum":3,"message":"Space not present after an alphabetical word.","startPosition":{"offset":15,"lineNum":89}},{"sentence":"FilterHolderに設定するFilterクラスをGuiceFilterに変更。","level":"Warn","endPosition":{"offset":21,"lineNum":89},"validator":"SpaceBetweenAlphabeticalWord","lineNum":89,"sentenceStartColumnNum":3,"message":"Space not present before an alphabetical word.","startPosition":{"offset":20,"lineNum":89}},{"sentence":"FilterHolderに設定するFilterクラスをGuiceFilterに変更。","level":"Warn","endPosition":{"offset":27,"lineNum":89},"validator":"SpaceBetweenAlphabeticalWord","lineNum":89,"sentenceStartColumnNum":3,"message":"Space not present after an alphabetical word.","startPosition":{"offset":26,"lineNum":89}},{"sentence":"FilterHolderに設定するFilterクラスをGuiceFilterに変更。","level":"Warn","endPosition":{"offset":31,"lineNum":89},"validator":"SpaceBetweenAlphabeticalWord","lineNum":89,"sentenceStartColumnNum":3,"message":"Space not present before an alphabetical word.","startPosition":{"offset":30,"lineNum":89}},{"sentence":"FilterHolderに設定するFilterクラスをGuiceFilterに変更。","level":"Warn","endPosition":{"offset":42,"lineNum":89},"validator":"SpaceBetweenAlphabeticalWord","lineNum":89,"sentenceStartColumnNum":3,"message":"Space not present after an alphabetical word.","startPosition":{"offset":41,"lineNum":89}},{"sentence":"contextにGuiceServletConfigの設定する処理を追加。","level":"Warn","endPosition":{"offset":11,"lineNum":90},"validator":"SpaceBetweenAlphabeticalWord","lineNum":90,"sentenceStartColumnNum":3,"message":"Space not present after an alphabetical word.","startPosition":{"offset":10,"lineNum":90}},{"sentence":"contextにGuiceServletConfigの設定する処理を追加。","level":"Warn","endPosition":{"offset":12,"lineNum":90},"validator":"SpaceBetweenAlphabeticalWord","lineNum":90,"sentenceStartColumnNum":3,"message":"Space not present before an alphabetical word.","startPosition":{"offset":11,"lineNum":90}},{"sentence":"contextにGuiceServletConfigの設定する処理を追加。","level":"Warn","endPosition":{"offset":30,"lineNum":90},"validator":"SpaceBetweenAlphabeticalWord","lineNum":90,"sentenceStartColumnNum":3,"message":"Space not present after an alphabetical word.","startPosition":{"offset":29,"lineNum":90}},{"sentence":"SessionHandlerの設定処理を追加。","level":"Warn","endPosition":{"offset":18,"lineNum":91},"validator":"SpaceBetweenAlphabeticalWord","lineNum":91,"sentenceStartColumnNum":3,"message":"Space not present after an alphabetical word.","startPosition":{"offset":17,"lineNum":91}},{"sentence":"3.2.2. SampleApplicationの追加","level":"Warn","endPosition":{"offset":31,"lineNum":103},"validator":"SpaceBetweenAlphabeticalWord","lineNum":103,"sentenceStartColumnNum":6,"message":"Space not present after an alphabetical word.","startPosition":{"offset":30,"lineNum":103}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Error","validator":"SentenceLength","lineNum":110,"sentenceStartColumnNum":29,"message":"The length of the sentence (157) exceeds the maximum of 150."},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Error","validator":"CommaNumber","lineNum":110,"sentenceStartColumnNum":29,"message":"The number of commas (6) exceeds the maximum of 3."},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","validator":"DoubledConjunctiveParticleGa","lineNum":110,"sentenceStartColumnNum":29,"message":"Found multiple conjunctive particle: \"が\""},{"sentence":"-----------------------------------------------------GuiceFilter経由で、WicketFilterの設定?","level":"Warn","endPosition":{"offset":12,"lineNum":109},"validator":"SpaceBetweenAlphabeticalWord","lineNum":108,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":11,"lineNum":109}},{"sentence":"-----------------------------------------------------GuiceFilter経由で、WicketFilterの設定?","level":"Warn","endPosition":{"offset":28,"lineNum":109},"validator":"SpaceBetweenAlphabeticalWord","lineNum":108,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":27,"lineNum":109}},{"sentence":"とInjectorの取得しているのが、 結構面倒くさく、意味がぱっと見でわかりにくい気がしました。","level":"Warn","endPosition":{"offset":33,"lineNum":109},"validator":"SpaceBetweenAlphabeticalWord","lineNum":109,"sentenceStartColumnNum":31,"message":"Space not present before an alphabetical word.","startPosition":{"offset":32,"lineNum":109}},{"sentence":"とInjectorの取得しているのが、 結構面倒くさく、意味がぱっと見でわかりにくい気がしました。","level":"Warn","endPosition":{"offset":41,"lineNum":109},"validator":"SpaceBetweenAlphabeticalWord","lineNum":109,"sentenceStartColumnNum":31,"message":"Space not present after an alphabetical word.","startPosition":{"offset":40,"lineNum":109}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":5,"lineNum":111},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present after an alphabetical word.","startPosition":{"offset":4,"lineNum":111}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":21,"lineNum":111},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present after an alphabetical word.","startPosition":{"offset":20,"lineNum":111}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":22,"lineNum":111},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present before an alphabetical word.","startPosition":{"offset":21,"lineNum":111}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":28,"lineNum":111},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present after an alphabetical word.","startPosition":{"offset":27,"lineNum":111}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":29,"lineNum":111},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present before an alphabetical word.","startPosition":{"offset":28,"lineNum":111}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":40,"lineNum":111},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present after an alphabetical word.","startPosition":{"offset":39,"lineNum":111}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":28,"lineNum":112},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present before an alphabetical word.","startPosition":{"offset":27,"lineNum":112}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":36,"lineNum":112},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present after an alphabetical word.","startPosition":{"offset":35,"lineNum":112}},{"sentence":" Folk元だと、WicketBundleにWicketのApplicationクラスを設定して、インスタンス生成する作りになっていましたが、そのへんをInjector経由での生成にすると、 GuiceFilter使わなくても、やりたいことは実現できそうな気がしますが、 そこは思っただけで実現していません。","level":"Warn","endPosition":{"offset":12,"lineNum":113},"validator":"SpaceBetweenAlphabeticalWord","lineNum":110,"sentenceStartColumnNum":29,"message":"Space not present after an alphabetical word.","startPosition":{"offset":11,"lineNum":113}},{"sentence":"wicket guicecomponentinjectorはcustominjectionsを無視する","level":"Warn","endPosition":{"offset":31,"lineNum":118},"validator":"SpaceBetweenAlphabeticalWord","lineNum":118,"sentenceStartColumnNum":1,"message":"Space not present after an alphabetical word.","startPosition":{"offset":30,"lineNum":118}},{"sentence":"wicket guicecomponentinjectorはcustominjectionsを無視する","level":"Warn","endPosition":{"offset":32,"lineNum":118},"validator":"SpaceBetweenAlphabeticalWord","lineNum":118,"sentenceStartColumnNum":1,"message":"Space not present before an alphabetical word.","startPosition":{"offset":31,"lineNum":118}},{"sentence":"wicket guicecomponentinjectorはcustominjectionsを無視する","level":"Warn","endPosition":{"offset":48,"lineNum":118},"validator":"SpaceBetweenAlphabeticalWord","lineNum":118,"sentenceStartColumnNum":1,"message":"Space not present after an alphabetical word.","startPosition":{"offset":47,"lineNum":118}}]}] [{"document":"EclipseLinkのDDLにsemicolonを付与する.md","errors":[{"sentence":"","level":"Error","validator":"DuplicatedSection","lineNum":0,"sentenceStartColumnNum":0,"message":"Found duplicated section (starts from line 8)."},{"sentence":"notebook: 03.blog","level":"Error","validator":"VoidSection","lineNum":4,"sentenceStartColumnNum":0,"message":"The section is void."},{"sentence":"記事情報","level":"Error","validator":"DuplicatedSection","lineNum":8,"sentenceStartColumnNum":2,"message":"Found duplicated section (starts from line 0)."},{"sentence":"status:pubic","level":"Error","validator":"VoidSection","lineNum":12,"sentenceStartColumnNum":0,"message":"The section is void."},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":19,"lineNum":2},"validator":"SpaceBetweenAlphabeticalWord","lineNum":1,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":18,"lineNum":2}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":20,"lineNum":2},"validator":"SpaceBetweenAlphabeticalWord","lineNum":1,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":19,"lineNum":2}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":23,"lineNum":2},"validator":"SpaceBetweenAlphabeticalWord","lineNum":1,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":22,"lineNum":2}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":24,"lineNum":2},"validator":"SpaceBetweenAlphabeticalWord","lineNum":1,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":23,"lineNum":2}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":33,"lineNum":2},"validator":"SpaceBetweenAlphabeticalWord","lineNum":1,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":32,"lineNum":2}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":1,"lineNum":3},"validator":"SpaceBetweenAlphabeticalWord","lineNum":1,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":0,"lineNum":3}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":19,"lineNum":10},"validator":"SpaceBetweenAlphabeticalWord","lineNum":9,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":18,"lineNum":10}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":20,"lineNum":10},"validator":"SpaceBetweenAlphabeticalWord","lineNum":9,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":19,"lineNum":10}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":23,"lineNum":10},"validator":"SpaceBetweenAlphabeticalWord","lineNum":9,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":22,"lineNum":10}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":24,"lineNum":10},"validator":"SpaceBetweenAlphabeticalWord","lineNum":9,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":23,"lineNum":10}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":33,"lineNum":10},"validator":"SpaceBetweenAlphabeticalWord","lineNum":9,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":32,"lineNum":10}},{"sentence":"---title: EclipseLinkのDDLにsemicolonを付与するtags: []","level":"Warn","endPosition":{"offset":1,"lineNum":11},"validator":"SpaceBetweenAlphabeticalWord","lineNum":9,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":0,"lineNum":11}},{"sentence":"EclipseLinkでEntityクラスから、DDLを生成したところ、DDLの行末に;(セミコロン)が付与されないので、どうしたら付与されるか調べました。","level":"Warn","endPosition":{"offset":12,"lineNum":18},"validator":"SpaceBetweenAlphabeticalWord","lineNum":18,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":11,"lineNum":18}},{"sentence":"EclipseLinkでEntityクラスから、DDLを生成したところ、DDLの行末に;(セミコロン)が付与されないので、どうしたら付与されるか調べました。","level":"Warn","endPosition":{"offset":13,"lineNum":18},"validator":"SpaceBetweenAlphabeticalWord","lineNum":18,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":12,"lineNum":18}},{"sentence":"EclipseLinkでEntityクラスから、DDLを生成したところ、DDLの行末に;(セミコロン)が付与されないので、どうしたら付与されるか調べました。","level":"Warn","endPosition":{"offset":19,"lineNum":18},"validator":"SpaceBetweenAlphabeticalWord","lineNum":18,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":18,"lineNum":18}},{"sentence":"EclipseLinkでEntityクラスから、DDLを生成したところ、DDLの行末に;(セミコロン)が付与されないので、どうしたら付与されるか調べました。","level":"Warn","endPosition":{"offset":28,"lineNum":18},"validator":"SpaceBetweenAlphabeticalWord","lineNum":18,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":27,"lineNum":18}},{"sentence":"EclipseLinkでEntityクラスから、DDLを生成したところ、DDLの行末に;(セミコロン)が付与されないので、どうしたら付与されるか調べました。","level":"Warn","endPosition":{"offset":40,"lineNum":18},"validator":"SpaceBetweenAlphabeticalWord","lineNum":18,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":39,"lineNum":18}},{"sentence":"-----------------------------META-INF/persistence.xmlに、","level":"Warn","endPosition":{"offset":25,"lineNum":22},"validator":"SpaceBetweenAlphabeticalWord","lineNum":21,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":24,"lineNum":22}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Error","validator":"SentenceLength","lineNum":32,"sentenceStartColumnNum":0,"message":"The length of the sentence (224) exceeds the maximum of 150."},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Error","validator":"CommaNumber","lineNum":32,"sentenceStartColumnNum":0,"message":"The number of commas (6) exceeds the maximum of 3."},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","validator":"JapaneseAmbiguousNounConjunction","lineNum":32,"sentenceStartColumnNum":0,"message":"Found ambiguous noun conjunction: \"...記事のクラスのサブクラス...\""},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","validator":"JapaneseAmbiguousNounConjunction","lineNum":32,"sentenceStartColumnNum":0,"message":"Found ambiguous noun conjunction: \"...記事のクラスのサブクラスpersistenceのバグのため...\""},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":31,"lineNum":33},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":30,"lineNum":33}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":151,"lineNum":33},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":150,"lineNum":33}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":192,"lineNum":33},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":191,"lineNum":33}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":224,"lineNum":33},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":223,"lineNum":33}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":225,"lineNum":33},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present before an alphabetical word.","startPosition":{"offset":224,"lineNum":33}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":252,"lineNum":33},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":251,"lineNum":33}},{"sentence":"-----------------------------最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく eclipselinkのバグのため?","level":"Warn","endPosition":{"offset":13,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":32,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":12,"lineNum":34}},{"sentence":"、サブクラスを作ったところで付与できず、あきらめてEclipseLinkをversionUpしました。","level":"Warn","endPosition":{"offset":92,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":66,"message":"Space not present before an alphabetical word.","startPosition":{"offset":91,"lineNum":34}},{"sentence":"、サブクラスを作ったところで付与できず、あきらめてEclipseLinkをversionUpしました。","level":"Warn","endPosition":{"offset":103,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":66,"message":"Space not present after an alphabetical word.","startPosition":{"offset":102,"lineNum":34}},{"sentence":"、サブクラスを作ったところで付与できず、あきらめてEclipseLinkをversionUpしました。","level":"Warn","endPosition":{"offset":104,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":66,"message":"Space not present before an alphabetical word.","startPosition":{"offset":103,"lineNum":34}},{"sentence":"、サブクラスを作ったところで付与できず、あきらめてEclipseLinkをversionUpしました。","level":"Warn","endPosition":{"offset":113,"lineNum":34},"validator":"SpaceBetweenAlphabeticalWord","lineNum":34,"sentenceStartColumnNum":66,"message":"Space not present after an alphabetical word.","startPosition":{"offset":112,"lineNum":34}},{"sentence":"-----------------------------DDL生成に使用しているコードもついでに貼り付けます。","level":"Warn","endPosition":{"offset":4,"lineNum":38},"validator":"SpaceBetweenAlphabeticalWord","lineNum":37,"sentenceStartColumnNum":0,"message":"Space not present after an alphabetical word.","startPosition":{"offset":3,"lineNum":38}},{"sentence":"Javaからddl生成を行う","level":"Warn","endPosition":{"offset":9,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":4,"message":"Space not present after an alphabetical word.","startPosition":{"offset":8,"lineNum":36}},{"sentence":"Javaからddl生成を行う","level":"Warn","endPosition":{"offset":11,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":4,"message":"Space not present before an alphabetical word.","startPosition":{"offset":10,"lineNum":36}},{"sentence":"Javaからddl生成を行う","level":"Warn","endPosition":{"offset":14,"lineNum":36},"validator":"SpaceBetweenAlphabeticalWord","lineNum":36,"sentenceStartColumnNum":4,"message":"Space not present after an alphabetical word.","startPosition":{"offset":13,"lineNum":36}},{"sentence":"補足 DB接続情報はMETA-INF/persistence.xmlに書きつけてあります。","level":"Warn","endPosition":{"offset":3,"lineNum":73},"validator":"SpaceBetweenAlphabeticalWord","lineNum":72,"sentenceStartColumnNum":2,"message":"Space not present after an alphabetical word.","startPosition":{"offset":2,"lineNum":73}},{"sentence":"補足 DB接続情報はMETA-INF/persistence.xmlに書きつけてあります。","level":"Warn","endPosition":{"offset":8,"lineNum":73},"validator":"SpaceBetweenAlphabeticalWord","lineNum":72,"sentenceStartColumnNum":2,"message":"Space not present before an alphabetical word.","startPosition":{"offset":7,"lineNum":73}},{"sentence":"補足 DB接続情報はMETA-INF/persistence.xmlに書きつけてあります。","level":"Warn","endPosition":{"offset":32,"lineNum":73},"validator":"SpaceBetweenAlphabeticalWord","lineNum":72,"sentenceStartColumnNum":2,"message":"Space not present after an alphabetical word.","startPosition":{"offset":31,"lineNum":73}}]}] ...
json 形式の ファイルを csv ファイルに する
- redpen_json_to_csv.py
以下 Gist にアップロード に 作成した スクリプトを アップロードしました。
RedPen のJson 形式の 出力ファイルを CSVに 変換する スクリプト
スクリプトは、以下のように 実行します。 実行後は、python3.6 redpen_json_to_csv.py
以下のような csv ファイルが 出力されます。
redpen_results.csv
csv ファイル を Google Spread Sheet に インポートする
作成した csv ファイルを
当初 json ファイルを
Google シートで
文書の 統計量の 収集
Markdown ファイルの 文書統計量を Python スクリプトで 収集、 csv 出力する
Markdown ファイルの
- 取得する
指標 - 文字数
- 句読点数
- h1の
数 - h2の
数 - h3の
数 - h4の
数 - h5の
数 - h6の
数 - tableの
数 - liの
数 - dtの
数 - imgの
数 - aの数
スクリプトは
Markdown をmarkdown
とBeautifulSoup4
を
使用する
Markdown 文書の
以下の
python3.6 calc_markdown_statistics.py
実行後には
markdown_stats.csv
csv を Google Spread Sheet に インポートする
上記で
収集結果の 可視化
作成した 2つの
警告率
の 計算
QUERY 関数で
集計
新規でシートを 作り、 redpen_results.csv
をスプレッドシート 上で、 以下の、 QUERY 関数で 集計します。
A列 は、ファイル名で、 H列は、 sentenceStartColumnNum
です。=QUERY(report!A1:K16438,"select A, count(H) group by A order by A",true)
*VLOOKUPで、
文字数を 取得。 警告数を、 文字数で 割って、 100を かける *
markdown_stats.csv
からVLOOKUP で 行数を 取得します。
警告数を、文字数で 割って、 100を かけると、 1文字あたりの 警告の 発生率が 取得できます。 警告率の
集計結果
警告率の集計結果は 以下の 通りです。
警告率の高い 文書が 幾つか 存在して、 平均値が 上振れています。
統計量 | 数値 |
---|---|
合計 | 478.89 |
第三四分位 | 1.20 |
平均 | 0.99 |
中央値 | 0.71 |
第一四分位 | 0.43 |
最小値 | 0.03 |
最大値 | 8.21 |
データの数 | 487 |
データ可視化
Google Data Studio で
警告ごとの
合計
SpaceBetweenAlphabeticalWord
、InvalidSymbol
、SuggestExpression
の数が 多いです。
よく出る 警告なのかと 思われます。 エラーレベルごとの
集計
Warn
、Error
レベルごとの集計です。 文書ごとの エラー数は まちまちで、 エラーが 多い 文書は 要修正文書かと 思います。 句読点数と
警告の 散布図
句読点数と警告の 散布図です。 句読点数が 増えると、 警告数は 増えているようです。
句読点が多い 文書を 修正するのと、 誤差が 大きい 文書は 何かありそうなので、 確認してみようかと 思います。 警告率と
文字数の 散布図
横長で若干見づらいですが、 縦軸が 警告率で、 横軸が 文字数の 散布図です。
文字数が多いからと いって 警告が 多いわけではなさそうです。
一部、文字数の 割に 警告が 多い 文書が あることが わかるので 対象文書は 見直した ほうが いいように 思いました。
実施後の 感想
以下、
結構手作業が
入るので、 もう 少し ツールで 自動化できないか 検討する。 CI に 組み込みたい。 ステップカウントと、
静的解析ツールの 組み合わせに 学びが あるように、 文章量と、 文章の 解析結果にも 学びが あった。しかし、 この アウトプットだと ブログを 見ている 人には 伝わらないかもしれない。 思いの
ほか、 偏りが あった。 外れ 値っぽい 文書は 何かあるので 修正する。 直にスプレッドシート への
書き込みは 時間が かかって 使い ものに ならなかった。 gspread が 遅いのかもしれない。 別の ライブラリだと 上手く いく ? 可視化して
終わりではないので、 きちんと 修正する。そしてまた 可視化する。
参考
以下、
- alvinwan/md2py: converts markdown into a Python parse tree
- Pythonで
Googleスプレッドシートに 書き込みを する 方法 - gspread
ライブラリの 使い 方まとめ! Pythonで スプレッドシートを 操作する | たぬ ハック - Office Space : Microsoft Word ドキュメントの
統計情報を 取得する - QUERY - ドキュメント エディタ ヘルプ
- RedPen 1.10 ドキュメント
以上です。
コメント