> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/curator/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/curator/_mcp/server.

# nemo_curator.stages.interleaved.filter.image_to_text_ratio_filter

## Module Contents

### Classes

| Name                                                                                                                                                  | Description                                                          |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| [`InterleavedImageToTextRatioFilterStage`](#nemo_curator-stages-interleaved-filter-image_to_text_ratio_filter-InterleavedImageToTextRatioFilterStage) | Filter interleaved samples by image-to-text ratio (images per word). |

### Functions

| Name                                                                                                      | Description                                     |
| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| [`_text_word_count`](#nemo_curator-stages-interleaved-filter-image_to_text_ratio_filter-_text_word_count) | Count words in text by splitting on whitespace. |

### Data

[`DEFAULT_IMAGE_TO_TEXT_MAX_RATIO`](#nemo_curator-stages-interleaved-filter-image_to_text_ratio_filter-DEFAULT_IMAGE_TO_TEXT_MAX_RATIO)

[`DEFAULT_IMAGE_TO_TEXT_MIN_RATIO`](#nemo_curator-stages-interleaved-filter-image_to_text_ratio_filter-DEFAULT_IMAGE_TO_TEXT_MIN_RATIO)

### API

```python
class nemo_curator.stages.interleaved.filter.image_to_text_ratio_filter.InterleavedImageToTextRatioFilterStage(
    name: str = 'interleaved_image_to_text_...,
    drop_invalid_rows: bool = True,
    min_ratio: float = DEFAULT_IMAGE_TO_TEXT_MIN_R...,
    max_ratio: float = DEFAULT_IMAGE_TO_TEXT_MAX_R...
)
```

Dataclass

**Bases:** [BaseInterleavedFilterStage](/nemo-curator/nemo_curator/stages/interleaved/stages#nemo_curator-stages-interleaved-stages-BaseInterleavedFilterStage)

Filter interleaved samples by image-to-text ratio (images per word).

Groups rows by sample\_id. For each sample:

* image\_count = number of rows with modality == 'image'
* text\_word\_count = sum of len(text\_content.split()) over text rows
* ratio = image\_count / max(text\_word\_count, 1)

Samples with ratio outside \[min\_ratio, max\_ratio] are dropped (all their rows).

**`max_ratio`** `float = DEFAULT_IMAGE_TO_TEXT_MAX_RATIO`

---

**`min_ratio`** `float = DEFAULT_IMAGE_TO_TEXT_MIN_RATIO`

---

**`name`** `str = 'interleaved_image_to_text_ratio_filter'`

---

```python
nemo_curator.stages.interleaved.filter.image_to_text_ratio_filter.InterleavedImageToTextRatioFilterStage.content_keep_mask(
    task: nemo_curator.tasks.InterleavedBatch,
    df: pandas.DataFrame
) -> pandas.Series
```

```python
nemo_curator.stages.interleaved.filter.image_to_text_ratio_filter._text_word_count(
    text: str | None
) -> int
```

Count words in text by splitting on whitespace.

```python
nemo_curator.stages.interleaved.filter.image_to_text_ratio_filter.DEFAULT_IMAGE_TO_TEXT_MAX_RATIO: float = float('inf')
```

```python
nemo_curator.stages.interleaved.filter.image_to_text_ratio_filter.DEFAULT_IMAGE_TO_TEXT_MIN_RATIO: float = 0.0
```