我有一个包含波斯语和阿拉伯语人士注释的数据集。一些注释包含诸如عاااالی
的单词,这不是一个真实单词,而正确的单词实际上是عالی
。就像使用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/