Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化Java程序并侦听查询_Java_Stanford Nlp - Fatal编程技术网

初始化Java程序并侦听查询

初始化Java程序并侦听查询,java,stanford-nlp,Java,Stanford Nlp,我正在编写一个应用程序,它使用了斯坦福大学的CoreNLP库和许多其他库。应用程序获取URL,从中提取文本,然后使用CoreNLP处理文本。问题是CoreNLP库在注释文本之前需要花费大量时间将其模型加载到内存中。我正在寻找一种最好的方法来完成一次初始化步骤,下一次当我想使用应用程序时,我输入一个URL,它不会再次加载模型。也许你应该尝试在容器中运行你的应用程序,或者类似的?您可以将应用程序打包为一个URL,然后容器将初始化所有java类一次,并且假设您公开一个servlet,该servlet将

我正在编写一个应用程序,它使用了斯坦福大学的CoreNLP库和许多其他库。应用程序获取URL,从中提取文本,然后使用CoreNLP处理文本。问题是CoreNLP库在注释文本之前需要花费大量时间将其模型加载到内存中。我正在寻找一种最好的方法来完成一次初始化步骤,下一次当我想使用应用程序时,我输入一个URL,它不会再次加载模型。

也许你应该尝试在容器中运行你的应用程序,或者类似的?您可以将应用程序打包为一个URL,然后容器将初始化所有java类一次,并且假设您公开一个servlet,该servlet将触发单个URL的NLP处理,那么您将为所有后续NLP处理调用节省初始化时间

编辑:

您不必使用servlet。 或者,您可以执行以下操作之一:

  • 在WAR中运行一个循环,该循环将从某些配置源(DB或文件)读取URL,并对每个URL执行NLP和解析(存储结果以供以后分析?)
  • 更高级的解决方案可能包括您现有的java程序,该程序将与协作,每X秒/分钟/小时等运行一个NLP+解析器。更高级的版本将使用Quartz with
    祝你好运

    也许你应该试着在容器中运行你的应用程序——或者像这样?您可以将应用程序打包为一个URL,然后容器将初始化所有java类一次,并且假设您公开一个servlet,该servlet将触发单个URL的NLP处理,那么您将为所有后续NLP处理调用节省初始化时间

    编辑:

    您不必使用servlet。 或者,您可以执行以下操作之一:

  • 在WAR中运行一个循环,该循环将从某些配置源(DB或文件)读取URL,并对每个URL执行NLP和解析(存储结果以供以后分析?)
  • 更高级的解决方案可能包括您现有的java程序,该程序将与协作,每X秒/分钟/小时等运行一个NLP+解析器。更高级的版本将使用Quartz with
    祝你好运

    从他们的页面查看示例,以下内容用于注释文本:

    Properties props = new Properties();
    props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    String text = ... // Add your text here!
    Annotation document = new Annotation(text);
    pipeline.annotate(document);
    

    因此,您可以在应用程序初始化时创建一个对象并解析一个伪文本。您忽略操作的结果,因为其目的是在加载应用程序时加载所需的模块。之后,您可以保留“pipeline”对象,并在需要时引用它以进行其他注释操作。

    查看页面中的示例,以下内容用于注释文本:

    Properties props = new Properties();
    props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    String text = ... // Add your text here!
    Annotation document = new Annotation(text);
    pipeline.annotate(document);
    

    因此,您可以在应用程序初始化时创建一个对象并解析一个伪文本。您忽略操作的结果,因为其目的是在加载应用程序时加载所需的模块。之后,您可以保留“pipeline”对象,并在需要时引用它以进行其他注释操作。

    要获得有用的答案,您应该详细解释如何启动应用程序-很难说我自己没有使用该API,但您可以让JVM在内存中运行初始化的库,每次都要重复使用同一个JVM。我想知道最好的方法。我需要的是,应用程序将获取一个URL并尽快处理它,然后等待其他URL(结果将存储在数据库中)。要得到有用的答案,你应该更多地解释你是如何启动这个应用程序的——很难说我自己没有使用这个API,但是你可以让JVM在内存中运行初始化的库,每次都要重复使用同一个JVM我想问的是最好的方法我所需要的就是应用程序将获取一个URL并尽快处理它,然后等待其他URL(结果将存储在数据库中)。好的,我有同样的想法,但是有没有一种方法可以在没有servlet的情况下完成同样的事情?谢谢你的回答,你知道我是如何代替计划观看一个文件的更改(即,当我向文件添加一个新的URL时,程序将使用添加的URL运行)@madmed,你可以在这里检查一些代码好的,我有同样的想法,但是有没有一种方法可以在没有servlet的情况下做同样的事情?谢谢你的回答,你知道我是如何监视一个文件的更改(即,当我向该文件添加一个新的URL时,程序将使用添加的URL运行)而不是安排时间吗@madmed,你可以在这里检查一些代码