2010-05-19 17 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

आप जावा पैकेज को डाउनलोड करते हैं जहां आप आयात कर रहे हैं? – jjxtra

+0

@ जेजेसी, यहां आज़माएं: http://download.java.net/maven/2/net/java/textile-j/2.2/ –

+0

मैं कोशिश करूँगा, धन्यवाद! – jjxtra

1

Mylyn WikiText विभिन्न विकी वाक्यविन्यास HTML और अन्य प्रारूपों में परिवर्तित कर सकते हैं। यह मीडियाविकि सिंटैक्स का भी समर्थन करता है, जो विकिपीडिया का उपयोग करता है। हालांकि माइलिन विकीटेक्स्ट मुख्य रूप से एक ग्रहण प्लगइन है, यह भी available as standalone library है।

+0

मुझे बस एक फ़ंक्शन चाहिए जो सामग्री से विकी मार्कअप को हटा सकता है। मुझे यकीन नहीं है कि मार्कअप को हटाने के लिए mylyn का उपयोग कैसे करें। क्या आप मुझे बता सकते हैं कि यह कैसे करें। – Boolean

+0

@ एल्गोरिस्ट: माइलिन विकीटेक्स्ट मार्कअप को नहीं हटाता है, यह अन्य प्रारूपों में परिवर्तित हो जाता है। मुझे खेद है, मैंने आपके प्रश्न को गलत तरीके से पढ़ा है। –

1

Mediawiki text to plain text दृष्टिकोण की कोशिश करो। आपको शायद अपनी जरूरतों के लिए प्लेनटेक्स्ट कनवर्टर क्लास में सुधार करना होगा। example for converting Wikipedia texts to HTML के साथ संयुक्त आप टेम्पलेट सामग्री को स्थानांतरित कर सकते हैं।

2

यदि आपको सादे पाठ की आवश्यकता है तो आपको विकीक्लीन पुस्तकालय https://github.com/lintool/wikiclean का उपयोग करना चाहिए।

मुझे एक ही समस्या थी और ऐसा लगता है कि यह एकमात्र कुशल समाधान था जो जावा में मेरे लिए काम करता था।

1) आप XML स्वरूप में नहीं पाठ है तो आप एक्सएमएल इस प्रसंस्करण करने के लिए किए जाने वाले टैग जोड़ना चाहिए:

दो usecases रहे हैं। मान लीजिए कि आप पहले एक्सएमएल फाइल को संसाधित कर रहे हैं, और अब आपके पास XML संरचना के बिना सामग्री है, तो आप कोड bellow में 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); 
+0

स्टैक ओवरफ़्लो में आपका स्वागत है! सवाल [सहायता] में परिभाषित स्टैक ओवरफ़्लो के लिए विषय पर नहीं है। कृपया ऐसे प्रश्नों का उत्तर न दें; इसके बजाय, आपको उन्हें ध्यान के लिए ध्वजांकित करना चाहिए और वे बंद हो जाएंगे या उचित रूप से माइग्रेट किए जाएंगे। –

+3

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/18533404) – Bhuwan

+0

धन्यवाद @ बुवान। मैंने आपके सुझाव के आधार पर अपना उत्तर अपडेट किया। –

संबंधित मुद्दे