Releases: nwiizo/suiko
Release list
v0.3.8
一つの名詞に長い連体修飾節が前置された文を見直せるようになりました。読解負荷レーン(--reading-load)のlong_attributive_spanが、述語を2つ以上含む30字以上の修飾節が一つの実質名詞に係り、その名詞句が主節の項になる文をinfoで指さします。「〜すること」「〜する必要がある」のような形式名詞・枕の名詞と、「〜という関係である」の述語名詞は対象外です。削除済みのnested_attributive(連体形の個数)とは異なり、一つの名詞が背負う修飾節の長さと述語数を測ります。
採用の経緯と実測(ラベル付きサンプル fire 10/10・silent 0/10、書籍原稿4,653文で2件、青空文庫の随筆2,923文で1.5%、外部の人間文書25,274文で0.49%)は校正記録に記録しています。suiko-eval sweep --rule long-attributive-spanで閾値を校正できます。
README、Agent Skill、カタログ(B2/B5)、revision-guide、translationese、manual-checklistも更新しました。JSONの形式、既存の設定、Rust公開型Findingのフィールドは変わりません。disabled_rules = ["long_attributive_span"]で無効化できます。旧版のbaselineはv0.3.8で作り直してください。
検証: 全133テスト、fmt、Clippy、境界fixtureの読解負荷0件、配布パッケージのビルド。
v0.3.7
プロジェクト固有の言い回しを、活用形も含めて探せるようになりました。.suiko.tomlのword_rulesで表層・基本形・品詞を指定すると、custom_wording/<id>として原文範囲と確認理由を返します。個別許可、前回比較、終了コード、GitHub注釈・SARIFにも対応します。
短い主題の直後の読点を見直すshort_topic_commaを追加しました。--experimental限定のinfoで、自動修正は付きません。採用理由と実文書での検証の限界は比較調査に記録しています。
READMEの設定例とインストール手順も更新しました。既存の設定、通常ルールのJSON、Rust公開型Findingのフィールドは変わりません。旧版のbaselineはv0.3.7で作り直してください。
検証: 全132テスト、fmt、Clippy、配布パッケージのビルド。活用形、除外範囲、Unicode位置、ID別の許可・前回比較、JSON・CI出力、既存の公開型を確認しました。
v0.3.6
技術文書の文末・ダッシュの反復をまとめて読み直せるようになりました。--genre techで、同じ節の5文以内に3回ある反復をinfoとして示します。自動修正は付けず、必要な比較や挿入は残せます。
比喩的な言い回しの確認候補を--genre tech --experimentalへ追加しました。形態素解析による検出方法、採用理由、実文書での点検と限界をeval/technical-wording.mdに記録しています。
依存関係はquick-xml 0.42.0、ureq 3.4.1、zip 8.6.0、encoding_rs 0.8.41、jiff 0.2.37、toml 1.1.6、actions/checkout v7へ更新しました。HTTP取得とDOCX読み取りのAPI変更にも対応しています。
検証: 全121テスト、ラベル付き評価24項目、fmt、Clippy、Actionlint。辞書の取得・展開とSHA-256、HTTPのリダイレクト・文字コード・取得失敗、DOCXの日本語・文字参照・段落を確認しました。
互換性: JSONの形式は不変です。新しい通常ルールは--fail-on infoの終了コードに影響する場合があります。旧版のbaselineはv0.3.6で作り直してください。
v0.3.5
academicとlexical-auditを追加し、学術稿の構成・引用・提出成果物と、語彙・表記の確認に対応しました。- 独立した否定表現と「ではなくなる」の誤検出を修正しました。
- 技術文書向けの実験的な診断を追加し、抽象名詞と動詞の組み合わせ、技術用語の比喩、説明予告の反復を確認できるようにしました。
- similarity-rs を使い、Markdown 抽出・見出し正規化・形態素の検出結果生成の重複を整理しました。
既存の lint・outline・terms の JSON 形式は変わりません。旧版の baseline は 0.3.5 で作り直してください。
変更の詳細は CHANGELOG を参照してください。
v0.3.4
v0.3.3
追加
- 抽象的な対象を「地図」「羅針盤」などで説明する箇所を、具体的な判断対象・判断基準・効果へ書き換える候補として示す
abstract_metaphorを追加 - Agent Skillで
@textlint-ja/textlint-rule-preset-ai-writingを可能な場合に別検査として実行。プロジェクト側の設定を優先し、未設定時は固定バージョンの補助スクリプトを使用
互換性
公開JSONの形と通常実行の終了コードは変わりません。--fail-on info を使う場合は、新しい abstract_metaphor によって終了コードが変わることがあります。旧版のbaselineはv0.3.3で作り直してください。
v0.3.2
v0.3.1
baseline比較と配布経路を修正するパッチリリースです。
修正
nominal_endingを文書単位findingとして比較し、文数・文字数だけが変わった場合はpersistingと判定します。finding自体が消えた場合だけresolvedになります(#3)。
配布
- v0.3.1 を crates.io と GitHub Releases の両方へ公開し、
cargo install suikoで最新の挙動を導入できるようにしました(#2)。 - macOS(Apple Silicon / Intel)、Linux(x86_64 / aarch64)、Windows(x86_64)のビルド済みバイナリは順次添付されます。
互換性: 出力JSONの形は不変です。nominal_ending の状態が変わらない文書では、baseline分類だけが resolved + new から persisting へ変わります。
v0.3.0
テーマは「経験則の閾値と語彙を実測校正へ置き換える」。現代の人間文書81件を再現可能に取得・検証する基盤を作り、その実測でデフォルトの検出器構成を見直しました。
ハイライト
- 実測に基づくデフォルト構成の見直し: 現代人間dev 75文書での校正により、
low_lexical_diversity_ttr(文書長への構造依存。50k語の白書でTTR=0.094、fpr 0.613)、repeated_sentence_lead(絶対回数閾値の長さ交絡、fpr 0.613)、low_lexical_diversity_mtld(全候補閾値でAI検出0)の3検出器をEXPERIMENTAL(デフォルト無効、--experimentalで利用可)へ降格しました。判断ルールはeval/annotation-guide.mdに事前登録し、全実測はeval/calibration.mdに記録しています suiko-eval calibrate/vocab: 人間fprのWilson 95%上限を制約にした閾値探索と、禁止語・誇張語彙の人間/AI出現実測(対数頻度比つき)。--externalで非コミットの外部取得文書をSHA-256照合のうえ評価に使えます- 新検出器:
redundant_light_verb(サ変名詞+「を行う」の遠回し。安全なsuggestion付き、実コーパス真陽性15/15)と、読解負荷レーンのno_comma_sentence(読点ゼロの60字以上の日本語散文。岩淵悦太郎編『悪文』・本多勝一『日本語の作文技術』の句読法に基づく) - ビルド済みバイナリ配布: macOS(Apple Silicon / Intel)、Linux(x86_64 / aarch64)、Windows(x86_64)の5ターゲットを各リリースへ添付します
- コーパス取得基盤:
eval/sources.toml(人間93ソース、coji/natural-japanese@0f1cc1c 由来・MIT出典明記)、scripts/fetch-corpus.py(本文非コミット・SHA-256 lock記録、81/81件成功)、青空文庫の随筆12件の追加とholdout splitの初充足
変更
low_lexical_diversity_ttr/low_lexical_diversity_mtld/repeated_sentence_leadはEXPERIMENTALになりました。--experimentalを付けない実行のfindingsからは出力されません- 「のではないでしょうか」を
forbidden_phraseの弱シグナル(severity info)へ変更(現代人間6/65文書の実測) low_specificityの緩和候補 -0.10 は実測fpr 0.133で棄却し、-0.15 を維持
互換性: 出力JSONの形は不変です。デフォルト実行では上記3カテゴリのfindingが出なくなります(--experimentalで従来どおり)。--baseline 比較では、旧baselineに含まれる3カテゴリのfindingがresolved扱いになる場合があります。
導入
cargo install suikoまたはこのリリースに添付されたビルド済みバイナリを使ってください(各アーカイブに .sha256 付き。macOSは検疫属性の解除が必要です。詳細はREADME)。
詳細は CHANGELOG.md を参照してください。
suiko 0.2.0
cargo install suikoハイライト
cargo install suikoを復旧した。crates.io未公開のsudachi.rsを、Apache-2.0の条件に従った非公式再配布crate suiko-sudachi 0.6.11として公開し、git依存を解消した。上流が公式にcrates.ioへ公開した時点でそちらへ乗り換える- 形態素解析器をLindera/IPADICから sudachi.rs v0.6.11 + SudachiDict 20260723 core(Mode C)へ切り替えた。辞書はビルド時に一度だけSHA-256固定で取得して埋め込み、実行時のダウンロードなしを維持する。回帰fixture上の検出差は
low_specificityの1件だけだった
追加
- finding位置の
span。行、Unicode scalar数えの列(1始まり)、行内UTF-8 byte範囲(半開区間)を持ち、同じ表現が一行に複数あっても一意に指せる - 機械的に安全と確認した縮約だけを出す
suggestion(現在は「〜することができる」→「〜できる」の1種)。preimageが原文と一致する場合だけ付与し、Suiko自身はファイルを書き換えない lint --format github(GitHub Actionsのworkflowコマンド注釈)とlint --format sarif(SARIF 2.1.0、columnKind: unicodeCodePoints)terms --audit。複数ファイルの用語候補を集計し、SudachiDictの正規化表記で表記揺れ(サーバー/サーバ等)を一覧化する読み取り専用レポート- 複数ファイルの
--baseline。前回のlint --json出力(配列)をそのまま渡し、file完全一致で照合する。追加ファイルはbaseline.file_status = "added"、削除ファイルはstderr警告、genre・--experimental・Suikoバージョンの不一致は実行エラー。全recordへsuiko_versionを追加した - 局所AIパターン4カテゴリ:
bullet_bold_label、bullet_emoji、predicate_colon_lead(形態素で名詞ラベルと区別)、hype_expression(info確認候補) - 参考文献リスト行(
[1] …、[^1]: …)とコード注釈行(#A …)を本文からマスクし、抑制行数をstats.maskingへ出力 - 読者観測値
stats.readability(平均文長、動詞・助詞比率、文字種比率)。難易度スコアは校正データが揃うまで実装しない - 評価基盤:
corpus.tomlの[[sample]]正解ラベル(29件・13カテゴリ)とsuiko-eval labeled、sweep 6ルール、Wilson 95%区間・分母・low_n・評価集合の版(manifest SHA-256)の出力、split = dev/holdout契約(sweepはdevのみ)、eval/annotation-guide.md - Agent Skill導入の検証(
scripts/verify-skill-install.shと構造テスト)、辞書取得のscripts/fetch-dictionary.sh
変更
antithesis_repetitionとrepeated_sentence_leadを文書単位の集約findingへ変更した。件数は「一致した箇所の数」ではなく「反復状態の数」を意味し、全対応箇所はrelated_linesで示す。母数は一致数で統一したtranslationese_morphを「が」型だけに絞った。「は」型(ことはできない)と使役型(させることができる)は、技術書翻訳21件の正解ラベル(言い換えが妥当14%)に基づき対象外にした- 禁止語は行ごとの最初の1件ではなく、行内の全出現を報告する
- 用語集・FAQの定型フィールド(ラベル+コロン、
Q./A.)を散文の無意識な反復と区別する - 校正fixtureの期待値はAI的な文書21件(
--experimental29件)、自然な文書0件
互換性
- 公開JSONは追加フィールドのみ(
span、suggestion、suiko_version、baseline.file_status、stats.masking、stats.readability)。既存フィールドは不変 - crates.ioの0.1.0は切り替え前のLindera/IPADIC版。検出結果は0.2.0と異なる
- バイナリは埋め込み辞書(約207MB)を含むため200MB台になる
ライセンス・出典
- sudachi.rs、SudachiDict(いずれもApache-2.0)、評価コーパスの青空文庫テキストの表示は
THIRD_PARTY_NOTICES.mdにまとめた
Full Changelog: ec58d80...v0.2.0