internal static INgramExtractorFactory Create(IHostEnvironment env, NgramHashExtractorArguments extractorArgs,
                                                      TermLoaderArguments termLoaderArgs)
        {
            Contracts.CheckValue(env, nameof(env));
            var h = env.Register(LoaderSignature);

            h.CheckValue(extractorArgs, nameof(extractorArgs));
            h.CheckParam(termLoaderArgs == null, nameof(termLoaderArgs), "Argument cannot be used with NgramHashExtractor, use NgramExtractor instead");

            return(new NgramHashExtractorFactory(extractorArgs));
        }
        public static INgramExtractorFactory Create(IHostEnvironment env, NgramHashExtractorArguments extractorArgs,
                                                    TermLoaderArguments termLoaderArgs)
        {
            Contracts.CheckValue(env, nameof(env));
            var h = env.Register(LoaderSignature);

            h.CheckValue(extractorArgs, nameof(extractorArgs));
            h.CheckValueOrNull(termLoaderArgs);

            return(new NgramHashExtractorFactory(extractorArgs, termLoaderArgs));
        }
        public static IDataTransform Create(NgramHashExtractorArguments extractorArgs, IHostEnvironment env, IDataView input,
                                            ExtractorColumn[] cols, TermLoaderArguments termLoaderArgs = null)
        {
            Contracts.CheckValue(env, nameof(env));
            var h = env.Register(LoaderSignature);

            h.CheckValue(extractorArgs, nameof(extractorArgs));
            h.CheckValue(input, nameof(input));
            h.CheckUserArg(extractorArgs.SkipLength < extractorArgs.NgramLength, nameof(extractorArgs.SkipLength), "Should be less than " + nameof(extractorArgs.NgramLength));
            h.CheckUserArg(Utils.Size(cols) > 0, nameof(Arguments.Column), "Must be specified");
            h.AssertValueOrNull(termLoaderArgs);

            var extractorCols = new Column[cols.Length];

            for (int i = 0; i < cols.Length; i++)
            {
                extractorCols[i] =
                    new Column
                {
                    Name          = cols[i].Name,
                    Source        = cols[i].Source,
                    FriendlyNames = cols[i].FriendlyNames
                };
            }

            var args = new Arguments
            {
                Column      = extractorCols,
                NgramLength = extractorArgs.NgramLength,
                SkipLength  = extractorArgs.SkipLength,
                HashBits    = extractorArgs.HashBits,
                InvertHash  = extractorArgs.InvertHash,
                Ordered     = extractorArgs.Ordered,
                Seed        = extractorArgs.Seed,
                AllLengths  = extractorArgs.AllLengths
            };

            return(Create(h, args, input, termLoaderArgs));
        }
        internal static ITransformer Create(NgramHashExtractorArguments extractorArgs, IHostEnvironment env, IDataView input,
                                            ExtractorColumn[] cols)
        {
            Contracts.CheckValue(env, nameof(env));
            var h = env.Register(LoaderSignature);

            h.CheckValue(extractorArgs, nameof(extractorArgs));
            h.CheckValue(input, nameof(input));
            h.CheckUserArg(extractorArgs.SkipLength < extractorArgs.NgramLength, nameof(extractorArgs.SkipLength), "Should be less than " + nameof(extractorArgs.NgramLength));
            h.CheckUserArg(Utils.Size(cols) > 0, nameof(Options.Columns), "Must be specified");

            var extractorCols = new Column[cols.Length];

            for (int i = 0; i < cols.Length; i++)
            {
                extractorCols[i] =
                    new Column
                {
                    Name          = cols[i].Name,
                    Source        = cols[i].Source,
                    FriendlyNames = cols[i].FriendlyNames
                };
            }

            var options = new Options
            {
                Columns                = extractorCols,
                NgramLength            = extractorArgs.NgramLength,
                SkipLength             = extractorArgs.SkipLength,
                NumberOfBits           = extractorArgs.NumberOfBits,
                MaximumNumberOfInverts = extractorArgs.MaximumNumberOfInverts,
                Ordered                = extractorArgs.Ordered,
                Seed          = extractorArgs.Seed,
                UseAllLengths = extractorArgs.UseAllLengths
            };

            return(Create(h, options, input));
        }