本文小编为大家详细介绍“Python怎么利用re模块实现简易分词”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python怎么利用re模块实现简易分词”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。分词(tokenization)任务是Python字符串处理中最为常见任务了。我们这里讲解用正则表达式构建简单的表达式分词器(tokenizer),它能够将表达式字符串从左到右解析为标记免费云主机域名(tokens)流。给定如下的表达式字符串:我们想要将其转换为下列以序列对呈现的分词结果:要完成这样的分词操作,我们首先需要定义出所有可能的标记模式(所谓模式(pattern),为用来描述或者匹配/系列匹配某个句法规则的字符串,这里我们用正则表达式来做为模式),注意此处要包括空格whitespace,否则字符串中出现任何模式中没有的字符后,扫描就会停止。因为我们还需要给标记以NAME、EQ等名称,我们采用正则表达式中的命名捕获组来实现。接下来我们用模式对象中的scanner()
方法来完成分词操作,该方法创建一个扫描对象:然后可以用match()
方法获取单次匹配结果,一次匹配一个模式:当然这样一次一次调用过于麻烦,我们可以使用迭代器来批量调用,并将单次迭代结果以具名元组形式存储最终显示表达式串"foo = 12 + 5 * 6"
的tokens流为:接下来我们想要过滤掉空格标记,使用生成器表达式即可:可以看到空格被成功过滤:tokens在正则表达式(即"|".join([NAME, EQ, NUM, PLUS, TIMES, WS])
)中顺序也非常重要。因为在进行匹配时,re
模块就会按照指定的顺序对模式做匹配。故若碰巧某个模式是另一个较长模式的子串时,必须保证较长的模式在前面优先匹配。如下面分别展示正确的和错误的匹配方法:第二种顺序的错误之处在于,这样会把'文本匹配为LT(
我们对于“有可能”形成子串的模式也要小心,比如下面这样:可以看到被')紧跟着EQ(
'='
),而没有匹配为单独的LE()。
print
实际上成了另一个模式的子串,导致另一个模式的匹配出现了问题:更高级的语法分词,建议采用像PyParsing或PLY这样的包。特别地,对于英文自然语言文章的分词,一般被集成到各类NLP的包中(一般分为按空格拆分、处理前后缀、去掉停用词三步骤)。对于中文自然语言处理分词也有丰富的工具(比如jieba
分词工具包)。读到这里,这篇“Python怎么利用re模块实现简易分词”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
相关推荐: vue项目中使用axios遇到的相对路径和绝对路径问题怎么解决
这篇文章主要讲解了“vue项目中使用axios遇到的相对路径和绝对路径问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue项目中使用axios遇到的相对路径和绝对路径问题怎么解决”吧!部分依赖说明:…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。