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 は拡張子なしのファイル名、ex 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 に答える