class_docstr: News articles bandit dataset.
  
  This is a personalization dataset. It contains 10000 observations. There are 10 arms, and the
  reward is binary. There are 100 features, which turns this into a contextual bandit problem.
  
  Examples
  --------
  
  >>> from river import bandit
  
  >>> dataset = bandit.datasets.NewsArticles()
  >>> context, arm, reward = next(iter(dataset))
  
  >>> len(context)
  100
  
  >>> arm, reward
  (2, False)
  
  References
  ----------
  [^1]: [Machine Learning for Personalization homework](http://www.cs.columbia.edu/~jebara/6998/hw2.pdf)
  [^2]: [Contextual Bandits Analysis of LinUCB Disjoint Algorithm with Dataset](https://kfoofw.github.io/contextual-bandits-linear-ucb-disjoint/)
code: def _iter(self):
      with open(self.path) as f:
          for x in f:
              arm, reward, *features = x.strip().split(" ")
              arm = int(arm)
              reward = reward == "1"
              features = {i: float(x) for i, x in enumerate(features)}
              yield features, arm, reward
  
file_path: river/river/bandit/datasets/news.py
imports: from __future__ import annotations
  import pathlib
  from river import datasets
  from .base import BanditDataset
label_desc: Use image node_id 3 for calling the NewsArticles obj's underlying member method code with example usage: obj._iter() without return types