OpenNLP.Net inputStreamFactory: ошибка при попытке загрузить файл - PullRequest
0 голосов
/ 15 мая 2019

Hy, Я довольно новичок в OpenNLP.Net и немного растерялся на базовом шаге.

Я посмотрел на некоторый код Java и попытался преобразовать его в C #, но я думаю, что я совершенно не прав, учитывая, что я не нахожу код C #

Сейчас я пытаюсь запустить этот код, расположенный в главном

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using opennlp.tools.doccat;
using opennlp.tools.tokenize;
using opennlp.tools.util;

public class Account
{
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime DOB { get; set; }
}



namespace Loading_OpenNLP
{
    class Program
    {
        static void Main(string[] args)

        {
            Account account = new Account
            {
                Name = "John Doe",
                Email = "john@microsoft.com",
                DOB = new DateTime(1980, 2, 20, 0, 0, 0, DateTimeKind.Utc),
            };
            string json = JsonConvert.SerializeObject(account, Formatting.Indented);
            Console.WriteLine(json);
            getNLPModel();
            string pause = Console.ReadLine();


        }

    static void getNLPModel()//java.io.File openNLPTraining) 
    {
        InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new java.io.File("D:\\text.txt"));

        ObjectStream lineStream = new PlainTextByLineStream(inputStreamFactory, "UTF-8");
        ObjectStream sampleStream = new DocumentSampleStream(lineStream);

        }
    }
}

Компилируется, но файл не найден ... Что не так?

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете реализовать InputStreamFactory самостоятельно.

Вот пример F #, который обучает пользовательскую модель NER, InputStreamFactory реализован с использованием F # выражений объекта

open java.nio.charset
open java.io

#I "../packages/OpenNLP.NET/lib/"
#r "opennlp-tools-1.8.4.dll"
#r "opennlp-uima-1.8.4.dll"
open opennlp.tools.util
open opennlp.tools.namefind

let train (inputFile:string) = 
    let factory =
        { new InputStreamFactory with 
            member __.createInputStream () =
                new FileInputStream(inputFile) :> InputStream }
    let lineStream = new PlainTextByLineStream(factory, StandardCharsets.UTF_8)
    use sampleStream = new NameSampleDataStream(lineStream)
    let nameFinderFactory = new TokenNameFinderFactory()

    let trainingParameters = new TrainingParameters();
    //trainingParameters.put(TrainingParameters.ITERATIONS_PARAM, "5");
    //trainingParameters.put(TrainingParameters.CUTOFF_PARAM, "200");

    NameFinderME.train ("en", "person", sampleStream, trainingParameters, nameFinderFactory)

в C# один и тот же код может выглядеть следующим образом

using java.nio.charset;
using java.io;
using opennlp.tools.util;
using opennlp.tools.namefind;

namespace OpenNLP.Train
{
    class MyStreamFactory: InputStreamFactory
    {
        public Factory(string fileName) => _filename = fileName;
        private readonly string _filename;

        public InputStream createInputStream()
            => new FileInputStream(_filename);
    }
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new MyStreamFactory("D:\\text.txt");
            var lineStream = new PlainTextByLineStream(factory, StandardCharsets.UTF_8);
            var sampleStream = new NameSampleDataStream(lineStream);
            var nameFinderFactory = new TokenNameFinderFactory();

            var trainingParameters = new TrainingParameters();

            var model = NameFinderME.train("en", "person", sampleStream, trainingParameters, nameFinderFactory);
        }
    }
}
...