Вам нужно будет обучить свою собственную модель, аннотируя некоторые предложения в формате opennlp. Для примеров предложений, которые вы разместили, формат будет выглядеть следующим образом:
what is the risk value on <START:product> icm2500 <END>.
Delivery of <START:product> prd_234 <END> will be arrived late.
Watson is handling <START:product> router_34 <END>.
Убедитесь, что каждое предложение заканчивается новой строкой, и если в предложении есть новые строки, как-то избежать их. Как только вы создадите такой файл из своих данных, вы сможете использовать Java API для обучения такой модели.
public static void main(String[] args){
Charset charset = Charset.forName("UTF-8");
ObjectStream<String> lineStream =
new PlainTextByLineStream(new FileInputStream("your file in the above format"), charset);
ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);
TokenNameFinderModel model;
try {
model = NameFinderME.train("en", "person", sampleStream, TrainingParameters.defaultParams(),
null, Collections.<String, Object>emptyMap());
}
finally {
sampleStream.close();
}
try {
modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
model.serialize(modelOut);
} finally {
if (modelOut != null)
modelOut.close();
}
}
теперь вы можете использовать модель с namefinder.
Поскольку у вас может быть окончательный и, возможно, короткий список названий продуктов, вы можете рассмотреть простой подход с регулярными выражениями.
вот документы opennlp, которые немного освещают NameFinder:
http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind.training.tool
person
markgiaconia
schedule
25.06.2014