我正在用python构建lemmatizer。因为我需要它实时运行/处理大量数据,所以处理速度
是至关重要的。
数据:我有所有可能的后缀,这些后缀链接到可以组合的所有单词类型。另外,我有与它们的单词类型和引理相关联的引理形式。该程序将一个单词作为输入并输出其引理。
单词= lemmafrom +后缀
例如(注意:尽管该示例是用英语给出的,但我没有为英语构建lemmatizer):
词:禁止
lemmaform:禁止
后缀:ing
引理:禁止
我的解决方案:
我已经将数据转换为(嵌套的)字典:
suffixdict : {suffix1:[type1,type2, ... , type(n)], suffix2:[type1,type2, ... ,
type(n)]}
lemmaformdict : {lemmaform:{type1:lemma}}
1)查找所有可能的后缀和单词类型。
如果最长的后缀是3个字符,则程序尝试将“ing”,“ng”,“n”与
后缀。如果键存在,它将返回一个值(一组单词类型)。
2)对于每个匹配的后缀,从dict中搜索词形。
如果存在lemmaform,则返回单词类型。
3)最后,程序尝试将步骤1)和2)中产生的单词类型相交,如果相交为
成功返回单词的引理。
我的问题:从速度的角度来看,是否可以更好地解决我的问题? (忽略在词典中保留常用词和词条的选项)
帮了大忙。
最佳答案
对于有限状态传感器来说,这将是一个绝佳的应用。为什么?因为它们使您可以高效地进行字符串重写(时间与输入大小成线性关系)。考虑以下示例传感器:
它以字符串作为输入,并检查在给定输入字符序列的情况下是否存在从初始状态(此处为0)到最终状态(分别为10、12和17)的路径。如果达到最终状态,则会产生适当的输出,例如(禁止,ing),如果输入被“禁止”。
不过,我不知道您是否对有限状态自动机有任何背景。如果没有,请给他们尝试-值得付出努力。 :) Tries是一种特殊的有限状态自动机(上面的示例传感器是trie),因此它们可能是一个很好的开始。
关于python - 构建lemmatizer : speed optimization,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9843424/