Python 如何构建一个简单的标记器

Python 如何构建一个简单的标记器,python,substring,tokenize,Python,Substring,Tokenize,我想知道如何构建一个非常简单的标记器。给定一个字典d,在本例中是一个列表和一个句子s,我想返回所有可能的标记=该句子的单词。以下是我尝试过的: l = ["the","snow","ball","snowball","is","cold"] sentence = "thesnowballisverycold" def subs(string, ret=['

我想知道如何构建一个非常简单的标记器。给定一个字典d,在本例中是一个列表和一个句子s,我想返回所有可能的标记=该句子的单词。以下是我尝试过的:

l = ["the","snow","ball","snowball","is","cold"]
sentence = "thesnowballisverycold"

def subs(string, ret=['']):
    if len(string) == 0:
        return ret
    head, tail = string[0], string[1:]
    ret = ret + list(map(lambda x: x+head, ret))
    return subs(tail, ret)
    
print((list(set(subs(sentence))&set(l))))
但这也带来了:

["snow","ball","cold","is","snowball","the"]
我可以比较子字符串,但一定有更好的方法,对吗? 我想要的是:

["the","snowball","is","cold"]

您可以在此处使用正则表达式:

进口稀土 l=[雪,球,雪球,是,冷] 模式=|.joinsortedl,键=len,反向=True 句子=现在的球很冷 打印关于findallpattern的句子 =>['the','snowball','is','cold'] 看


图案将看起来像雪球|雪|球|冷|的|是,请参见。诀窍是确保所有备选方案都从最长到最短列出。看见sortedl,key=len,reverse=True部分按长度降序对l中的项目进行排序,并|连接。。。创建交替模式。

您可以在此处使用正则表达式:

进口稀土 l=[雪,球,雪球,是,冷] 模式=|.joinsortedl,键=len,反向=True 句子=现在的球很冷 打印关于findallpattern的句子 =>['the','snowball','is','cold'] 看


图案将看起来像雪球|雪|球|冷|的|是,请参见。诀窍是确保所有备选方案都从最长到最短列出。看见sortedl,key=len,reverse=True部分按长度降序对l中的项目进行排序,并|连接。。。创建交替模式。

为什么需要排序?@SayandipDutta否则,具有相同前缀的较短标记将被匹配,就像snow而不是snowball。哦,是的。对+1你为什么需要排序?@SayandipDutta否则,前缀相同的较短代币将被匹配,就像雪花而不是雪球。哦,是的。对+1.