code: def Collect(
        self, knowledge_base, artifact_definition, searcher, file_system):
      
      for source in artifact_definition.sources:
        if source.type_indicator not in (
            artifact_definitions.TYPE_INDICATOR_FILE,
            artifact_definitions.TYPE_INDICATOR_PATH):
          continue
  
        for path in source.paths:
          # Make sure the path separators used in the artifact definition
          # correspond to those used by the file system.
          path_segments = path.split(source.separator)
  
          find_spec = file_system_searcher.FindSpec(
              location_glob=path_segments[1:], case_sensitive=False)
  
          for path_specification in searcher.Find(find_specs=[find_spec]):
            self._ParsePathSpecification(
                knowledge_base, searcher, file_system, path_specification,
                source.separator)
docs: Collects values using a file artifact definition.
  
      Args:
        knowledge_base (KnowledgeBase): to fill with preprocessing information.
        artifact_definition (artifacts.ArtifactDefinition): artifact definition.
        searcher (dfvfs.FileSystemSearcher): file system searcher to preprocess
            the file system.
        file_system (dfvfs.FileSystem): file system to be preprocessed.
  
      Raises:
        PreProcessFail: if the preprocessing fails.