Первая ошибка: ваш метод ожидает InputStreamFactory.Вы пытаетесь передать InputStream.InputStream не является InputStreamFactory.Так же, как Пицца не Автомобиль.
Если кто-то (компилятор) попросит у вас автомобиль, и вы дадите ему пиццу, он не сможет водить машину.Притворение, что Пицца - это Автомобиль, говоря ему: «Поверьте мне, эта пицца - это машина» (что и делает кастинг), не решит проблему.
Так что вам действительно нужно передать InputStreamFactory.Посмотрите на javadoc этого интерфейса, и вы увидите, что у него есть единственный метод createInputStream()
, который не принимает ничего в качестве аргумента и должен создавать и возвращать InputStream.
Таким образом, допустимым значением будет
() -> new FileInputStream(trainingDataFilePath)
, т. Е. Лямбда, которая не принимает входных данных и создает новый входной поток, и, таким образом, может быть выведена в InputStreamFactory.
Вторая ошибка еще проще: вы не должны указывать типы аргументов, когда вызывает метод.Только когда определяет метод.Так что
NameFinderME.train("en",
"asian.person",
sampleStream,
TrainingParameters.defaultParams(),
TokenNameFinderFactory nameFinderFactory);
должно быть
NameFinderME.train("en",
"asian.person",
sampleStream,
TrainingParameters.defaultParams(),
nameFinderFactory);
Практикуйтесь с более простыми вещами, чтобы изучить синтаксис Java.Научитесь читать сообщения об ошибках вместо того, чтобы игнорировать их, и читать Javadoc класса, который вы используете.Это очень важно.