0

我正在使用 OpenNLP 在 Android 中开发 TTS。我将每个配置文件放在 /assets/ 目录中。并从 AssetManager 获取 InputStream。但问题是当 InputStream 作为初始化 POSModel 的输入参数时,会引发 InvalidFormatException。

以下代码:

1.获取输入流。

public static InputStream getStream(String propertyName)
            throws FileNotFoundException, MaryConfigurationException        {
        InputStream stream = null; 
        String propertyValue = getProperty(propertyName);
    if (propertyValue == null) {
        return null; 
    } else {
        try {

            stream =     (InputStream)Globals.context.getResources().getAssets().open(propertyValue); 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return stream;

}

新的 Pos 标记器。

    InputStream modelStream = (InputStream)MaryProperties.needStream(propertyPrefix+"model");    //here should return the InputStream of en-pos-maxent.bin
        try {
            tagger = new POSTaggerME(new POSModel(modelStream));  
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

这里得到 InvalidFormatException,

opennlp.tools.util.InvalidFormatException: The profile data stream has an invalid format

有人知道吗?

4

2 回答 2

1

确保您的方法返回正确的类型-InputStream OpenNLP 将寻找 a FileInputStreamor ByteArrayInputStream。该错误似乎表明这是问题所在。您打开实际文件的方式似乎也有点可疑 - 您的评论说您正在打开en-pos-maxent.bin,但propertyPrefix+"model"看起来不像我打开具有该名称的文件的方式。

于 2013-10-09T13:15:19.573 回答
0

我发现了一个类似的 InvalidFormatException 异常。进一步追踪显示失败的功能是

org.xml.sax.helpers.XMLReaderFactory.createXMLReader

这个帖子解决了。

于 2016-11-03T07:29:44.180 回答