<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _ExtractWithFilter( self, source_path_specs, destination_path, output_writer, artifact_filters, filter_file, artifact_definitions_path, custom_artifacts_path, skip_duplicates=True):
 """Extracts files using a filter expression. This method runs the file extraction process on the image and potentially on every VSS if that is wanted. Args: source_path_specs (list[dfvfs.PathSpec]):
 path specifications to extract. destination_path (str):
 path where the extracted files should be stored. output_writer (CLIOutputWriter):
 output writer. artifact_definitions_path (str):
 path to artifact definitions file. custom_artifacts_path (str):
 path to custom artifact definitions file. artifact_filters (list[str]):
 names of artifact definitions that are used for filtering file system and Windows Registry key paths. filter_file (str):
 path of the file that contains the filter file path filters. skip_duplicates (Optional[bool]):
 True if files with duplicate content should be skipped. """

    extraction_engine = engine.BaseEngine()

    # If the source is a directory or a storage media image
    # run pre-processing.
    if self._source_type in self._SOURCE_TYPES_TO_PREPROCESS:
      self._PreprocessSources(extraction_engine)

    for source_path_spec in source_path_specs:
      file_system, mount_point = self._GetSourceFileSystem(
          source_path_spec, resolver_context=self._resolver_context)

      display_name = path_helper.PathHelper.GetDisplayNameForPathSpec(
          source_path_spec)
      output_writer.Write(
          'Extracting file entries from: {0:s}\n'.format(display_name))

      filter_find_specs = extraction_engine.BuildFilterFindSpecs(
          artifact_definitions_path, custom_artifacts_path,
          extraction_engine.knowledge_base, artifact_filters, filter_file)

      searcher = file_system_searcher.FileSystemSearcher(
          file_system, mount_point)
      for path_spec in searcher.Find(find_specs=filter_find_specs):
        self._ExtractFileEntry(
            path_spec, destination_path, output_writer,
            skip_duplicates=skip_duplicates)

      file_system.Close()