构建一个lemmatizer:速度优化

roo*_*oot 5 python optimization nlp lemmatization

我在python中构建一个lemmatizer.由于我需要它实时运行/处理相当大量的数据,处理速度至关重要.数据:我有所有可能的后缀链接到可以组合的所有单词类型.另外,我有一些与其wordtype(s)和lemma(s)相关联的词形.该程序将一个词作为输入并输出其引理.word = lemmafrom + suffix

例如(注意:虽然这个例子是用英语给出的,但我没有为英语构建一个lemmatizer):

字:禁止

引理:禁止

后缀:ing

引理:禁止

我的解决方案

我已将数据转换为(嵌套)dicts:

suffixdict : {suffix1:[type1,type2, ... , type(n)], suffix2:[type1,type2, ... ,
type(n)]}    
lemmaformdict : {lemmaform:{type1:lemma}}
Run Code Online (Sandbox Code Playgroud)

1)找到它们链接到的所有可能的后缀和单词类型.如果最长的后缀长度为3个字符,程序会尝试将"ing","ng","n"与suffixdict中的键匹配.如果键存在,则返回一个值(一组单词类型).

2)对于每个匹配的后缀,搜索dict中的引理.如果存在lemmaform,则返回wordtype.

3)最后,程序尝试将步骤1)和2)中产生的单词类型相交,如果交集成功,则返回单词的引理.

我的问题:从速度的角度来看,我的问题能有更好的解决方案吗?(无视在字典中保留频繁的单词和词条的选项)帮助很多.

jen*_*ena 6

这对于有限状态传感器来说是一个很好的应用.为什么?因为它们允许您有效地进行字符串重写(与输入的大小成线性关系).考虑以下s [ia]简单传感器:

在此输入图像描述

它接受一个字符串作为输入,并在给定输入字符序列的情况下检查是否存在从初始状态(此处为0)到最终状态(分别为10,12和17)的路径.如果它达到最终状态,它会产生适当的输出,例如(禁止输入),如果输入是"禁止".

不过,我不知道你是否有任何关于有限状态自动机的背景知识.如果没有,试一试 - 值得付出努力.:) 尝试是一种特殊的有限状态自动机(上面的样本传感器是一个特里),所以它们可能是一个好的开始.