8

我下载了维基百科转储,现在想删除每个页面内容中的维基百科标记。我尝试编写正则表达式,但它们太多了,无法处理。我找到了一个 python 库,但我需要一个 java 库,因为我想集成到我的代码中。

谢谢你。

4

5 回答 5

11

分两步进行:

  1. 让一些现有工具将 MediaWiki 标记转换为纯 HTML;
  2. 将纯 HTML 转换为文本。

以下演示:

import net.java.textilej.parser.MarkupParser;
import net.java.textilej.parser.builder.HtmlDocumentBuilder;
import net.java.textilej.parser.markup.mediawiki.MediaWikiDialect;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
import java.io.StringReader;
import java.io.StringWriter;

public class Test {

    public static void main(String[] args) throws Exception {

        String markup = "This is ''italic'' and '''that''' is bold. \n"+
                "=Header 1=\n"+
                "a list: \n* item A \n* item B \n* item C";

        StringWriter writer = new StringWriter();

        HtmlDocumentBuilder builder = new HtmlDocumentBuilder(writer);
        builder.setEmitAsDocument(false);

        MarkupParser parser = new MarkupParser(new MediaWikiDialect());
        parser.setBuilder(builder);
        parser.parse(markup);

        final String html = writer.toString();
        final StringBuilder cleaned = new StringBuilder();

        HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {
                public void handleText(char[] data, int pos) {
                    cleaned.append(new String(data)).append(' ');
                }
        };
        new ParserDelegator().parse(new StringReader(html), callback, false);

        System.out.println(markup);
        System.out.println("---------------------------");
        System.out.println(html);
        System.out.println("---------------------------");
        System.out.println(cleaned);
    }
}

产生:

This is ''italic'' and '''that''' is bold. 
=Header 1=
a list: 
* item A 
* item B 
* item C
---------------------------
<p>This is <i>italic</i> and <b>that</b> is bold. </p><h1 id="Header1">Header 1</h1><p>a list: </p><ul><li>item A </li><li>item B </li><li>item C</li></ul>
---------------------------
This is  italic  and  that  is bold. Header 1 a list: item A item B item C 

你在哪里下载你正在导入的java包?

此处:download.java.net/maven/2/net/java/textile-j/2.2 的 Web 存档链接

于 2010-05-19T11:26:43.163 回答
3

如果您需要纯文本,您应该使用 WikiClean 库https://github.com/lintool/wikiclean

我遇到了同样的问题,看起来这是在 java 中唯一对我有用的有效解决方案。

有两个用例:

1)当您的文本不是 XML 格式时,您应该添加执行此处理所需的 xml 标签。假设您之前正在处理 XML 文件,而现在您拥有没有 XML 结构的内容,那么您只需添加 xmlStartTag 和 xmlEndTag,如下面的代码所示,它就会处理它。

String xmlStartTag = "<text xml:space=\"preserve\">";
String xmlEndTag = "</text>";
String articleWithXml = xmlStartTag + article.getText() + xmlEndTag;
WikiClean cleaner = new WikiClean.Builder().build();
String plainWikiText = cleaner.clean(articleWithXml);

2)当您直接阅读维基百科转储文件(xml文件)时,在这种情况下,您只需将其传递给该文件即可。

WikiClean cleaner = new WikiClean.Builder().build();
String plainWikiText = cleaner.clean(XMLFileContents);
于 2018-01-16T15:25:28.107 回答
1

Mylyn WikiText可以将各种 Wiki 语法转换为 HTML 和其他格式。它还支持 Wikipedia 使用的 MediaWiki 语法。虽然 Mylyn WikiText 主要是一个 Eclipse 插件,但它也可以作为独立库使用

于 2010-05-19T06:27:42.287 回答
1

尝试使用Mediawiki 文本到纯文本的方法。您可能必须根据需要改进 PlainTextConverter 类。结合将 Wikipedia 文本转换为 HTML 的示例,您可以嵌入模板内容。

于 2010-05-19T18:49:32.083 回答
1

您可以使用Jwiki获取 Wikipedia 数据示例:

Jwiki jwiki = new Jwiki("elon musk");
System.out.println("Title :"+jwiki.getDisplayTitle()); //get title
System.out.println("Text : "+jwiki.getExtractText());  //get summary text
System.out.println("Image : "+jwiki.getImageURL());    //get image URL
于 2020-06-10T10:07:43.283 回答