首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用boilerpipe提取非英文文章

使用boilerpipe提取非英文文章
EN

Stack Overflow用户
提问于 2012-02-13 19:51:13
回答 6查看 3.8K关注 0票数 6

我正在尝试使用boilerpipe java库,从一组网站中提取新闻文章。它对英文文本非常有效,但对于包含特殊字符的文本,例如带有重音符号(história)的单词,这种特殊字符无法正确提取。我认为这是一个编码问题。

在boilerpipe中,它说“如果您提取非英语文本,您可能需要更改一些参数”,然后引用一个paper。我在这篇论文中找不到解决方案。

我的问题是,在使用boilerPipe时有什么参数可以指定编码吗?有没有什么方法可以让我们正确地理解文本呢?

我是如何使用库的:(基于URL的第一次尝试):

代码语言:javascript
复制
URL url = new URL(link);
String article = ArticleExtractor.INSTANCE.getText(url);

(在HTLM源代码上排名第二)

代码语言:javascript
复制
String article = ArticleExtractor.INSTANCE.getText(html_page_as_string);
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-03-06 23:31:56

好了,我有个解决方案。正如Andrei所说,我必须更改de.l3s.boilerpipe.sax包中的HTMLFecther类,我所做的是将获取的所有文本转换为UTF-8。在fetch函数的末尾,我必须添加两行,并更改最后一行:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2012-06-05 20:31:17

您不必修改内部Boilerpipe类。

只需将InputSource对象传递给ArticleExtractor.INSTANCE.getText()方法并对该对象强制编码即可。例如:

代码语言:javascript
复制
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);

致以问候!

票数 2
EN

Stack Overflow用户

发布于 2012-02-13 20:07:34

据我所知,当你像这样使用它时,库将自动选择要使用的编码。从HTMLFetcher源文件中:

代码语言:javascript
复制
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)开始,看看是否可以覆盖编码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9260010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档