将XML文件转换为TRECTEXT格式

时间:2013-01-06 19:19:32

标签: xml bash shell converter

我有来自INEX的IMDB集合,它包含数千个目录中的数百万个XML文件,结构如下:

- actors
-- 000
--- person_1000.xml
--- ...
-- 001
--- person_1001.xml
--- ...
...
- movies
-- 000
--- 10000.xml
--- ...
...

我需要将这些文件转换为TRECTEXT格式,即

<DOC>
 <DOCNO> document_number </DOCNO>  
 <TEXT>  XML file goes here. </TEXT>  
</DOC>

其中document_number应该是没有扩展名的文件名,e.x。 person_1000.xml - &gt; person_1000和XML文件的内容应该包含在标签中。

我假设我需要一些脚本来包装集合中的每个XML文件,并且如上所示标记并覆盖原始文件。你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我不熟悉TRECTEXT格式,但是这里使用Perl的单行程应该可以做你想要的:

find . -type f -name "*.xml" -exec perl -MFile::Basename -0777pi.bak -e 's#(.*)\n#"<DOC>\n <DOCNO> ".basename($ARGV,".xml")." </DOCNO>\n <TEXT> ".$1." </TEXT>\n</DOC>\n"#es' {} \;

如果您不想保留任何备份文件,显然会删除.bak扩展名。如果您有任何问题,请告诉我。欢呼声。


根据评论更新:

find . -type f -name "*.xml" -exec perl -MFile::Basename -0777pi.bak -e 's#.*#"<DOC>\n <DOCNO> ".basename($ARGV,".xml")." </DOCNO>\n <TEXT> ".$&." </TEXT>\n</DOC>\n"#es' {} \;