0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#によるHTMLテキストの抽出

0
Posted at

はじめに

.NETプロジェクトの開発において、ローカルのHTMLファイルからプレーンテキストを抽出するニーズは頻繁に発生します。一般的なシナリオとしては、ドキュメント内容の解析、パブリックなテキストのクローリング、ローカルWebページのアーカイブ、インテリジェントなテキスト分析の前処理などが挙げられます。

Free Spire.Doc for .NET は無償ライブラリで、シンプルなソリューションを提供します。HTMLを構造化されたドキュメントオブジェクトモデルにパースし、数行のコードでクリーンなプレーンテキストを出力できます。

1. 環境準備

1.1 コンポーネントのインストール

Free Spire.Doc for .NET は NuGet パッケージマネージャー経由でのインストールを推奨します。

GUI でのインストール:Visual Studio でプロジェクトを右クリック → 「NuGet パッケージの管理」→ 「Free Spire.Doc」を検索 → インストール。

コマンドラインでのインストール:パッケージマネージャーコンソールで以下を実行:

Install-Package FreeSpire.Doc

1.2 名前空間のインポート

コードファイルの先頭に以下の名前空間をインポートします:

using Spire.Doc;
using Spire.Doc.Documents;
using System.IO;

2. コア実装

Free Spire.Doc は HTML を構造化されたオブジェクトモデルに変換します。<p><a><table> などの要素は、コードからアクセス可能なクラスにマッピングされます。主要なコンポーネントは以下の通りです:

  • Document:パース後の HTML コンテンツのコンテナ
  • Section:コンテンツブロック(HTML の <body><div> に相当)
  • Paragraph<p><h1><li> などのブロックレベル要素に対応

このモデルに基づき、テキスト抽出には2つの代表的なシナリオがあります。

2.1 HTML文字列からのテキスト抽出

動的に生成される HTML フラグメント(リッチテキストエディターから渡されるコンテンツや API が返す HTML 文字列など)を処理する場合に適しています。

using Spire.Doc;
using Spire.Doc.Documents;
using System;

namespace ExtractTextFromHtml
{
    class Program
    {
        static void Main(string[] args)
        {
            // 解析対象の HTML 文字列を定義
            string htmlContent = @"
                <html>
                    <body>
                        <h2>製品機能の紹介</h2>
                        <p>このコンポーネントはHTMLコンテンツの解析をサポートし、以下の利点があります:</p>
                        <ul>
                            <li>.NET プラットフォーム間での互換性</li>
                            <li>Office 環境に依存しない</li>
                            <li>テキストコンテンツの高速抽出</li>
                        </ul>
                        <p>公式サイト:<a href='https://example.com'>サンプルリンク</a></p>
                    </body>
                </html>";

            // Document オブジェクトを作成
            Document doc = new Document();
            
            // セクションをコンテナとして追加
            Section section = doc.AddSection();
            
            // 段落を追加
            Paragraph paragraph = section.AddParagraph();
            
            // HTML 文字列を段落にパース
            paragraph.AppendHTML(htmlContent);
            
            // すべての段落をループしてテキストを出力
            Console.WriteLine("抽出されたプレーンテキスト:");
            Console.WriteLine("---------------------");
            foreach (Paragraph para in section.Paragraphs)
            {
                Console.WriteLine(para.Text);
            }
            
            // テキストファイルとして直接保存も可能
            doc.SaveToFile("output.txt", FileFormat.Txt);
        }
    }
}

ポイントAppendHTML() メソッドは HTML タグを対応する Spire.Doc オブジェクト(例:<h1> → 見出しスタイル、<ul> → リスト段落)に自動変換し、Paragraph.Text プロパティはすべてのタグを除去したプレーンテキストを返します。

HtmlExtract.png

2.2 HTMLファイルからのテキスト抽出

ディスク上に存在する HTML ファイル(ダウンロードした Web ページやローカルのテンプレートなど)を処理する場合に適しています。

using Spire.Doc;
using Spire.Doc.Documents;

namespace ExtractTextFromHtmlFile
{
    class Program
    {
        static void Main(string[] args)
        {
            // Document オブジェクトを作成
            Document doc = new Document();
            
            // HTML ファイルを読み込み
            doc.LoadFromFile("F:\\蝶.html", FileFormat.Html, XHTMLValidationType.None);
            
            // 方法1:直接プレーンテキストファイルとして保存
            doc.SaveToFile("Extract.txt", FileFormat.Txt);
            
            // 方法2:ループでテキストコンテンツを取得
            foreach (Section section in doc.Sections)
            {
                foreach (Paragraph paragraph in section.Paragraphs)
                {
                    string text = paragraph.Text;
                    // 抽出したテキストに対して後続処理を実行
                    Console.WriteLine(text);
                }
            }
        }
    }
}

LoadFromFile() メソッドはファイルパスとフォーマットパラメーターを受け取り、FileFormat.Html は入力ファイルを HTML としてパースするようライブラリに指示します。SaveToFile()FileFormat.Txt を指定すると、レンダリング後のコンテンツが自動的にすべての HTML タグを除去したプレーンテキストとして出力されます。

HTMLFileExtract.png

3. 注意事項

  1. 無償版の制限:Free Spire.Doc の無償版には一定の段落数およびテーブル数の制限(例:500 段落および 25 テーブル)があり、一部の複雑で高度な HTML タグの解析には制限があります。非常に大規模または構造が極めて複雑な HTML ドキュメントの場合は、無償版の許容範囲内かどうかを評価する必要があります。

  2. HTML エンティティの自動変換:ライブラリは HTML エンティティ(例:&copy;&reg;)を対応するプレーンテキスト文字に自動変換します。

  3. 構造の保持:出力テキストには、改行やリストのインデントなどの論理的な書式が保持されます。

  4. Office 環境は不要:このコンポーネントは Microsoft Office アプリケーションに依存せず、サーバーサイドでも正常に使用できます。

4. まとめ

Free Spire.Doc for .NET を使用して HTML テキストを抽出するコアフローは、以下の3ステップにまとめられます:

  1. 読み込み——new Document() でドキュメントオブジェクトを作成し、AppendHTML() で文字列を処理するか、LoadFromFile() でファイルを読み込みます。
  2. パース——ライブラリが内部で HTML タグをオブジェクトモデルに自動マッピングします。
  3. 抽出——Paragraph.Text で段落ごとにプレーンテキストを取得するか、SaveToFile(..., FileFormat.Txt) で直接出力します。

正規表現や手動によるタグ除去の方法と比較して、このアプローチはコードがより簡潔でメンテナンス性が高く、テキストの元の構造を適切に保持できます。日常的な HTML テキスト抽出のニーズに対して、軽量かつ実用的な技術選択肢と言えるでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?