public NameSampleSequenceStream(IObjectStream <NameSample> psi, INameContextGenerator pcg, bool useOutcomes, ISequenceCodec <string> seqCodec)
 {
     this.psi         = psi;
     this.useOutcomes = useOutcomes;
     this.pcg         = pcg;
     this.seqCodec    = seqCodec;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="TokenNameFinderFactory"/> with the given parameters.
 /// </summary>
 /// <param name="featureGeneratorBytes">The feature generator bytes.</param>
 /// <param name="resources">The resources dictionary.</param>
 /// <param name="seqCodec">The sequence codec.</param>
 public TokenNameFinderFactory(byte[] featureGeneratorBytes, Dictionary <string, object> resources,
                               ISequenceCodec <string> seqCodec)
 {
     FeatureGenerator = featureGeneratorBytes;
     Resources        = resources;
     SequenceCodec    = seqCodec;
 }
        public NameFinderEventStream(IObjectStream <NameSample> dataStream, string type, INameContextGenerator contextGenerator, ISequenceCodec <string> codec) : base(dataStream)
        {
            this.codec = codec ?? new BioCodec();

            additionalContextFeatureGenerator = new AdditionalContextFeatureGenerator();

            this.contextGenerator = contextGenerator;
            this.contextGenerator.AddFeatureGenerator(new WindowFeatureGenerator(additionalContextFeatureGenerator, 8, 8));

            // TODO: How to make the type really do something?!
            // Type = type ?? "default";
        }
Example #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TokenNameFinderModel" /> class.
        /// </summary>
        /// <param name="languageCode">The language code.</param>
        /// <param name="nameFinderModel">The name finder model.</param>
        /// <param name="generatorDescriptor">The generator descriptor.</param>
        /// <param name="resources">The resources.</param>
        /// <param name="manifestInfoEntries">The manifest information entries.</param>
        /// <param name="seqCodec">The sequence codec.</param>
        /// <param name="factory">The tool factory.</param>
        /// <exception cref="InvalidOperationException">Model not compatible with name finder!</exception>
        /// <exception cref="System.InvalidOperationException">Model not compatible with name finder!</exception>
        public TokenNameFinderModel(
            string languageCode,
            ISequenceClassificationModel<string> nameFinderModel,
            byte[] generatorDescriptor,
            Dictionary<string, object> resources,
            Dictionary<string, string> manifestInfoEntries,
            ISequenceCodec<string> seqCodec,
            TokenNameFinderFactory factory)
            : base(ComponentName, languageCode, manifestInfoEntries, factory) {
            Init(nameFinderModel, generatorDescriptor, resources, seqCodec);

            if (!seqCodec.AreOutcomesCompatible(nameFinderModel.GetOutcomes())) {
                throw new InvalidOperationException("Model not compatible with name finder!");
            }
        }
Example #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NameFinderME"/> using the given <see cref="TokenNameFinderModel"/>.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <exception cref="System.ArgumentNullException">model</exception>
        public NameFinderME(TokenNameFinderModel model) {
            if (model == null)
                throw new ArgumentNullException("model");

            sequenceCodec = model.Factory.CreateSequenceCodec();
            sequenceValidator = sequenceCodec.CreateSequenceValidator();

            this.model = model.NameFinderSequenceModel;

            contextGenerator = model.Factory.CreateContextGenerator();

            // TODO: We should deprecate this. And come up with a better solution!
            additionalContextFeatureGenerator = new AdditionalContextFeatureGenerator();
            contextGenerator.AddFeatureGenerator(
                new WindowFeatureGenerator(additionalContextFeatureGenerator, 8, 8));
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TokenNameFinderModel"/> class.
        /// </summary>
        /// <param name="languageCode">The language code.</param>
        /// <param name="nameFinderModel">The name finder model.</param>
        /// <param name="generatorDescriptor">The generator descriptor.</param>
        /// <param name="resources">The resources.</param>
        /// <param name="manifestInfoEntries">The manifest information entries.</param>
        /// <param name="sequenceCodec">The sequence codec.</param>
        /// <exception cref="System.InvalidOperationException">Model not compatible with name finder!</exception>
        public TokenNameFinderModel(
            string languageCode,
            ISequenceClassificationModel <string> nameFinderModel,
            byte[] generatorDescriptor,
            Dictionary <string, object> resources,
            Dictionary <string, string> manifestInfoEntries,
            ISequenceCodec <string> sequenceCodec)
            : base(ComponentName, languageCode, manifestInfoEntries)
        {
            Init(nameFinderModel, generatorDescriptor, resources, sequenceCodec);

            if (!sequenceCodec.AreOutcomesCompatible(nameFinderModel.GetOutcomes()))
            {
                throw new InvalidOperationException("Model not compatible with name finder!");
            }
        }
Example #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NameFinderME"/> using the given <see cref="TokenNameFinderModel"/>.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <exception cref="System.ArgumentNullException">model</exception>
        public NameFinderME(TokenNameFinderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            sequenceCodec     = model.Factory.CreateSequenceCodec();
            sequenceValidator = sequenceCodec.CreateSequenceValidator();

            this.model = model.NameFinderSequenceModel;

            contextGenerator = model.Factory.CreateContextGenerator();

            // TODO: We should deprecate this. And come up with a better solution!
            additionalContextFeatureGenerator = new AdditionalContextFeatureGenerator();
            contextGenerator.AddFeatureGenerator(
                new WindowFeatureGenerator(additionalContextFeatureGenerator, 8, 8));
        }
Example #8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TokenNameFinderModel" /> class.
        /// </summary>
        /// <param name="languageCode">The language code.</param>
        /// <param name="nameFinderModel">The name finder model.</param>
        /// <param name="beamSize">Size of the beam.</param>
        /// <param name="generatorDescriptor">The generator descriptor.</param>
        /// <param name="resources">The resources.</param>
        /// <param name="manifestInfoEntries">The manifest information entries.</param>
        /// <param name="sequenceCodec">The sequence codec.</param>
        /// <exception cref="System.InvalidOperationException">Model not compatible with name finder!</exception>
        public TokenNameFinderModel(
            string languageCode,
            IMaxentModel nameFinderModel,
            int beamSize,
            byte[] generatorDescriptor,
            Dictionary <string, object> resources,
            Dictionary <string, string> manifestInfoEntries,
            ISequenceCodec <string> sequenceCodec)
            : base(ComponentName, languageCode, manifestInfoEntries)
        {
            Manifest[Parameters.BeamSize] = beamSize.ToString(CultureInfo.InvariantCulture);

            Init(nameFinderModel, generatorDescriptor, resources, sequenceCodec);

            if (!IsModelValid(nameFinderModel))
            {
                throw new InvalidOperationException("Model not compatible with name finder!");
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="NameSampleSequenceStream"/> class.
 /// </summary>
 /// <param name="psi">The sample stream.</param>
 /// <param name="pcg">The context generator.</param>
 /// <param name="useOutcomes">if set to <c>true</c> will be used in the samples.</param>
 /// <param name="seqCodec">The sequence codec.</param>
 public NameSampleSequenceStream(IObjectStream<NameSample> psi, INameContextGenerator pcg, bool useOutcomes,
     ISequenceCodec<string> seqCodec) {
     this.psi = psi;
     this.useOutcomes = useOutcomes;
     this.pcg = pcg;
     this.seqCodec = seqCodec;
 }
Example #10
0
        /// <summary>
        /// Initializes the specified name finder model.
        /// </summary>
        /// <param name="nameFinderModel">The name finder model.</param>
        /// <param name="generatorDescriptor">The generator descriptor.</param>
        /// <param name="resources">The resources.</param>
        /// <param name="seqCodec">The seq codec.</param>
        /// <exception cref="System.ArgumentException"></exception>
        private void Init(object nameFinderModel, byte[] generatorDescriptor, Dictionary <string, object> resources, ISequenceCodec <string> seqCodec)
        {
            if (!Library.TypeResolver.IsRegistered(seqCodec.GetType()))
            {
                throw new NotSupportedException("The sequence codec " + seqCodec.GetType().Name + " is not registered on the TypeResolver.");
            }

            Manifest[SequenceCodecNameParam] = Library.TypeResolver.ResolveName(seqCodec.GetType());

            artifactMap[MaxentModelEntry] = nameFinderModel;

            if (generatorDescriptor != null && generatorDescriptor.Length > 0)
            {
                artifactMap[GeneratorDescriptorEntry] = generatorDescriptor;
            }

            if (resources != null)
            {
                // The resource map must not contain key which are already taken
                // like the name finder maxent model name

                if (resources.ContainsKey(MaxentModelEntry) ||
                    resources.ContainsKey(GeneratorDescriptorEntry))
                {
                    throw new ArgumentException();
                }

                // TODO: Add checks to not put resources where no serializer exists,
                //       make that case fail here, should be done in the BaseModel
                artifactMap.AddRange(resources);
            }

            CheckArtifactMap();
        }
Example #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TokenNameFinderModel" /> class.
        /// </summary>
        /// <param name="languageCode">The language code.</param>
        /// <param name="nameFinderModel">The name finder model.</param>
        /// <param name="beamSize">Size of the beam.</param>
        /// <param name="generatorDescriptor">The generator descriptor.</param>
        /// <param name="resources">The resources.</param>
        /// <param name="manifestInfoEntries">The manifest information entries.</param>
        /// <param name="sequenceCodec">The sequence codec.</param>
        /// <param name="factory">The tool factory.</param>
        /// <exception cref="InvalidOperationException">Model not compatible with name finder!</exception>
        /// <exception cref="System.InvalidOperationException">Model not compatible with name finder!</exception>
        public TokenNameFinderModel(
            string languageCode,
            IMaxentModel nameFinderModel,
            int beamSize,
            byte[] generatorDescriptor,
            Dictionary<string, object> resources,
            Dictionary<string, string> manifestInfoEntries,
            ISequenceCodec<string> sequenceCodec,
            TokenNameFinderFactory factory)
            : base(ComponentName, languageCode, manifestInfoEntries, factory) {
            Manifest[Parameters.BeamSize] = beamSize.ToString(CultureInfo.InvariantCulture);

            Init(nameFinderModel, generatorDescriptor, resources, sequenceCodec);

            if (!IsModelValid(nameFinderModel))
                throw new InvalidOperationException("Model not compatible with name finder!");

        }
Example #12
0
        /// <summary>
        /// Initializes the specified name finder model.
        /// </summary>
        /// <param name="nameFinderModel">The name finder model.</param>
        /// <param name="generatorDescriptor">The generator descriptor.</param>
        /// <param name="resources">The resources.</param>
        /// <param name="seqCodec">The seq codec.</param>
        /// <exception cref="System.ArgumentException"></exception>
        private void Init(object nameFinderModel, byte[] generatorDescriptor, Dictionary<string, object> resources, ISequenceCodec<string> seqCodec) {
            
            if (!Library.TypeResolver.IsRegistered(seqCodec.GetType()))
                throw new NotSupportedException("The sequence codec " + seqCodec.GetType().Name + " is not registered on the TypeResolver.");

            Manifest[SequenceCodecNameParam] = Library.TypeResolver.ResolveName(seqCodec.GetType());

            artifactMap[MaxentModelEntry] = nameFinderModel;

            if (generatorDescriptor != null && generatorDescriptor.Length > 0)
                artifactMap[GeneratorDescriptorEntry] = generatorDescriptor;

            if (resources != null) {
                // The resource map must not contain key which are already taken
                // like the name finder maxent model name

                if (resources.ContainsKey(MaxentModelEntry) ||
                    resources.ContainsKey(GeneratorDescriptorEntry)) {
                    throw new ArgumentException();
                }

                // TODO: Add checks to not put resources where no serializer exists,
                //       make that case fail here, should be done in the BaseModel
                artifactMap.AddRange(resources);
            }

            CheckArtifactMap();
        }
Example #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TokenNameFinderFactory"/> with the given parameters.
 /// </summary>
 /// <param name="featureGeneratorBytes">The feature generator bytes.</param>
 /// <param name="resources">The resources dictionary.</param>
 /// <param name="seqCodec">The sequence codec.</param>
 public TokenNameFinderFactory(byte[] featureGeneratorBytes, Dictionary<string, object> resources,
     ISequenceCodec<string> seqCodec) {
     FeatureGenerator = featureGeneratorBytes;
     Resources = resources;
     SequenceCodec = seqCodec;
 }