我在试着索引
Wikpedia dumps
. 我的sax解析器只使用我关心的字段为xml生成项目对象,然后将其发送到生成lucene文档的articlesink。
我想过滤特殊/元页面,比如那些前缀为
Category:
或
Wikipedia:
,所以我用这些前缀组成了一个数组,并使用
article.getTitle.startsWith(prefix)
. 在英语中,一切都很好,我得到一个lucene索引,除了匹配的前缀之外,所有的页面都有。
在法语中,没有重音的前缀也可以工作(即过滤相应的页面),一些重音的前缀根本不工作(比如
Catégorie:
,有些在大多数情况下工作,但在某些页面上失败(例如
Wikipédia:
)但我看不出相应的行之间有什么区别
less
)
由于文件的大小(5gb),我不能真正检查文件中的所有差异,但它看起来像一个正确的utf-8xml。如果我用
grep
或
head
,重音是正确的(即使在有罪的页面上,
<title>Catégorie:something</title>
由正确显示
格雷普
)。另一方面,当我通过尾部/头部剪切原始文件来直接创建wiki xml时,相同的页面(这里
Catégorie:Rock par ville
)在小文件中筛选,而不是在原始文件中
有什么想法吗?
我尝试过的其他选择:
获取文件(已尝试注释行
没有成功
*)
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);