首先,安装依赖的软件包:

  1.C/C++ compiler:编译器gcc 3.4.3及以上版本,本机实验环境为gcc 4.5.2

  2.GNU make:构建和管理工程的工具,解释Makefile里的指令,描述了整个工程所有文件的编译顺序和编译规则。这里是为了控制 SRILM 的编译和安装

  3.GNU gawk:GNU所做的awk程序语言。对于文字资料的修改,对比,抽取等处理,使用c或passcal等不方便且费时,awk 能够以很短的程序完成。这里是处理SRILM里的一些脚本文件

  4.GNU gzip:使用C语言编写的一种解压缩软件。这里是为了使 SRILM 能够处理.Z和.GZ后缀的压缩文件

  5.bzip2:数据压缩软件,压缩效率更高。这里是使SRILM能处理.bz2后缀的压缩文件

  6.P7zip:数据压缩软件。这里是使SRILM能处理7-Zip的压缩文件

  7.csh:Unix shell的一种

安装过程:

  一.下载 SRILM 压缩包        

    链接:http://www.speech.sri.com/projects/srilm/download.html,创建安装的目录,并把压缩包解压到该目录。

    我这里使用的是 srilm 1.6.0beta,安装目录是:/home/moses/tools/srilm

  二.修改 Makefile 文件(SRILM 目录下)

    1.找到:

     # SRILM = /home/speech/stolcke/project/srilm/devel

     另起一行输入 SRILM 的安装路径  SRILM = $(PWD)

    2.找到:

     MACHINE_TYPE := $(shell $(SRILM)/sbin/machine-type)

     在其前加#注释掉,并另起一行输入:

     MACHINE_TYPE := i686-gcc4

     通过 uname -m 命令可以看到我的机器架构是 i686,那么需要同时修改sbin/machine-type,将其中对应位置改为 set MACHINE_TYPE = i686-gcc4

     此行告诉 Makefile 之后要看的设置在/home/user/srilm/common/Makefile.machine.i686-gcc4中,如果系统是 64 位的,请改为 i686-m64,同时也可能需要修改相应的 sbin/machine-type

  三.把 ubuntu 11.04 系统的相关设定告诉 Makefile

    用编辑器修改 srilm/common/Makefile.machine.i686-gcc4

    1.找到:

     GCC_FLAGS = -mtune=pentium3 -Wall -Wno-unused-variable -Wno-uninitialized

     CC = $(GCC_PATH)gcc $(GCC_FLAGS) -Wimplicit-int

     CXX = $(GCC_PATH)g++ $(GCC_FLAGS) -DINSTANTIATE_TEMPLATES

     这里是为了告诉 SRILM 系统使用的 compiler(c 和 c++),符合安装情况,不需要修改。如果是 64 位 CPU,需要做相应调整

    2.找到:

     TCL_INCLUDE =

     TCL_LIBRARY =

     修改为 

     TCL_INCLUDE =

     TCL_LIBRARY =

     NO_TCL = X  

    3.找到:

     GAWK = /usr/bin/awk    

     修改为 

     GAWK = /usr/bin/gawk

    :各系统中这些软件的安装情况可能不同,查找软件的安装位置,可使用命令:which is gcc 等

  四.安装SRILM并测试

    1.编译 SRILM

     make World

    2.修改环境变量

     运行命令 export PATH=/home/moses/tools/srilm/bin/i686-gcc4:/home/moses/tools/srilm/bin:$PATH

    3.测试

     编译通过不等于编译成功,必须利用 SRILM 提供的测试模块进行测试,进入 SRILM 根目录

     make test

     :SRILM 从1.5.10开始,test 文件已不在主目录下,而是分别位于 lm flm lattice下

     需要等待一段时间,如果出现多是 IDENTICAL,就证明 SRILM 编译成功了!

  如有其它问题,请反馈给我,希望能帮大家解决一些问题