<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def Collect( self, knowledge_base, artifact_definition, searcher, file_system):
 """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. """

    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)