TheChrisONeil
TheChrisONeil

Reputation: 405

TypeInitializationException when running Stanford.NLP.CoreNLP 3.8 example in c#

I realize this issue was observed and resolved with the inclusion of the props.setProperty("ner.useSUTime", "0"); However, the error persists. I added corenlp 3.8 via nuget, I am using c# visual studio 2017, in a NetStandard2.0 configuration.

My code: `

public Dictionary<int, List<Word>> GetPOSFromStandforNLP(string sent)
        {
            var pos = new Dictionary<int, List<Word>>();
            var jarRoot = @"../vendor/stanford-corenlp-3.8.0-models";

            // Annotation pipeline configuration
            var props = new Properties();
            // Annotation pipeline configuration
            var props = new Properties();
            props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
            props.setProperty("ner.useSUTime", "0");

            try
            {
                CultureInfo ci = new CultureInfo("en-US");
                Thread.CurrentThread.CurrentCulture = ci;
                Thread.CurrentThread.CurrentUICulture = ci;

                var curDir = Environment.CurrentDirectory;
                Directory.SetCurrentDirectory(jarRoot);   
                var pipeline = new StanfordCoreNLP(props);
                Directory.SetCurrentDirectory(curDir);
                // Annotation
                var annotation = new Annotation(text);
                pipeline.annotate(annotation);
                // Result - Pretty Print
                using (var stream = new ByteArrayOutputStream())
                {
                    pipeline.prettyPrint(annotation, new PrintWriter(stream));
                    Console.WriteLine(stream.toString());
                    stream.close();
                }

The error:

System.TypeInitializationException: The type initializer for 'edu.stanford.nlp.pipeline.AnnotationPipeline' threw an exception. ---> System.TypeInitializationException: The type initializer for 'edu.stanford.nlp.util.logging.Redwood' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.     at IKVM.Internal.AssemblyClassLoader.LoadCustomClassLoaderRedirects()    at IKVM.Internal.AssemblyClassLoader.GetCustomClassLoaderType()    at IKVM.Internal.AssemblyClassLoader.GetJavaClassLoader()    at java.lang.Class.getClassLoader(CallerID )    at java.lang.Class.desiredAssertionStatus()    at edu.stanford.nlp.util.logging.Redwood..cctor(

Upvotes: 2

Views: 473

Answers (1)

NightOwl888
NightOwl888

Reputation: 56889

Stanford.NLP.NET is an IKVM project. IKVM is a now defunkt Java virtual machine implementation in .NET. It is does not support .NET Standard 2.0, only .NET Framework and Mono.

So your options are:

  1. Target .NET Framework or Mono.
  2. Port the Stanford.NLP.CoreNLP Java project to .NET Standard.
  3. Port the IKVM.NET project to .NET Standard (and preferably open source it so others who need a quick path to running Java code in .NET Standard can do so). Note that there is currently an effort underway called ikvm-revived.
  4. Call Java using Pinvoke and a plain C-wrapper as a go-between that uses JNI to load the JVM and to expose functions that call into Java using JNI, as described here.
  5. Implement your application in Java or another language that Stanford.NLP.CoreNLP supports.

Upvotes: 5

Related Questions