2 つのファイルがあり、特定のトークン比率に該当する行を削除する必要があります。
ファイル 1:
This is a foo bar question
that is not a parallel sentence because it's too long
hello world
ファイル 2:
c'est le foo bar question
creme bulee
bonjour tout le monde
そして、計算された比率は合計no. of words in file 1 / total no. of words in file 2
であり、この比率を下回った場合、文章は削除されます。
出力は、ファイル 1 とファイル 2 の文をタブで区切った結合ファイルです。
[アウト]:
This is a foo bar question\tc'est le foo bar question
hello world\tbonjour tout le monde
ファイルの行数は常に同じです。私は次のようにそれを行ってきましたが、Pythonを使用する代わりにunix bashで同じことを行うにはどうすればよいですか?
# Calculate the ratio.
with io.open('file1', , 'r', encoding='utf8') as f1, io.open('file2', , 'r', encoding='utf8') as f2:
ratio = len(f1.read().split()) / float(len(f2.read().split()))
# Check and output to file.
with io.open('file1', , 'r', encoding='utf8') as f1, io.open('file2', , 'r', encoding='utf8') as f2, io.open('fileout', , 'w', encoding='utf8') as fout:
for l1, l2 in zip(file1, file2):
if len(l1.split())/float(len(l2.split())) > ratio:
print>>fout, "\t".join([l1.strip() / l2.strip()])
また、比率の計算が単語ではなく文字に基づいている場合、 Python でこれを行うことができますが、unix bash で同じことを行うにはどうすればよいですか? 差は と でのみカウントされることに注意してlen(str.split())
くださいlen(str)
。
# Calculate the ratio.
with io.open('file1', , 'r', encoding='utf8') as f1, io.open('file2', , 'r', encoding='utf8') as f2:
ratio = len(f1.read()) / float(len(f2.read()))
# Check and output to file.
with io.open('file1', , 'r', encoding='utf8') as f1, io.open('file2', , 'r', encoding='utf8') as f2, io.open('fileout', , 'w', encoding='utf8') as fout:
for l1, l2 in zip(file1, file2):
if len(l1)/float(len(l2)) > ratio:
print>>fout, "\t".join([l1.strip() / l2.strip()])