Java 开放式NLP NER未经过适当培训

Java 开放式NLP NER未经过适当培训,java,opennlp,Java,Opennlp,我尝试使用openNlp为NER训练一个自定义模型。当我传递一个句子来预测实体时,它只选择句子的第一个单词。不知道我哪里出错了 请在下面查找培训型号代码 public class OpenNLPNER { public static void main(String[] args) { train("en", "technology", "D:\\dl4j-examples-master\\dl4j-examples-master\\dl4j-examples\\src\

我尝试使用openNlp为NER训练一个自定义模型。当我传递一个句子来预测实体时,它只选择句子的第一个单词。不知道我哪里出错了

请在下面查找培训型号代码

public class OpenNLPNER {
    public static void main(String[] args) {
        train("en", "technology", "D:\\dl4j-examples-master\\dl4j-examples-master\\dl4j-examples\\src\\main\\java\\opennlpExamples\\src\\main\\resources\\technology.train", "D:\\dl4j-examples-master\\dl4j-examples-master\\dl4j-examples\\src\\main\\java\\opennlpExamples\\src\\main\\techno1.bin");
    }

    public static String train(String lang, String entity, InputStreamFactory inputStream, FileOutputStream modelStream) {

        Charset charset = Charset.forName("UTF-8");
        TokenNameFinderModel model = null;
        ObjectStream<NameSample> sampleStream = null;
        try {
            ObjectStream<String> lineStream = new PlainTextByLineStream(inputStream, charset);
            sampleStream = new NameSampleDataStream(lineStream);
            TokenNameFinderFactory nameFinderFactory = new TokenNameFinderFactory();
            model = NameFinderME.train("en", "technology", sampleStream, TrainingParameters.defaultParams(),
                nameFinderFactory);
        } catch (FileNotFoundException fio) {

        } catch (IOException io) {

        } finally {
            try {
                sampleStream.close();
            } catch (IOException io) {

            }
        }
        BufferedOutputStream modelOut = null;
        try {
            modelOut = new BufferedOutputStream(modelStream);
            model.serialize(modelOut);
        } catch (IOException io) {

        } finally {
            if (modelOut != null) {
                try {
                    modelOut.close();
                } catch (IOException io) {

                }
            }
        }
        return "Something goes wrong with training module.";
    }

    public static String train(String lang, String entity, String taggedCoprusFile,
                               String modelFile) {
        try {
            InputStreamFactory inputStream = new InputStreamFactory() {
                FileInputStream fileInputStream = new FileInputStream("D:\\dl4j-examples-master\\dl4j-examples-master\\dl4j-examples\\src\\main\\java\\opennlpExamples\\src\\main\\resources\\technology.train");

                public InputStream createInputStream() throws IOException {
                    return fileInputStream;
                }
            };
            // InputStreamFactory temp= new InputStream("D:\\dl4j-examples-master\\dl4j-examples-master\\dl4j-examples\\src\\main\\java\\opennlpExamples\\src\\main\\resources\\en-ner-medical.train") ;
            return train(lang, entity, inputStream,
                new FileOutputStream(modelFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "Something goes wrong with training module.";
    }
}
public class nameEntity {
    public static void main(String[] args) throws Exception {
        InputStream modelIn = new FileInputStream( "D:/main/techno.bin");
        InputStream tokenModelIn = new FileInputStream( "C:/openNLP/en-
        token.bin");
        try {
            TokenNameFinderModel model = new TokenNameFinderModel(modelIn);
            NameFinderME nameFinder = new NameFinderME(model);
            //Instantiating the NameFinder class
            //nameFinder = new NameFinderME(model);
        TokenizerModel tokenModel = new TokenizerModel(tokenModelIn);

        //Instantiating the TokenizerME class
        TokenizerME tokenizer = new TokenizerME(tokenModel);

        //Getting the sentence in the form of String array
            String sentence = "Camel is a Java software";

        String tokens[] = tokenizer.tokenize(sentence);

        //Finding the names in the sentence
        nameFinder.clearAdaptiveData();
            Span nameSpans[] = nameFinder.find(tokens);
            System.out.println(sentence);
            //Printing the spans of the names in the sentence
            for(Span s: nameSpans) {
                System.out.println(s.toString()+"  "+tokens[s.getStart()]);
            }

    }
}
列车文件:

Abdera实现了Atom联合格式和Atom发布协议,Accumulo安全实现了BigTable,ActiveMQ消息代理支持不同的通信协议和客户端,包括完整的Java消息服务(JMS)1.1客户端。基于Allura Python的开放源码软件forge实现。基于Ant Java的构建工具Apache Arrow“用于内存分析的高性能跨系统数据层”。 APR Apache Portable Runtime,一个用C编写的可移植性库,Archiva Build工件存储库管理器,Apache Beam,一个用于大数据的uber API 蜂巢Java可视化对象模型。基于Trac的猎犬缺陷跟踪器[3]。Calcite动态数据管理框架、Camel声明式路由和中介规则引擎,使用基于Java的领域特定语言实现企业集成模式

第一个字母的第一个单词大写时输出: Camel是Java软件吗 [0..1)技术是

当第一个字母的第一个单词不在大写字母中时输出: camel是一个Java软件

现在这里发生的是,如果第一个单词在火车文件中找到或没有。 如果单词的第一个字母大写,则输出为句子的第一个单词

尝试使用openNlp工具1.6.0和1.7.2版本来训练模型

请告诉我,问题出在哪里?我是否缺少任何规则


提前感谢。

Empty
catch
块是一种反模式。您是否在培训文件中为自定义命名实体提供注释?示例:Atom联合格式的Abdera实现和Atom发布协议是的,我的培训文件是这样的:Atom联合格式的Abdera实现Atom联合格式和Atom发布协议Accumulo安全实现BigTable ActiveMQ message broker,支持不同的通信协议和客户端,包括完整的Java消息服务(JMS)1.1客户端。基于Allura Python的基于Java的软件构建工具的开源实现。@MallikarjunM???能否提供培训数据给我,让我尝试创建模型和预测..空
catch
块是反模式的。是否为自定义命名实体提供注释,在培训文件?示例:Atom联合格式和Atom发布协议的Abdera实现是的,我的培训文件是这样的:Atom联合格式和Atom发布协议的Abdera实现Accumulo安全实现BigTable ActiveMQ message broker支持不同的通信协议和客户端,包括一个完整的Java消息服务(JMS)1.1客户端。Allura Python是一个基于Java的构建工具的开源实现。@MallikarjunM???你能提供给我培训数据吗,这样我就可以尝试创建模型和预测。。