sakharamg's picture
Uploading all files
158b61b
#!/usr/bin/env python
#
# This file is part of moses. Its use is licensed under the GNU Lesser General
# Public License version 2.1 or, at your option, any later version.
import sys
FEAT_FIELD = 2
SCORE_FIELD = 3
def main():
if len(sys.argv[1:]) != 1:
sys.stderr.write('Usage: {} moses.ini <nbest.with-new-features >nbest.rescored\n'.format(sys.argv[0]))
sys.stderr.write('Entries are _not_ re-sorted based on new score. Use topbest.py\n')
sys.exit(2)
weights = {}
# moses.ini
ini = open(sys.argv[1])
while True:
line = ini.readline()
if not line:
sys.stderr.write('Error: no [weight] section\n')
sys.exit(1)
if line.strip() == '[weight]':
break
while True:
line = ini.readline()
if not line or line.strip().startswith('['):
break
if line.strip() == '':
continue
fields = line.split()
weights[fields[0]] = [float(f) for f in fields[1:]]
# N-best
for line in sys.stdin:
fields = [f.strip() for f in line.split('|||')]
feats = fields[FEAT_FIELD].split()
key = ''
i = 0
score = 0
for f in feats:
if f.endswith('='):
key = f
i = 0
else:
score += (float(f) * weights[key][i])
i += 1
fields[SCORE_FIELD] = str(score)
sys.stdout.write('{}\n'.format(' ||| '.join(fields)))
if __name__ == '__main__':
main()