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

Wikipedia:Java库删除Wikipedia文本标记删除,java,parsing,wiki,wikipedia,Java,Parsing,Wiki,Wikipedia,我下载了wikipedia dump,现在想删除每个页面内容中的wikipedia标记。我试着写正则表达式,但它们太多了,无法处理。我发现了一个python库,但我需要一个java库,因为我想集成到我的代码中 谢谢。可以将各种Wiki语法转换为HTML和其他格式。它还支持MediaWiki语法,这正是Wikipedia使用的语法。虽然Mylyn WikiText主要是一个Eclipse插件,但它也是。分两步完成: 让一些现有工具将MediaWiki标记转换为普通HTML 将纯HTML转换为文本

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

谢谢。

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

分两步完成:

  • 让一些现有工具将MediaWiki标记转换为普通HTML
  • 将纯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 
    
    这是斜体,那是粗体。
    =标题1=
    清单:
    *项目A
    *B项
    *项目C
    ---------------------------
    这是斜体,那是粗体

    标题1a列表:

      项目a
    • 项目B
    • 项目C
      • --------------------------- 这是斜体,那是粗体。标题1 a列表:项目a项目B项目C

    在哪里下载要导入的java包

    这里:

    试试这种方法。您可能需要根据需要改进PlainTextConverter类。
    若你们需要纯文本,你们应该使用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);
    
    您可以使用获取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
    

    你发布了一个页面示例,其中显示了你想要删除的标记?我只需要一个函数,可以从内容中删除wiki标记。我不知道如何使用mylyn删除标记。你能告诉我怎么做吗。@算法师:Mylyn WikiText不会删除标记,它会转换成其他格式。很抱歉,我误解了你的问题。你在哪里下载你正在导入的java软件包?非常好,谢谢!它只遗漏了一些其他元素,比如{…}东西。嗨,巴特,那个下载链接不起作用,有其他下载源吗?@kzs这个链接似乎被存档了:我编辑了我的答案,将这个链接包括进来,并从评论中删除了死链接。来吧,堆栈溢出!问题不在中定义的堆栈溢出主题上。请不要回答这样的问题;相反,您应该标记它们以引起注意,它们将被适当关闭或迁移。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-谢谢@Bhuwan。我根据您的建议更新了我的答案。@Sh.Sina我应该将整个转储文件作为clean()方法的输入吗?难道我不可能只为我知道的一些页面标题获得清理过的文本吗?图书馆的文件有点误导人。我应该在哪里输入转储文件,页面标题在哪里?@Sh.Sina谢谢你的回答,但我仍然有问题。我的第一个问题是我应该把转储文件放在哪里。例如,我想获取Wikipedia中“ApacheHTTP服务器”页面的纯文本。我在“E:\\enwiki-20171103-pages-articles-multistream.xml.bz2”中有维基百科的转储文件。如果我给出了上面的文本和提到的标记,库如何知道它应该通过E驱动器中的转储文件?我在代码中没有看到加载转储文件的地方。我不想对整个转储文件进行爬网(对吗?)。我不需要它。我有我需要的页面。
    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