1

我有来自 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 应该是不带扩展名的文件名,例如 person_1000.xml -> person_1000 和 XML 文件的内容应该包含在标签中。

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

4

1 回答 1

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' {} \;
于 2013-01-07T00:44:24.927 回答