| Crates.io | similarity-md |
| lib.rs | similarity-md |
| version | 0.4.1 |
| created_at | 2025-07-01 11:19:06.415766+00 |
| updated_at | 2025-08-13 17:44:58.2144+00 |
| description | Experimental CLI tool for detecting content similarity in Markdown documents |
| homepage | https://github.com/mizchi/similarity |
| repository | https://github.com/mizchi/similarity |
| max_upload_size | |
| id | 1733123 |
| size | 148,714 |
⚠️ EXPERIMENTAL WARNING: This tool is experimental and may produce unexpected results. Its API and behavior may change significantly in future versions. Use with caution in production environments.
Vibrato を使った形態素解析による日本語 Markdown ドキュメントの類似性検出ツール
A Markdown content similarity detection tool with Japanese morphological analysis support using Vibrato
このツールは、Markdown ドキュメント内のセクション間の類似性を検出します。特に日本語テキストに対して、Vibrato ライブラリを使用した形態素解析による高精度な類似性検出を提供します。
形態素解析機能を使用するには、MeCab 辞書が必要です:
# Ubuntu/Debian
sudo apt-get install mecab-ipadic-utf8
# macOS (Homebrew)
brew install mecab mecab-ipadic
# または手動で辞書をダウンロード
wget https://github.com/taku910/mecab/releases/download/mecab-0.996/mecab-ipadic-2.7.0-20070801.tar.gz
cd crates/similarity-md
cargo build --release
# デフォルト設定で現在のディレクトリを解析
cargo run --bin similarity-md
# 特定のファイルを解析
cargo run --bin similarity-md path/to/document.md
# 閾値を指定
cargo run --bin similarity-md --threshold 0.8
# 形態素解析を有効化(デフォルト辞書を使用)
cargo run --bin similarity-md --use-morphological --morphological-weight 0.3
# カスタム辞書パスを指定
cargo run --bin similarity-md --use-morphological --morphological-dict /path/to/dict --morphological-weight 0.3
# 各類似性指標の重みを調整
cargo run --bin similarity-md \
--char-weight 0.2 \
--word-weight 0.2 \
--morphological-weight 0.4 \
--title-weight 0.1 \
--length-weight 0.1 \
--use-morphological
# JSON形式で出力
cargo run --bin similarity-md --format json
# セクション内容も表示
cargo run --bin similarity-md --print
# 最小単語数を指定
cargo run --bin similarity-md --min-words 20
# 同一ファイル内のみ比較
cargo run --bin similarity-md --same-file-only
# 異なるファイル間のみ比較
cargo run --bin similarity-md --cross-file-only
# サンプルファイルで形態素解析をテスト
cargo run --example morphological_test
# 日本語Markdownファイルを解析
cargo run --bin similarity-md examples/japanese_similarity_test.md \
--use-morphological \
--morphological-weight 0.4 \
--threshold 0.6 \
--print
Similar sections found:
--------------------------------------------------------------------------------
1. Similarity: 87.50%
Character-level: 85.20%, Word-level: 82.30%, Morphological: 92.10%, Title: 95.00%, Length: 88.70%
examples/japanese_similarity_test.md:8 | L8-12 | 機械学習について (Level 2)
examples/japanese_similarity_test.md:14 | L14-18 | マシンラーニングの概要 (Level 2)
2. Similarity: 84.20%
Character-level: 82.10%, Word-level: 79.80%, Morphological: 89.30%, Title: 88.50%, Length: 91.20%
examples/japanese_similarity_test.md:20 | L20-22 | 深層学習の基礎 (Level 2)
examples/japanese_similarity_test.md:24 | L24-26 | ディープラーニングの原理 (Level 2)
use similarity_md::{
MorphologicalSimilarityCalculator,
SimilarityCalculator,
SimilarityOptions,
SectionExtractor
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 形態素解析器を初期化
let morph_calc = MorphologicalSimilarityCalculator::new(None)?;
// 日本語テキストの類似性を計算
let text1 = "機械学習は人工知能の一分野です。";
let text2 = "マシンラーニングはAIの一領域です。";
let similarity = morph_calc.calculate_morpheme_similarity(text1, text2)?;
println!("形態素解析による類似性: {:.3}", similarity);
// 統合された類似性計算器を使用
let options = SimilarityOptions {
use_morphological_analysis: true,
morphological_weight: 0.4,
..Default::default()
};
let calculator = SimilarityCalculator::with_options(options)?;
// Markdownファイルから類似セクションを検出
let extractor = SectionExtractor::default();
let sections = extractor.extract_from_file("document.md")?;
let similar_pairs = calculator.find_similar_sections(§ions, 0.7);
for pair in similar_pairs {
println!("類似度: {:.3} - {} vs {}",
pair.result.similarity,
pair.section1.title,
pair.section2.title
);
}
Ok(())
}
日本語テキストの場合、morphological_weightを高めに設定することを推奨します。
--morphological-dict /path/to/dict--min-words 20--max-level 3MIT License
プルリクエストやイシューの報告を歓迎します。特に以下の分野での貢献を求めています: