关于C#的OpenNLP NameFinder培训

时间:2015-12-06 15:50:04

标签: java c# .net opennlp ikvm

我想用C#在OpenNLP中训练一个新模型。我使用IKVM作为java部分。这是我列车的方法: (我将java.io引用到jv中并将open.tools引用到op)

 public string train(string lang, string entity, jv.FileInputStream taggedCorpusStream, jv.FileOutputStream modelStream)
    {
        //for encoding 
        java.nio.charset.Charset charset = java.nio.charset.Charset.forName("UTF-8");

        try
        {
            op.util.ObjectStream lineStream = new op.util.PlainTextByLineStream(taggedCorpusStream, charset);
            op.util.ObjectStream sampleStream = new op.namefind.NameSampleDataStream(lineStream);

            op.namefind.TokenNameFinderModel model;
            jv.OutputStream modelOut = null;

            try
            {
                model = op.namefind.NameFinderME.train(lang, entity, sampleStream, op.util.TrainingParameters.defaultParams(), new op.namefind.TokenNameFinderFactory());

                modelOut = new jv.BufferedOutputStream(modelStream);

                if (model != null)
                {
                    model.serialize(modelOut);
                }

                return entity + " model trained successfully";
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                sampleStream.close();
                if (modelOut != null)
                {
                    modelOut.close();
                }
            }
        } 
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        return "Something goes wrong with training module.";           
    }

我在第五个参数(即TokenNameFinderFactor)中调用NameFinder.train时得到一个NullReference异常。现在我的问题是它的主要用途以及我可以使用哪些替代方法或方法来解决这个问题?我是否需要创建自己的TokenNameFinderFactor?我不了解或理解它的文档here如何实现它。 任何帮助表示赞赏。感谢。

1 个答案:

答案 0 :(得分:3)

自从您发布Q以来已经有一段时间..不确定您是否找到了解决方案。我遇到了类似的问题(更确切地说是这里描述的问题http://permalink.gmane.org/gmane.comp.apache.opennlp.user/937)。解决方案很简单。

将所有IKVM dll复制到项目文件夹(调试/发布)。我只引用了一些,因此得到了错误。最有可能是为此目的所需的那些dll中的一个或两个,但我并没有打扰确定具体的那些。

现在,我能够训练新模型。

此致 拉姆