我有一个包含波斯语和阿拉伯语人士注释的数据集。一些注释包含诸如عاااالی的单词,这不是一个真实单词,而正确的单词实际上是عالی。就像使用woooooooow!代替WoW!

我的意图是找到这些单词并删除所有多余的字母。我发现的唯一参考是下面的代码,该代码删除了重复字母的单词:

import re
p = re.compile(r'\s*\b(?=[a-z\d]*([a-z\d])\1{3}|\d+\b)[a-z\d]+', re.IGNORECASE)
s = "df\nAll aaaaaab the best 8965\nUS issssss is 123 good \nqqqq qwerty 1 poiks\nlkjh ggggqwe 1234 aqwe iphone5224s"
strs = s.split("\n")
print([p.sub("", x).strip() for x in strs])


我只需要用已删除多余重复字母的单词替换该单词即可。您可以将此语句用作测试用例:

سلاااااام چطووووورین؟ من خیلی گشتم ولی مثل این کیفیت اصلاااااا ندیدممممم.


它必须是这样的:

سلام چطورین؟ من خیلی گشتم ولی مثل این کیفیت اصلا ندیدم


请考虑超过3个重复是不可接受的。

最佳答案

您可以使用

re.sub(r'([^\W\d_])\1{2,}', r'\1', s)


它将用单个出现替换相同连续字母的块。

请参见regex demo

细节


([^\W\d_])-捕获组1:任何Unicode字母
\1{2,}-在组1中捕获的同一字母的两个或多个重复。


r'\1'替换将只在结果中保留一个字母。

关于python - 如何使用正则表达式搜索unicode文本并查找包含重复字母的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59096947/

10-09 23:48
查看更多