维基百科:用于删除维基百科文本标记删除的Java库

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

谢谢。

分两步完成:

  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 --------------------------- 

This is italic and that is bold.

Header 1

a list:

  • item A
  • item B
  • item C
--------------------------- This is italic and that is bold. Header 1 a list: item A item B item C

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

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

有两个用例:

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

 String xmlStartTag = ""; String xmlEndTag = ""; String articleWithXml = xmlStartTag + article.getText() + xmlEndTag; WikiClean cleaner = new WikiClean.Builder().build(); String plainWikiText = cleaner.clean(articleWithXml); 

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

 WikiClean cleaner = new WikiClean.Builder().build(); String plainWikiText = cleaner.clean(XMLFileContents); 

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

尝试将Mediawiki文本转换为纯文本方法。 您可能需要根据需要改进PlainTextConverter类。 结合将维基百科文本转换为HTML的示例,您可以转换模板内容。