本文档适用于libstemmer分布的C版本,可从以下网址下载:
http://snowball.tartarus.org/dist/libstemmer_c.tgz
Unix风格系统提供了简单的Makefile。在这样的系统上,只需运行“make”,就会生成文件“libstemmer.o”和示例程序“stemwords”。
如果此命令在您的系统上不起作用,则需要编写自己的构建系统(或直接调用编译器)。要编译的文件都包含在“libstemmer”、“runtime”和“src_c”目录中,公共头文件包含在“include”目录中。
库有两种版本;仅UTF-8和其他字符集。要使用仅UTF-8的版本,请编译“libstemmer_utf8.c”而不是“libstemmer.c”。
为了方便,“mkinc.mak”是一个Makefile片段,列出了编译标准版本库使用的源文件和头文件。“mkinc_utf8.mak”是一个类似的Makefile片段,只列出了仅UTF-8版本库的源文件。
库提供了一个简单的C API。基本上,可以通过使用“sb_stemmer_new”来获得一个新的词干提取器。“sb_stemmer_stem”随后用于提取词干, “sb_stemmer_length”返回处理过的最后一个词的词干长度,而“sb_stemmer_delete”用于删除词干提取器。
创建词干提取器是一个相对昂贵的操作 - 预期的使用模式是在需要时创建新的词干提取器,用于提取许多单词,然后在一段时间后删除。
词干提取器是可重入的,但不是线程安全的。换句话说,如果要从多个线程中访问相同的词干提取器对象,则必须确保所有访问都受互斥锁或类似设备的保护。
libstemmer目前没有包含任何缓存词干操作结果的功能。在特定情况下,这种缓存可以大大提高词干提取器的性能,因此将考虑包含适当的补丁。
标准的libstemmer源代码包含每个支持语言的算法。可以通过使用语言的国际名称或使用2或3个字母的ISO 639语言代码来选择算法。此外,还包含传统的“Porter”英语词干算法,以实现向后兼容,但我们推荐为新项目使用“English”词干提取器。
(仅在snowball网站中作为奇闻轶事而包含的一些次要算法,例如Lovins词干提取器和Kraaij Pohlmann词干提取器,不包括在标准的libstemmer源代码中。这些并非真正由snowball项目支持,但如果需要,可以编译包含这些算法的修改版libstemmer库。)
stemwords示例程序允许您在样本词汇上运行libstemmer库中编译的任何词干提取器。有关如何使用的详细信息,请使用"-h"命令行选项运行它。
如果您将库集成到大型程序的构建系统中,建议将未修改的tarball复制到您程序源代码的一个子目录中。库的将来版本预计将保持相同的结构,这样将为迁移到库的新版本减少所需的工作量。
作为额外的方便措施,库中使用的源文件和头文件列表在mkinc.mak文件中有详细说明,这是一个适合在Makefile中包含的格式。通过将此文件包含在您的构建系统中,您可以使用一些额外的规则将snowball系统链接到您的程序。
库libstemmer_c可以按以下方式集成到使用GNU autotool框架(特别是automake和autoconf)的更大系统中
1)在顶级项目目录中解压libstemmer_c.tgz,以便在项目的顶级目录中有libstemmer_c子目录。
2)向解压后的libstemmer_c文件夹中添加一个名为"Makefile.am"的文件,包含以下内容:
noinst_LTLIBRARIES = libstemmer.la include $(srcdir)/mkinc.mak noinst_HEADERS = $(snowball_headers) libstemmer_la_SOURCES = $(snowball_sources)
(您可能还需要添加其他行,例如如果您正在使用与编译libstemmer库不兼容的编译器选项。)
3)将libstemmer_c添加到项目配置文件configure.ac中的AC_CONFIG_FILES声明中。
4)在顶级makefile中添加以下行(或适当修改这些变量的现有赋值):
AUTOMAKE_OPTIONS = subdir-objects AM_CPPFLAGS = -I$(top_srcdir)/libstemmer_c/include SUBDIRS=libstemmer_c _LIBADD = libstemmer_c/libstemmer.la
(其中是链接到libstemmer的库或可执行文件名。)