class_docstr: Reader for the Customer Review Data dataset by Hu, Liu (2004).
  Note: we are not applying any sentence tokenization at the moment, just word
  tokenization.
  
      >>> from nltk.corpus import product_reviews_1
      >>> camera_reviews = product_reviews_1.reviews('Canon_G3.txt')
      >>> review = camera_reviews[0]
      >>> review.sents()[0] # doctest: +NORMALIZE_WHITESPACE
      ['i', 'recently', 'purchased', 'the', 'canon', 'powershot', 'g3', 'and', 'am',
      'extremely', 'satisfied', 'with', 'the', 'purchase', '.']
      >>> review.features() # doctest: +NORMALIZE_WHITESPACE
      [('canon powershot g3', '+3'), ('use', '+2'), ('picture', '+2'),
      ('picture quality', '+1'), ('picture quality', '+1'), ('camera', '+2'),
      ('use', '+2'), ('feature', '+1'), ('picture quality', '+3'), ('use', '+1'),
      ('option', '+1')]
  
  We can also reach the same information directly from the stream:
  
      >>> product_reviews_1.features('Canon_G3.txt')
      [('canon powershot g3', '+3'), ('use', '+2'), ...]
  
  We can compute stats for specific product features:
  
      >>> n_reviews = len([(feat,score) for (feat,score) in product_reviews_1.features('Canon_G3.txt') if feat=='picture'])
      >>> tot = sum([int(score) for (feat,score) in product_reviews_1.features('Canon_G3.txt') if feat=='picture'])
      >>> mean = tot / n_reviews
      >>> print(n_reviews, tot, mean)
      15 24 1.6
docstr: :param root: The root directory for the corpus.
  :param fileids: a list or regexp specifying the fileids in the corpus.
  :param word_tokenizer: a tokenizer for breaking sentences or paragraphs
      into words. Default: `WordPunctTokenizer`
  :param encoding: the encoding that should be used to read the corpus.
docstr_tok: [":","param","root",":","The","root","directory","for","the","corpus",".",":","param","fileids",":","a","list","or","regexp","specifying","the","fileids","in","the","corpus",".",":","param","word_tokenizer",":","a","tokenizer","for","breaking","sentences","or","paragraphs","into","words",".","Default",":","`","WordPunctTokenizer","`",":","param","encoding",":","the","encoding","that","should","be","used","to","read","the","corpus","."]
code: def __init__(
      self,
      root,
      fileids,
      word_tokenizer=WordPunctTokenizer(),
      encoding="utf8",
  ):
      """
      :param root: The root directory for the corpus.
      :param fileids: a list or regexp specifying the fileids in the corpus.
      :param word_tokenizer: a tokenizer for breaking sentences or paragraphs
          into words. Default: `WordPunctTokenizer`
      :param encoding: the encoding that should be used to read the corpus.
      """
  
      CorpusReader.__init__(self, root, fileids, encoding)
      self._word_tokenizer = word_tokenizer
      self._readme = "README.txt"
  
imports: import re
  from nltk.corpus.reader.api import *
  from nltk.tokenize import *
label_desc: Use image node_id 1 to create a new ReviewsCorpusReader object from inherited base classes: CorpusReader with example: obj = ReviewsCorpusReader(root, fileids, word_tokenizer, encoding)