代码之家  ›  专栏  ›  技术社区  ›  Boolean

Wikipedia:Java库删除Wikipedia文本标记删除

  •  8
  • Boolean  · 技术社区  · 16 年前

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

    非常感谢。

    4 回复  |  直到 16 年前
        1
  •  11
  •   Bart Kiers    7 年前

    分两步进行:

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

    Web Archive link of download.java.net/maven/2/net/java/textile-j/2.2

        2
  •  3
  •   Sh. Sina    8 年前

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

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

    WikiClean cleaner = new WikiClean.Builder().build();
    String plainWikiText = cleaner.clean(XMLFileContents);
    
        3
  •  1
  •   Peter Å tibraný    16 年前

    Mylyn WikiText 可以将各种Wiki语法转换为HTML和其他格式。它还支持MediaWiki语法,这也是Wikipedia使用的语法。虽然mylynwikitext主要是一个Eclipse插件,但它也是 available as standalone library .

        4
  •  1
  •   axelclk    16 年前

    试试这个 Mediawiki text to plain text 接近。您可能需要改进PlainTextConverter类以满足您的需要。 结合 example for converting Wikipedia texts to HTML

        5
  •  1
  •   Viral    6 年前

    你可以用 Jwiki 获取维基百科数据示例:

    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