本文へスキップ
`Ctrl`+`K`

# 7.7.2.1. `ExtractorHTML`

## 7.7.2.1.1. 概要

Added in version 16.0.3.

注釈

これは実験的な機能です。現時点ではまだ安定しきっていません。

`ExtractorHTML` はHTMLからテキストの内容を抽出します。デフォルトでは、HTMLタグを取り除き、文字参照（ `&lt;` などのHTMLエンティティ）を展開します。このエクストラクターを使うと、HTMLの中のテキストだけをマークアップなしでインデックスできます。

`ExtractorHTML` は、 `ShortText` 、 `Text` 、 `LongText` などのテキスト型ではない値に対しては何もしません。この場合、値はそのまま返されます。

## 7.7.2.1.2. 構文

`ExtractorHTML` には省略可能なパラメーターがあります。

オプションなし：

    ExtractorHTML

オプション指定：

    ExtractorHTML("remove_tag", true)

    ExtractorHTML("expand_character_reference", true)

## 7.7.2.1.3. 使い方

以下は、デフォルトのパラメーターでHTMLからテキストの内容を抽出する例です。HTMLタグ（ `<html>` や `<body>` など）が取り除かれ、文字参照（ `&lt;` と `&gt;` ）が展開されます。

実行例：

    extract \
      --extractors ExtractorHTML \
      --value "<html><body>He&lt;ll&gt;o</body></html>"
    # [[0,1337566253.89858,0.000355720520019531],{"extracted":"He<ll>o"}]

remove_tag を `false` に設定すると、HTMLタグを残せます。この場合でも、文字参照は展開されます。

実行例：

    extract \
      --extractors 'ExtractorHTML("remove_tag", false)' \
      --value "<html><body>He&lt;ll&gt;o</body></html>"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "extracted": "<html><body>He<ll>o</body></html>"
    #   }
    # ]

expand_character_reference を `false` に設定すると、文字参照をそのまま残せます。この場合でも、HTMLタグは取り除かれます。

実行例：

    extract \
      --extractors 'ExtractorHTML("expand_character_reference", false)' \
      --value "<html><body>He&lt;ll&gt;o</body></html>"
    # [[0,1337566253.89858,0.000355720520019531],{"extracted":"He&lt;ll&gt;o"}]

`ExtractorHTML` を語彙表に割り当てると、語彙表は抽出されたテキストの内容をインデックスします。元のHTMLはデータカラムに保持されます。

実行例：

    table_create Contents TABLE_NO_KEY
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Contents html COLUMN_SCALAR Text
    # [[0,1337566253.89858,0.000355720520019531],true]
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenBigram \
      --normalizers NormalizerNFKC \
      --extractors ExtractorHTML
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Terms contents_html COLUMN_INDEX|WITH_POSITION Contents html
    # [[0,1337566253.89858,0.000355720520019531],true]
    load --table Contents
    [
    {"html": "<p>Groonga is a <b>fast</b> full text search engine.</p>"}
    ]
    # [[0,1337566253.89858,0.000355720520019531],1]
    select Contents \
      --match_columns html \
      --query "fast" \
      --output_columns html
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "html",
    #           "Text"
    #         ]
    #       ],
    #       [
    #         "<p>Groonga is a <b>fast</b> full text search engine.</p>"
    #       ]
    #     ]
    #   ]
    # ]
    select Contents \
      --match_columns html \
      --query "<b>" \
      --output_columns html
    # [[0,1337566253.89858,0.000355720520019531],[[[0],[["html","Text"]]]]]

インデックスされたトークンは生のHTMLではなく抽出されたテキスト `Groonga is a fast full text search engine.` から作られるため、クエリー `fast` はマッチしますが、クエリー `<b>` はマッチしません。

## 7.7.2.1.4. 引数

### 7.7.2.1.4.1. 省略可能引数

#### 7.7.2.1.4.1.1. `remove_tag`

HTMLタグを取り除くかどうかを指定します。

これが `true` の場合、 `<p>` などのHTMLタグが取り除かれます。 `false` の場合、HTMLタグはそのまま残されます。

デフォルト値は `true` です。

#### 7.7.2.1.4.1.2. `expand_character_reference`

文字参照（HTMLエンティティ）を展開するかどうかを指定します。

これが `true` の場合、 `&lt;` などの名前付き文字参照と `&#x3042;` などの数値文字参照の両方が、対応する文字に展開されます。 `false` の場合、文字参照はそのまま残されます。

デフォルト値は `true` です。

## 7.7.2.1.5. 参考

- エクストラクター

- table_create