我正在嘗試索引Wikpedia dumps。我的SAX解析器僅使用我關心的字段爲XML創建Article對象,然後將其發送到生成Lucene文檔的ArticleSink。過濾維基百科的XML轉儲:某些口音錯誤
我要過濾特殊/元頁面,如那些具有Category:
或Wikipedia:
前綴,所以我做了那些前綴的陣列和測試每個頁面的對這個數組稱號,我ArticleSink,使用article.getTitle.startsWith(prefix)
。在英語中,一切正常,我得到一個Lucene索引,除了匹配的前綴以外,所有頁面都有。
在法語中,沒有重音的前綴也可以工作(即過濾相應的頁面),某些重音前綴完全不起作用(如Catégorie:
),有些在大部分時間工作,但在某些頁面上失敗(如Wikipédia:
),但我看不到相應的行之間有任何區別(在less
)。
由於其大小(5 GB),我無法真正檢查文件中的所有差異,但它看起來像一個正確的UTF-8 XML。如果我使用grep
或head
獲取文件的一部分,那麼重音是正確的(即使在有文件的頁面上,<title>Catégorie:something</title>
正確顯示爲grep
)。另一方面,當我通過尾部/剪切原始文件來修正wiki XML時,同一頁面(這裏是Catégorie:Rock par ville
)在小文件中被過濾,而不是在原始文件中...
任何想法?
替代我想:
獲取文件(註釋行進行了嘗試 wihtout成功 *):
FileInputStream fis = new FileInputStream(new File(xmlFileName));
//ReaderInputStream ris = ReaderInputStream.forceEncodingInputStream(fis, "UTF-8");
//(custom function opening the stream,
//reading it as UFT-8 into a Reader and returning another byte stream)
//InputSource is = new InputSource(fis); is.setEncoding("UTF-8");
parser.parse(fis, handler);
過濾前綴:
ignoredPrefix = new String[] {"Catégorie:", "Modèle:", "Wikipédia:",
"Cat\uFFFDgorie:", "Mod\uFFFDle:", "Wikip\uFFFDdia:", //invalid char
"Catégorie:", "Modèle:", "Wikipédia:", // UTF-8 as ISO-8859-1
"Image:", "Portail:", "Fichier:", "Aide:", "Projet:"}; // those last always work
*勘誤
其實,是我不好,是一個我想工作,我測試了錯誤的指標:
InputSource is = new InputSource(fis);
is.setEncoding("UTF-8"); // force UTF-8 interpretation
parser.parse(fis, handler);
順便提一下,維基百科XML文件在開頭爲標籤指定了這些特殊前綴。通過SAX處理程序自動加載它們並沒有改變剩下的問題。 –
2010-03-31 16:46:46