我下載了維基百科轉儲,現在想刪除每個頁面的內容中的維基百科標記。我試圖編寫正則表達式,但它們太多無法處理。我找到了一個python庫,但我需要一個java庫,因爲我想集成到我的代碼中。維基百科:Java庫刪除維基百科文本標記刪除
謝謝。
我下載了維基百科轉儲,現在想刪除每個頁面的內容中的維基百科標記。我試圖編寫正則表達式,但它們太多無法處理。我找到了一個python庫,但我需要一個java庫,因爲我想集成到我的代碼中。維基百科:Java庫刪除維基百科文本標記刪除
謝謝。
做的兩個步驟:
以下演示:
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
Mylyn WikiText可以將各種Wiki語法轉換爲HTML和其他格式。它還支持MediaWiki語法,這是維基百科使用的語法。儘管Mylyn WikiText主要是Eclipse插件,但它也是available as standalone library。
我只需要一個可以從內容中刪除wiki標記的函數。我不確定如何使用mylyn刪除標記。你能告訴我該怎麼做。 – Boolean 2010-05-19 06:42:32
@Algorist:Mylyn WikiText不會刪除標記,它會轉換爲其他格式。對不起,我誤解了你的問題。 – 2010-05-19 07:49:35
嘗試Mediawiki text to plain text方法。您可能必須根據需要改進PlainTextConverter類。 結合example for converting Wikipedia texts to HTML您可以跨模板內容。
如果您需要純文本,您應該使用WikiClean庫https://github.com/lintool/wikiclean。
我有同樣的問題,它看起來像這是在java中爲我工作的唯一有效的解決方案。
有兩種usecases:
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);
2)當你正在閱讀的維基百科直接轉儲文件(XML文件),在這種情況下,你只是通過它通過文件,它經歷。
WikiClean cleaner = new WikiClean.Builder().build();
String plainWikiText = cleaner.clean(XMLFileContents);
歡迎來到Stack Overflow!問題不在於[幫助]中定義的Stack Overflow的主題。請不要回答這些問題;相反,你應該標記他們的注意力,他們將被關閉或適當遷移。 – 2018-01-16 15:52:03
雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18533404) – Bhuwan 2018-01-16 17:26:30
謝謝@Bhuwan。我根據你的建議更新了我的答案。 – 2018-02-08 11:29:17
雲你發佈一個頁面的樣本,顯示你想刪除的標記嗎? – bakkal 2010-05-19 06:22:53