我下载了维基百科转储,现在想删除每个页面内容中的维基百科标记。我尝试编写正则表达式,但它们太多了,无法处理。我找到了一个 python 库,但我需要一个 java 库,因为我想集成到我的代码中。
谢谢你。
分两步进行:
以下演示:
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 存档链接
如果您需要纯文本,您应该使用 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);
Mylyn WikiText可以将各种 Wiki 语法转换为 HTML 和其他格式。它还支持 Wikipedia 使用的 MediaWiki 语法。虽然 Mylyn WikiText 主要是一个 Eclipse 插件,但它也可以作为独立库使用。
尝试使用Mediawiki 文本到纯文本的方法。您可能必须根据需要改进 PlainTextConverter 类。结合将 Wikipedia 文本转换为 HTML 的示例,您可以嵌入模板内容。
您可以使用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