chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--src', type=str, help='Source language')
|
||||
parser.add_argument('--tgt', type=str, help='Target language')
|
||||
parser.add_argument('--src-file', type=str, help='Input source file')
|
||||
parser.add_argument('--tgt-file', type=str, help='Input target file')
|
||||
parser.add_argument('--src-output-file', type=str, help='Output source file')
|
||||
parser.add_argument('--tgt-output-file', type=str, help='Output target file')
|
||||
parser.add_argument('--threshold', type=float, default=0.5, help='Threshold')
|
||||
parser.add_argument('--threshold-character', type=str, default=']', help='Threshold character')
|
||||
parser.add_argument('--histograms', type=str, help='Path to histograms')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
def read_hist(f):
|
||||
ch = []
|
||||
for line in f:
|
||||
c = line[0]
|
||||
if c == args.threshold_character:
|
||||
break
|
||||
ch.append(c)
|
||||
return ch
|
||||
|
||||
|
||||
with(open("{}/{}".format(args.histograms, args.src), 'r', encoding='utf8')) as f:
|
||||
ch1 = read_hist(f)
|
||||
|
||||
with(open("{}/{}".format(args.histograms, args.tgt), 'r', encoding='utf8')) as f:
|
||||
ch2 = read_hist(f)
|
||||
|
||||
print("Accepted characters for {}: {}".format(args.src, ch1))
|
||||
print("Accepted characters for {}: {}".format(args.tgt, ch2))
|
||||
|
||||
with open(args.src_file, 'r', encoding='utf8') as fs1, open(args.tgt_file, 'r', encoding='utf8') as fs2, open(args.src_output_file, 'w', encoding='utf8') as fos1, open(args.tgt_output_file, 'w', encoding='utf8') as fos2:
|
||||
ls1 = fs1.readline()
|
||||
ls2 = fs2.readline()
|
||||
|
||||
while ls1 or ls2:
|
||||
cnt1 = len([c for c in ls1.strip() if c in ch1])
|
||||
cnt2 = len([c for c in ls2.strip() if c in ch2])
|
||||
|
||||
if cnt1 / len(ls1) > args.threshold and cnt2 / len(ls2) > args.threshold:
|
||||
fos1.write(ls1)
|
||||
fos2.write(ls2)
|
||||
else:
|
||||
print("{} {} {} \n{} {} {}".format(args.src, cnt1 / len(ls1), ls1.strip(), args.tgt, cnt2 / len(ls2), ls2.strip()))
|
||||
|
||||
ls1 = fs1.readline()
|
||||
ls2 = fs2.readline()
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
import argparse
|
||||
from collections import namedtuple
|
||||
import os
|
||||
|
||||
DATADIR = "/path/to/train_data"
|
||||
DEDUP_FROM_DIR = "/path/to/eval/data"
|
||||
OUTPUT_DIR = "/path/to/output/data"
|
||||
|
||||
|
||||
def main(args):
|
||||
languages = set()
|
||||
for language_directory in os.listdir(DATADIR):
|
||||
if "_" in language_directory:
|
||||
src, tgt = language_directory.split("_")
|
||||
languages.add(LanguagePair(src=src, tgt=tgt))
|
||||
|
||||
data = existing_data()
|
||||
train_languages = sorted(languages)
|
||||
for language_pair in train_languages[args.start_index:args.start_index + args.size]:
|
||||
print(language_pair)
|
||||
dedup(language_pair, data)
|
||||
|
||||
|
||||
LanguagePair = namedtuple("LanguagePair", ["src", "tgt"])
|
||||
|
||||
|
||||
def existing_data():
|
||||
data = set()
|
||||
for file in os.listdir(DEDUP_FROM_DIR):
|
||||
with open(os.path.join(DEDUP_FROM_DIR, file)) as f:
|
||||
data |= set(f.readlines())
|
||||
return data
|
||||
|
||||
def dedup(language_pair, data, verbose=True, output=True):
|
||||
train_filenames = LanguagePair(
|
||||
src=f"{DATADIR}/{language_pair.src}_{language_pair.tgt}/train.{language_pair.src}",
|
||||
tgt=f"{DATADIR}/{language_pair.src}_{language_pair.tgt}/train.{language_pair.tgt}",
|
||||
)
|
||||
|
||||
output_filenames = LanguagePair(
|
||||
src=f"{OUTPUT_DIR}/train.dedup.{language_pair.src}-{language_pair.tgt}.{language_pair.src}",
|
||||
tgt=f"{OUTPUT_DIR}/train.dedup.{language_pair.src}-{language_pair.tgt}.{language_pair.tgt}"
|
||||
)
|
||||
|
||||
# If output exists, skip this pair. It has already been done.
|
||||
if (os.path.exists(output_filenames.src) and
|
||||
os.path.exists(output_filenames.tgt)):
|
||||
if verbose:
|
||||
print(f"{language_pair.src}-{language_pair.tgt} already done.")
|
||||
return
|
||||
|
||||
if verbose:
|
||||
print(f"{language_pair.src}-{language_pair.tgt} ready, will check dups.")
|
||||
|
||||
# If there is no output, no need to actually do the loop.
|
||||
if not output:
|
||||
return
|
||||
|
||||
if os.path.exists(train_filenames.src) and os.path.exists(train_filenames.tgt):
|
||||
with open(train_filenames.src) as f:
|
||||
train_source = f.readlines()
|
||||
|
||||
with open(train_filenames.tgt) as f:
|
||||
train_target = f.readlines()
|
||||
|
||||
# do dedup
|
||||
new_train_source = []
|
||||
new_train_target = []
|
||||
for i, train_line in enumerate(train_source):
|
||||
if train_line not in data and train_target[i] not in data:
|
||||
new_train_source.append(train_line)
|
||||
new_train_target.append(train_target[i])
|
||||
|
||||
assert len(train_source) == len(train_target)
|
||||
assert len(new_train_source) == len(new_train_target)
|
||||
assert len(new_train_source) <= len(train_source)
|
||||
|
||||
with open(output_filenames.src, "w") as o:
|
||||
for line in new_train_source:
|
||||
o.write(line)
|
||||
|
||||
with open(output_filenames.tgt, "w") as o:
|
||||
for line in new_train_target:
|
||||
o.write(line)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("-s", "--start-index", required=True, type=int)
|
||||
parser.add_argument("-n", "--size", required=True, type=int)
|
||||
main(parser.parse_args())
|
||||
@@ -0,0 +1,36 @@
|
||||
import gzip
|
||||
import argparse
|
||||
from string import punctuation
|
||||
|
||||
def len_no_punc(s, punc):
|
||||
return len([ch for ch in s if ch in punc])
|
||||
|
||||
def filter_overpunc(len_npunc, len_sen):
|
||||
return len_npunc < 0.5*len_sen
|
||||
|
||||
def main(args):
|
||||
punc = punctuation + "—|–"
|
||||
print('Processing file {}'.format(args.input))
|
||||
with gzip.open(args.input, 'rt', encoding=args.encoding) as tsv:
|
||||
with open(args.bitext + '.' + args.src_lang, 'wt', encoding=args.encoding) as fsrc:
|
||||
with open(args.bitext + '.' + args.tgt_lang, 'wt', encoding=args.encoding) as ftgt:
|
||||
line = tsv.readline()
|
||||
fields = line.split('\t')
|
||||
|
||||
src, tgt = fields[1], fields[2]
|
||||
|
||||
nchar_npunc_src = len_no_punc(src, punc)
|
||||
nchar_npunc_tgt = len_no_punc(tgt, punc)
|
||||
|
||||
if filter_overpunc(nchar_npunc_src, len(src)) and filter_overpunc(nchar_npunc_tgt, len(tgt)):
|
||||
fsrc.write(src.strip() + '\n')
|
||||
ftgt.write(tgt.strip() + '\n')
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--input", required=True, type=str)
|
||||
parser.add_argument('--encoding', default='utf-8', help='character encoding for input/output')
|
||||
parser.add_argument('--bitext', type=str, required=True, help='language direction')
|
||||
parser.add_argument('--src-lang', type=str, required=True, help='Source language')
|
||||
parser.add_argument('--tgt-lang', type=str, required=True, help='Target language')
|
||||
main(parser.parse_args())
|
||||
Reference in New Issue
Block a user