gpt4 book ai didi

java - 如何在 Android 应用程序中使用 OpenNLP 解析器模型?

转载 作者:行者123 更新时间:2023-12-02 12:54:53 32 4
gpt4 key购买 nike

我通过这个链接获取 java nlp https://www.tutorialspoint.com/opennlp/index.htm

我在android中尝试了以下代码:

try {
File file = copyAssets();
// InputStream inputStream = new FileInputStream(file);
ParserModel model = new ParserModel(file);
// Creating a parser
Parser parser = ParserFactory.create(model);
// Parsing the sentence
String sentence = "Tutorialspoint is the largest tutorial library.";
Parse topParses[] = ParserTool.parseLine(sentence, parser,1);
for (Parse p : topParses) {
p.show();
}
} catch (Exception e) {
}

我从互联网下载文件**en-parser-chunking.bin**并放置在android项目的 Assets 中,但代码停在第三行,即ParserModel model = new ParserModel(file ); 没有给出任何异常(exception)。需要知道这在 Android 中如何工作?如果它不起作用,android 中是否还有其他对 nlp 的支持而不消耗任何服务?

最佳答案

代码在运行时停止/中断的原因是您需要使用 InputStream 而不是 File 来加载二进制文件资源。当您按照第 2 行所示的方式“加载”File 实例时,该实例很可能为 null。理论上,ParserModel 的构造函数应该检测到此情况并生成一个 IOException 应该被抛出。然而,可悲的是,JavaDoc of OpenNLP对于这种情况并不准确,并且您没有在 catch block 中正确处理此异常。

此外,您提供的代码 fragment 应该改进,以便您知道到底出了什么问题。

因此,从 Activity 中加载 POSModel 应该以不同的方式完成。这是一个兼顾两个方面的变体:

AssetManager assetManager = getAssets();
InputStream in = null;

try {
in = assetManager.open("en-parser-chunking.bin");
POSModel posModel;
if(in != null) {
posModel = new POSModel(in);
if(posModel!=null) {
// From here, <posModel> is initialized and you can start playing with it...
// Creating a parser
Parser parser = ParserFactory.create(model);
// Parsing the sentence
String sentence = "Tutorialspoint is the largest tutorial library.";
Parse topParses[] = ParserTool.parseLine(sentence, parser,1);
for (Parse p : topParses) {
p.show();
}
}
else {
// resource file not found - whatever you want to do in this case
Log.w("NLP", "ParserModel could not initialized.");
}
}
else {
// resource file not found - whatever you want to do in this case
Log.w("NLP", "OpenNLP binary model file could not found in assets.");
}
}
catch (Exception ex) {
Log.e("NLP", "message: " + ex.getMessage(), ex);
// proper exception handling here...
}
finally {
if(in!=null) {
in.close();
}
}

这样,您就可以使用 InputStream 方法,同时注意正确的异常和资源处理。此外,如果模型文件的资源路径引用仍不清楚,您现在可以使用调试器。如需引用,请参阅official JavaDoc AssetManager#open(String resourceName)

请注意:

加载 OpenNLP 的二进制资源会消耗相当多的内存。因此,实际运行时(即智能手机)环境可能会或不会批准您的 Android 应用程序为此操作分配所需内存的请求。因此,在调用 posModel = new POSModel(in); 时,请仔细监控请求/所需的 RAM 量。

希望有帮助。

关于java - 如何在 Android 应用程序中使用 OpenNLP 解析器模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473516/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com