我正在尝试使用boilerpipe java库,从一组网站中提取新闻文章。它对英文文本非常有效,但对于包含特殊字符的文本,例如带有重音符号(história)的单词,这种特殊字符无法正确提取。我认为这是一个编码问题。
在boilerpipe中,它说“如果您提取非英语文本,您可能需要更改一些参数”,然后引用一个paper。我在这篇论文中找不到解决方案。
我的问题是,在使用boilerPipe时有什么参数可以指定编码吗?有没有什么方法可以让我们正确地理解文本呢?
我是如何使用库的:(基于URL的第一次尝试):
URL url = new URL(link);
String article = ArticleExtractor.INSTANCE.getText(url);(在HTLM源代码上排名第二)
String article = ArticleExtractor.INSTANCE.getText(html_page_as_string);发布于 2012-03-06 23:31:56
好了,我有个解决方案。正如Andrei所说,我必须更改de.l3s.boilerpipe.sax包中的HTMLFecther类,我所做的是将获取的所有文本转换为UTF-8。在fetch函数的末尾,我必须添加两行,并更改最后一行:
final byte[] data = bos.toByteArray(); //stays the same
byte[] utf8 = new String(data, cs.displayName()).getBytes("UTF-8"); //new one (convertion)
cs = Charset.forName("UTF-8"); //set the charset to UFT-8
return new HTMLDocument(utf8, cs); // edited line发布于 2012-06-05 20:31:17
您不必修改内部Boilerpipe类。
只需将InputSource对象传递给ArticleExtractor.INSTANCE.getText()方法并对该对象强制编码即可。例如:
URL url = new URL("http://some-page-with-utf8-encodeing.tld");
InputSource is = new InputSource();
is.setEncoding("UTF-8");
is.setByteStream(url.openStream());
String text = ArticleExtractor.INSTANCE.getText(is);致以问候!
发布于 2012-02-13 20:07:34
据我所知,当你像这样使用它时,库将自动选择要使用的编码。从HTMLFetcher源文件中:
public static HTMLDocument fetch(final URL url) throws IOException {
final URLConnection conn = url.openConnection();
final String ct = conn.getContentType();
Charset cs = Charset.forName("Cp1252");
if (ct != null) {
Matcher m = PAT_CHARSET.matcher(ct);
if(m.find()) {
final String charset = m.group(1);
try {
cs = Charset.forName(charset);
} catch (UnsupportedCharsetException e) {
// keep default
}
}
}试着调试一下他们的代码,从ArticleExtractor.getText(URL)开始,看看是否可以覆盖编码
https://stackoverflow.com/questions/9260010
复制相似问题