我有来自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文件,并且如上所示标记并覆盖原始文件。你能帮帮我吗?
答案 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' {} \;