gpt4 book ai didi

python - 正则表达式匹配 'lol' 到 'lolllll' 和 'omg' 到 'omggg' 等

转载 作者:太空狗 更新时间:2023-10-30 01:56:00 25 4
gpt4 key购买 nike

嘿,我喜欢正则表达式,但我根本不擅长它们。

我有大约 400 个缩写词的列表,例如 lol、omg、lmao 等。每当有人键入这些缩短的单词之一时,它就会被替换为对应的英语单词([笑声],或类似的东西)。无论如何,人们很烦人并键入这些最后一个字母重复 x 次的速记词。

例子:我的天啊 -> omgggg,大声笑 -> lollll,哈哈 -> 哈哈哈哈,大声笑 -> lololol

我想知道是否有人可以将正则表达式(最好是 Python 语言)交给我来处理这个问题?

谢谢大家。

(如果有人好奇,这是一个与 Twitter 相关的主题识别项目。如果有人发推文“让我们去打篮球”,你怎么知道推文是关于篮球等的)

最佳答案

第一种方法 -

好吧,使用正则表达式你可以这样做 -

import re
re.sub('g+', 'g', 'omgggg')
re.sub('l+', 'l', 'lollll')

等等

让我指出,使用正则表达式是处理此问题的一种非常脆弱且基本的方法。您可以很容易地从用户那里获取字符串,这些字符串会破坏上述正则表达式。我想说的是,这种方法需要大量维护,以观察用户犯错的模式,然后为他们创建特定于案例的正则表达式。

第二种方法 -

您是否考虑过使用 difflib 模块?它是一个带有帮助程序的模块,用于计算对象之间的增量。此处对您特别重要的是 SequenceMatcher。转述自 official documentation -

SequenceMatcher is a flexible class for comparing pairs of sequences of any type, so long as the sequence elements are hashable. SequenceMatcher tries to compute a "human-friendly diff" between two sequences. The fundamental notion is the longest contiguous & junk-free matching subsequence.

import difflib as dl
x = dl.SequenceMatcher(lambda x : x == ' ', "omg", "omgggg")
y = dl.SequenceMatcher(lambda x : x == ' ', "omgggg","omg")
avg = (x.ratio()+y.ratio())/2.0
if avg>= 0.6:
print 'Match!'
else:
print 'Sorry!'

根据文档,任何超过 0.6 的 ratio() 都是接近匹配。您可能需要探索调整数据需求的比率。如果您需要更严格的匹配,我发现任何超过 0.8 的值都适用。

关于python - 正则表达式匹配 'lol' 到 'lolllll' 和 'omg' 到 'omggg' 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com