我有一个包含波斯语和阿拉伯语人士注释的数据集。一些注释包含诸如عاااالی
的词,这不是一个真正的词,而正确的词实际上是عالی
。就像使用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'
替换将只在结果中保留一个字母。