0

テキストファイルを操作するスクリプトプログラム(Perl、Shellなど)で、自然言語処理関連のプロジェクトを適切にバージョン管理するにはどうすればよいか考えています。スクリプトは通常、テキスト データ ファイルを入力として読み取り、何らかの処理を行い、結果をテキスト ファイルとして再度出力します。そのため、多くのコードとデータ ファイルがすべてテキスト形式で存在します。

データ ファイルはサイズが大きくなる可能性があるため、明らかに、バージョン管理コード ファイルのみを使用します。そして、さまざまな方法を試すために、コードのブランチを維持する必要があります。

(1) バージョン管理の現在の解決策は、単一のディレクトリ「proj」の同じレベルにコードとデータ ファイルを混在させることです。

code1, ..., codem, data1, ..., datan

ブランチで作業する場合、上記の「フラットな」ディレクトリ構造を維持するために、「branchi」サブフォルダーではなく、「proj」直下の「branchi」内のすべてのファイルをチェックアウトする必要があります。

私の現在のソリューションの長所は、ディレクトリ移行のオーバーヘッドが最小限であることです。コードとデータは同じディレクトリにあるため、スクリプトの呼び出しと結果の確認には、最小限の「cd」が必要です。

script1 データイン データアウト

vi データ出力

短所は、コードとデータ ファイルの数が増えると、"proj" フォルダー内のファイルの長いリストに直面すると、見た目が乱雑になることです。

(2) もう 1 つの方法は、コードとデータを別のディレクトリに置くことです。

「プロジェクト/ソース」と「プロジェクト/データ」。

長所と短所は、ソリューション (1) とは正反対です。長所は、よりクリーンなディレクトリ構造を取得できることです。短所は、スクリプトを呼び出したり結果を確認したりするときに、多くのディレクトリ遷移を行う必要があることです。

script1 ../data/data-in ../data/data-out

vi ../data/data-out または cd ../data; vi データ出力

src フォルダにある場合。そのため、データ ファイル "../data" の追加の親パスは、特に多くの簡単な実験と結果のチェックを行う必要がある場合に、多くのディレクトリ移行の手間をもたらします。

他に提案はありますか?ありがとう。

4

1 に答える 1

2

2 番目の方法で実行します。プロジェクトを分離し、その下に独自の data/src を配置します。

スクリプト、シンボリックリンク、およびエイリアスを簡単に使用して、最終的に何を操作しても便利になります。

しかし、Svn のディレクトリ レイアウトが混沌とした巨大なボールである場合、乱雑になりすぎると、もつれを解くのが非常に難しくなります。

したがって、レイアウトは次のようになります。

/sources/
    /project1/
        script-for-proj-1
        other-stuff-for-proj-1
        data-for-proj1              --> /data/dataset24
    /project2/
        script-for-proj2
        other-stuff-for-proj-2
        data-for-proj2              --> /data/dataset23

ここでは、すべてが/sourcesSubversion に存在します。各プロジェクト ディレクトリには、必要なデータ ディレクトリへのシンボリック リンクがあります。しかし、すべてのデータは実際には に存在し/data、そのために意味のあるツールを使用してアーカイブ/維持されます。

このシステムのもう 1 つの利点は、データはバージョン管理されていませんが、シンボリック リンクはバージョン管理されているため、プロジェクトでさまざまな入力が必要な場合に、プロジェクトが使用しているものを追跡できることです。

于 2012-04-27T22:54:09.173 に答える