我下载了维基百科转储,现在想删除每个页面的内容中的维基百科标记。我试图编写正则表达式,但它们太多无法处理。我找到了一个python库,但我需要一个java库,因为我想集成到我的代码中。维基百科:Java库删除维基百科文本标记删除
谢谢。
我下载了维基百科转储,现在想删除每个页面的内容中的维基百科标记。我试图编写正则表达式,但它们太多无法处理。我找到了一个python库,但我需要一个java库,因为我想集成到我的代码中。维基百科: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
Mylyn WikiText可以将各种Wiki语法转换为HTML和其他格式。它还支持MediaWiki语法,这是维基百科使用的语法。尽管Mylyn WikiText主要是Eclipse插件,但它也是available as standalone library。
我只需要一个可以从内容中删除wiki标记的函数。我不确定如何使用mylyn删除标记。你能告诉我该怎么做。 – Boolean 2010-05-19 06:42:32
@Algorist:Mylyn WikiText不会删除标记,它会转换为其他格式。对不起,我误解了你的问题。 – 2010-05-19 07:49:35
尝试Mediawiki text to plain text方法。您可能必须根据需要改进PlainTextConverter类。 结合example for converting Wikipedia texts to HTML您可以跨模板内容。
如果您需要纯文本,您应该使用WikiClean库https://github.com/lintool/wikiclean。
我有同样的问题,它看起来像这是在java中为我工作的唯一有效的解决方案。
有两种usecases:
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);
欢迎来到Stack Overflow!问题不在于[帮助]中定义的Stack Overflow的主题。请不要回答这些问题;相反,你应该标记他们的注意力,他们将被关闭或适当迁移。 – 2018-01-16 15:52:03
虽然这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18533404) – Bhuwan 2018-01-16 17:26:30
谢谢@Bhuwan。我根据你的建议更新了我的答案。 – 2018-02-08 11:29:17
云你发布一个页面的样本,显示你想删除的标记吗? – bakkal 2010-05-19 06:22:53