我尝试在普通的Java应用程序上使用openNLP POS Models进行POS标记。现在我想在Android平台上实现它。我不确定什么是Android要求或限制因为我无法读取模型(二进制文件)并正确执行POS标记。
我尝试从外部存储中获取.bin文件以及将其放在外部库中但仍无法正常工作。这些是我的代码:
InputStream modelIn = null;
POSModel model = null;
String path = Environment.getExternalStorageDirectory().getPath() + "/TextSumIt/en-pos-maxent.bin";
modelIn = new BufferedInputStream( new FileInputStream(path));
model = new POSModel(modelIn);
我得到的错误:
11-15 06:39:35.072: W/System.err(565): opennlp.tools.util.InvalidFormatException: The profile data stream has an invalid format!
11-15 06:39:35.177: W/System.err(565): at opennlp.tools.dictionary.serializer.DictionarySerializer.create(DictionarySerializer.java:224)
11-15 06:39:35.177: W/System.err(565): at opennlp.tools.postag.POSDictionary.create(POSDictionary.java:282)
11-15 06:39:35.182: W/System.err(565): at opennlp.tools.postag.POSModel$POSDictionarySerializer.create(POSModel.java:48)
11-15 06:39:35.182: W/System.err(565): at opennlp.tools.postag.POSModel$POSDictionarySerializer.create(POSModel.java:44)
11-15 06:39:35.182: W/System.err(565): at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:135)
11-15 06:39:35.197: W/System.err(565): at opennlp.tools.postag.POSModel.<init>(POSModel.java:93)
11-15 06:39:35.197: W/System.err(565): at com.main.textsumit.SummarizationActivity.postagWords(SummarizationActivity.java:676)
11-15 06:39:35.205: W/System.err(565): at com.main.textsumit.SummarizationActivity.generateSummary(SummarizationActivity.java:252)
11-15 06:39:35.205: W/System.err(565): at com.main.textsumit.SummarizationActivity.onCreate(SummarizationActivity.java:127)
是什么导致它无法正确阅读模型?我该如何解决这个问题呢?请帮忙。
谢谢。
答案 0 :(得分:1)
对于它的价值,如果这仍然是一个问题:我有一个类似的问题试图在不同的上下文(非Android)中使用POS模型,在我的情况下,它似乎是从bin中提取失败文件,而不是模型本身的任何东西。它似乎是归档中的tags.tagdict文件的本地文件(如http://sharpnlp.codeplex.com/discussions/263620所示),所以如果你当前不需要它(我没有为我的简单场景),那么尝试将其从档案。 (但保留档案完好无损,因为它预计以拉链形式到达。)
答案 1 :(得分:0)
试试这个,它对我有用
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
try {
AssetFileDescriptor fileDescriptor =
context.getAssets().openFd("en_pos_maxent.bin");
FileInputStream inputStream = fileDescriptor.createInputStream();
POSModel posModel = new POSModel(inputStream);
posTaggerME = new POSTaggerME(posModel);
} catch (Exception e) {}