2010-05-19 6 views
7

위키피디아 덤프를 다운로드 했으므로 각 페이지의 내용에 위키 백과 마크 업을 제거하고 싶습니다. 정규식 작성을 시도했지만 처리하기에는 너무 많습니다. 파이썬 라이브러리를 찾았지만 자바 라이브러리가 필요하다. 내 코드에 통합하고 싶기 때문이다.위키 피 디아 : 위키 피 디아 텍스트 마크 업 제거를 제거하는 자바 라이브러리

감사합니다.

+0

구름 당신은 제거 할 마크 업을 보여주는 페이지 샘플을 게시하고 있습니까? – bakkal

답변

9

두 단계를 수행합니다

  1. 일부 기존 도구를 수 있도록 일반 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 
+0

가져 오는 Java 패키지는 어디서 다운로드합니까? – jjxtra

+0

@JJC, 여기에서 시도하십시오 : http://download.java.net/maven/2/net/java/textile-j/2.2/ –

+0

나는 그것을 고맙겠습니다! – jjxtra

1

Mylyn WikiText은 다양한 위키 구문을 HTML 및 다른 형식으로 변환 할 수 있습니다. Wikipedia가 사용하는 MediaWiki 구문도 지원합니다. Mylyn WikiText는 주로 Eclipse 플러그인이지만, available as standalone library입니다.

+0

위키 마크 업을 제거 할 수있는 함수가 필요합니다. 마크 업을 제거하기 위해 mylyn을 사용하는 방법을 모르겠습니다. 어떻게하는지 말해 줄 수 있어요. – Boolean

+0

@ Algorist : Mylyn WikiText는 마크 업을 제거하지 않고 다른 형식으로 변환합니다. 죄송합니다. 질문을 잘못 읽었습니다. –

2

일반 텍스트가 필요한 경우 WikiClean 라이브러리 https://github.com/lintool/wikiclean을 사용해야합니다.

나는 이것이 자바에서 저에게 효과가있는 유일한 효율적인 솔루션 인 것처럼 보입니다. 당신이 XML 형식이 아닌 텍스트가있을 때 당신이 처리를 할 필요가 XML 태그를 추가해야합니다

1) :

두 쓰임새가 있습니다. 이전에 XML 파일을 처리 중이며 XML 구조가없는 컨텐츠가있는 경우 xmlStartTag 및 xmlEndTag를 코드에서와 같이 추가하면 처리됩니다.

2) 위키피디아 덤프 파일을 직접 읽는 경우 (xml 파일),이 경우 파일을 통해 전달하기 만하면됩니다.

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

스택 오버플로에 오신 것을 환영합니다! 질문은 [도움말]에 정의 된 스택 오버플로에 대한 주제가 아닙니다. 그런 질문에 대답하지 마십시오. 대신주의를 기울여 플래그를 지정해야하며 닫히거나 적절히 마이그레이션됩니다. –

+3

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [검토 중] (리뷰/저품절 게시물/18533404) – Bhuwan

+0

감사합니다. @Bhuwan. 귀하의 제안에 따라 답변을 업데이트했습니다. –

관련 문제