class_docstr: Lexicon acquisition. produce opinion lexicon and an aspect lexicon based
  on input dataset.
  
  Attributes:
      opinion_candidate_list_curr_iter (dict): candidate opinion terms in the current iteration
      opinion_candidate_list_prev_iter (dict): opinion candidates list of previous iteration
      opinion_candidate_list (dict): opinion terms learned across all iterations
      opinion_candidates_list_final (list): final opinion candidates list
      opinion_candidate_list_raw (dict): all instances of candidate opinion terms
                                         across all iterations
      aspect_candidate_list_curr_iter (dict): candidate terms in the current iteration
      aspects_candidate_list_prev_iter(list): Aspect candidates list of previous iteration
      aspect_candidate_list (list):  aspect terms learned across all iterations
      aspect_candidates_list_final (list): final aspect candidates list
      aspect_candidate_list_raw (dict): all instances of candidate aspect terms
                                        across all iterations
docstr: Extract candidate terms for sentences in parsed document.
  
  Args:
      parsed_doc (ParsedDocument): Input parsed document.
docstr_tok: ["Extract","candidate","terms","for","sentences","in","parsed","document",".","Args",":","parsed_doc","(","ParsedDocument",")",":","Input","parsed","document","."]
code: def extract_terms_from_doc(self, parsed_doc):
      """Extract candidate terms for sentences in parsed document.
  
      Args:
          parsed_doc (ParsedDocument): Input parsed document.
      """
      for text, parsed_sent in parsed_doc.sent_iter():
          relations = _get_rel_list(parsed_sent)
  
          for rel_entry in relations:
              if rel_entry.rel != "root":
                  gov_seen = self.opinion_candidate_list_prev_iter.get(
                      rel_entry.gov.text
                  )
                  dep_seen = self.opinion_candidate_list_prev_iter.get(
                      rel_entry.dep.text
                  )
                  opinions = []
                  aspects = []
  
                  # =========================== acquisition rules ==============================
  
                  if bool(gov_seen) ^ bool(dep_seen):
                      opinions.append(
                          rule_1(rel_entry, gov_seen, dep_seen, text)
                      )
  
                  if not gov_seen and dep_seen:
                      opinions.append(
                          rule_2(rel_entry, relations, dep_seen, text)
                      )
  
                      aspects.append(rule_3(rel_entry, relations, text))
  
                      aspects.append(rule_4(rel_entry, relations, text))
  
                  if (
                      self.aspects_candidate_list_prev_iter
                      and AspectTerm.from_token(rel_entry.gov)
                      in self.aspects_candidate_list_prev_iter
                      and AspectTerm.from_token(rel_entry.dep)
                      not in self.aspects_candidate_list_prev_iter
                  ):
                      opinions.append(rule_5(rel_entry, text))
                      aspects.append(rule_6(rel_entry, relations, text))
                  self._add_opinion_term(opinions)
                  self._add_aspect_term(aspects)
  
imports: import copy
  import re
  import sys
  from os import PathLike
  from tqdm import tqdm
  from nlp_architect.models.absa import TRAIN_LEXICONS, LEXICONS_OUT
  from nlp_architect.models.absa import GENERIC_OP_LEX
  from nlp_architect.models.absa.inference.data_types import Polarity
  from nlp_architect.models.absa.train.data_types import AspectTerm, DepRelation, DepRelationTerm, LoadOpinionStopLists, LoadAspectStopLists, OpinionTerm, QualifiedTerm
  from nlp_architect.models.absa.train.rules import rule_1, rule_2, rule_3, rule_4, rule_5, rule_6
  from nlp_architect.models.absa.utils import _load_parsed_docs_from_dir, _write_final_opinion_lex, _load_lex_as_list_from_csv, read_generic_lex_from_file
label_desc: Use image node_id 2 for calling the AcquireTerms obj's underlying member method code with example usage: obj.extract_terms_from_doc(parsed_doc) without return types