shrink-dom
Version:
适用于网页分析、内容提取、AI训练数据准备和网页爬虫等场景,帮助开发者更高效地处理和优化DOM结构。
174 lines (131 loc) • 4.73 kB
Markdown
DOM ツリーの分析、圧縮、コンテンツ抽出のためのユーティリティライブラリです。
[简体中文](../README.md) | [English](./README.en.md) | [繁體中文](./README.zh-TW.md)
- **DOM 分析**:`DOMDomainAnalyzer` を使用して DOM ツリーを分析し、要素の可視性、対話性、編集可能性をマークします
- **DOM 圧縮**:`DOMShrinker` を使用して HTML 構造を圧縮し、繰り返しパターンを識別し、テンプレート化された表現を生成します
- **コンテンツ抽出**:`DOMContentExtractor` を使用して DOM から意味のあるコンテンツを抽出し、広告や無関係な情報をフィルタリングします
```bash
npm install shrink-dom
yarn add shrink-dom
bun add shrink-dom
```
```typescript
import { DOMDomainAnalyzer } from 'shrink-dom';
// ブラウザ環境で現在のページを分析
const analyzedHTML = DOMDomainAnalyzer.analyze();
console.log(analyzedHTML);
// カスタム設定を使用
const analyzer = new DOMDomainAnalyzer({
annotationAttribute: 'data-custom-id',
enableHighlight: true,
highlightDuration: 1000
});
const result = analyzer.getAnalyzedHTML();
```
```typescript
import { DOMShrinker } from 'shrink-dom';
// HTML 文字列を圧縮
const html = `
<div class="card">
<h2>タイトル1</h2>
<p>コンテンツ1</p>
</div>
<div class="card">
<h2>タイトル2</h2>
<p>コンテンツ2</p>
</div>
`;
const compressed = DOMShrinker.compressHTMLString(html);
console.log(compressed);
// カスタム設定を使用
const shrinker = new DOMShrinker({
minTemplateDepth: 3,
minTemplateOccurrences: 3,
templateIdPrefix: 'Template'
});
const result = shrinker.compressHTML(document.body);
```
```typescript
import { DOMContentExtractor } from 'shrink-dom';
// 抽出器インスタンスを作成
const extractor = new DOMContentExtractor();
// コンテンツを抽出
const extractedContent = extractor.extract(document.body);
if (extractedContent && extractor.isContentMeaningful(extractedContent)) {
console.log('意味のあるコンテンツを抽出しました:', extractedContent.outerHTML);
}
// カスタム設定を使用
const customExtractor = new DOMContentExtractor({
skipKeywords: ['広告', 'スポンサー'],
preservedAttributes: ['data-id', 'title', 'aria-label']
});
```
DOM ツリーを分析し、要素に特性をマークします。
```typescript
// 設定オプション
interface DOMDomainAnalyzerOptions {
annotationAttribute?: string; // デフォルト: 'data-xgl-id'
minInteractiveSize?: number; // デフォルト: 20
highlightStyle?: string; // デフォルト: 'brightness(1.2) contrast(1.1)'
highlightDuration?: number; // デフォルト: 500
enableHighlight?: boolean; // デフォルト: true
}
// 静的メソッド
DOMDomainAnalyzer.analyze(options?: DOMDomainAnalyzerOptions): string;
// インスタンスメソッド
new DOMDomainAnalyzer(options?: DOMDomainAnalyzerOptions);
analyzer.getAnalyzedHTML(): string;
```
HTML 構造を圧縮し、繰り返しパターンを識別します。
```typescript
// 設定オプション
interface DOMShrinkerOptions {
minTemplateDepth?: number; // デフォルト: 2
minTemplateOccurrences?: number; // デフォルト: 2
templateIdPrefix?: string; // デフォルト: 'T'
}
// 静的メソッド
DOMShrinker.compressHTMLString(html: string, options?: DOMShrinkerOptions): string;
// インスタンスメソッド
new DOMShrinker(options?: DOMShrinkerOptions);
shrinker.compressHTML(document: Document | Element): string;
```
DOM から意味のあるコンテンツを抽出します。
```typescript
// 設定オプション
interface ExtractorOptions {
skipKeywords?: string[]; // スキップするキーワード
preservedAttributes?: string[]; // 保持する属性
formElementTags?: string[]; // フォーム要素タグ
emphasisTags?: string[]; // 強調要素タグ
briefTextThreshold?: number; // 簡潔なテキストのしきい値
}
// インスタンスメソッド
new DOMContentExtractor(options?: ExtractorOptions);
extractor.extract(element: ChildNode): ChildNode | null;
extractor.isContentMeaningful(element: ChildNode): boolean;
```
```bash
bun install
bun test
bun run build
```
MIT