2010-05-19 37 views
7

Tôi đã tải xuống wikipedia dump và bây giờ muốn xóa đánh dấu wikipedia trong nội dung của mỗi trang. Tôi đã cố gắng viết các biểu thức thông thường nhưng chúng quá nhiều để xử lý. Tôi tìm thấy một thư viện python nhưng tôi cần một thư viện java bởi vì, tôi muốn tích hợp vào mã của tôi.Wikipedia: Thư viện Java để xóa bỏ loại bỏ đánh dấu văn bản wikipedia

Cảm ơn bạn.

+0

Cloud bạn đăng mẫu trang hiển thị đánh dấu bạn muốn xóa? – bakkal

Trả lời

9

Do nó trong hai bước:

  1. cho một số công cụ hiện chuyển đổi MediaWiki mark-up vào HTML đồng bằng;
  2. chuyển đổi HTML thuần túy thành văn bản.

Bản demo sau:

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

sản xuất:

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

Bạn tải xuống các gói java bạn đang nhập ở đâu? – jjxtra

+0

@JJC, hãy thử tại đây: http://download.java.net/maven/2/net/java/textile-j/2.2/ –

+0

Tôi sẽ cố gắng, cảm ơn! – jjxtra

1

Mylyn WikiText có thể chuyển đổi các cú pháp Wiki khác nhau thành HTML và các định dạng khác. Nó cũng hỗ trợ cú pháp MediaWiki, đó là những gì Wikipedia sử dụng. Mặc dù Mylyn WikiText chủ yếu là một plugin Eclipse, nó cũng là available as standalone library.

+0

Tôi chỉ cần một chức năng có thể xóa đánh dấu wiki khỏi nội dung. Tôi không chắc chắn làm thế nào để sử dụng mylyn để loại bỏ các đánh dấu. Bạn có thể cho tôi biết làm thế nào để làm điều đó. – Boolean

+0

@Algorist: Mylyn WikiText không loại bỏ đánh dấu, nó chuyển đổi thành các định dạng khác. Tôi xin lỗi, tôi đã hiểu sai câu hỏi của bạn. –

2

Nếu bạn cần văn bản thuần túy, bạn nên sử dụng thư viện WikiClean https://github.com/lintool/wikiclean.

Tôi gặp vấn đề tương tự và có vẻ như đây là giải pháp hiệu quả duy nhất có hiệu quả đối với tôi trong java.

Có hai usecases:

1) Khi bạn có văn bản không ở định dạng XML thì bạn nên thêm thẻ xml cần thiết để làm chế biến này. Giả sử bạn đang xử lý tệp XML trước đó, và bây giờ bạn có nội dung không có cấu trúc XML, thì bạn chỉ cần thêm xmlStartTag và xmlEndTag như trong đoạn mã dưới đây, và nó xử lý nó.

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) Khi bạn đọc tệp kết xuất Wikipedia trực tiếp (tệp xml), trong trường hợp đó, bạn chỉ cần chuyển tệp qua tệp và nó đi qua.

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

Chào mừng bạn đến với Stack Overflow! Câu hỏi không phải là chủ đề cho Stack Overflow như được định nghĩa trong [help]. Xin đừng trả lời những câu hỏi như vậy; thay vào đó, bạn nên gắn cờ chúng để được chú ý và chúng sẽ bị đóng hoặc di chuyển một cách thích hợp. –

+3

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/chất lượng thấp-bài viết/18533404) – Bhuwan

+0

Cảm ơn @Bhuwan. Tôi đã cập nhật câu trả lời của tôi dựa trên đề xuất của bạn. –

Các vấn đề liên quan