code: def wngram2idngram(input_file, vocab_file, output_file, buffersize=100, hashtablesize=2000000, files=20, compress=False, verbosity=2, n=3, write_ascii=False, fof_size=10):
      cmd = ['wngram2idngram', '-vocab', os.path.abspath(vocab_file),
                               '-idngram', os.path.abspath(output_file)]
      if buffersize:
          cmd.extend(['-buffer', buffersize])
      if hashtablesize:
          cmd.extend(['-hash', hashtablesize])
      if files:
          cmd.extend(['-files', files])
      if verbosity:
          cmd.extend(['-verbosity', verbosity])
      if n:
          cmd.extend(['-n', n])
      if fof_size:
          cmd.extend(['-fof_size', fof_size])
      if compress:
          cmd.append('-compress')
      if write_ascii:
          cmd.append('-write_ascii')
      cmd = [str(x) for x in cmd]
      with tempfile.SpooledTemporaryFile() as output_f:
          with tempfile.SpooledTemporaryFile() as input_f:
              input_f.write(text.encode('utf-8') if sys.version_info >= (3,) and type(text) is str else text)
              input_f.seek(0)
              with  output_to_debuglogger() as err_f:
                  with do_in_tempdir():
                      exitcode = subprocess.call(cmd, stdin=input_f, stdout=output_f, stderr=err_f)
          output = output_f.read()
      logger = logging.getLogger(__name__)
      logger.debug("Command '%s' returned with exit code '%d'." % (' '.join(cmd), exitcode))
      if exitcode != 0:
          raise ConversionError("'%r' returned with non-zero exit status '%s'" % (cmd, exitcode))
      if sys.version_info >= (3,) and type(output) is bytes:
          output = output.decode('utf-8')
      return output.strip()