【发布时间】:2017-04-25 08:23:03
【问题描述】:
我正在研究 Twitter 数据规范化。 Twitter 用户经常使用诸如 ts I looooooove it 之类的术语来强调爱这个词。我想通过替换重复字符直到我得到一个适当的有意义的单词,将这些重复的字符变成一个适当的英文单词(我知道我无法通过这种机制区分好和上帝)。
我的策略是
-
识别此类重复字符串的存在。我会寻找超过 2 个相同的字符,因为可能没有超过两个重复字符的英语单词。
String[] strings = { "stoooooopppppppppppppppppp","looooooove", "good","OK", "boolean", "mee", "claaap" }; String regex = "([a-z])\\1{2,}"; Pattern pattern = Pattern.compile(regex); for (String string : strings) { Matcher matcher = pattern.matcher(string); if (matcher.find()) { System.out.println(string+" TRUE "); } } 在 Wordnet 等词典中搜索此类单词
- 替换除两个这样的重复字符之外的所有字符并签入 Lexicon
- 如果词典中没有,则再删除一个重复字符(否则将其视为拼写错误)。
由于我的 Java 知识贫乏,我无法管理 3 和 4。问题是除了两个重复的连续字符外,我无法替换所有字符。
以下代码 sn -p 替换除一个重复字符以外的所有字符System.out.println(data.replaceAll("([a-zA-Z])\\1{2,}", "$1"));
需要帮助才能找到 A. 如何替换除 2 个连续重复字符之外的所有字符 B. 如何从 A 的输出中再删除一个连续字符 [我觉得B可以通过下面的代码sn-p来管理]
System.out.println(data.replaceAll("([a-zA-Z])\\1{1,}", "$1"));
编辑:Wiktor Stribiżew 提供的解决方案在 Java 中完美运行。我想知道在 python 中获得相同结果需要进行哪些更改。 Python 使用 re.sub。
【问题讨论】:
-
.replaceAll(regex, "$1$1")不适合你吗?那么,.replaceAll(regex, "$1")将只保留 1 个。 -
太棒了!有用。 .replaceAll(regex, "$1$1") 保留除 2 个连续字符外的所有字符。请解释一下 $1$1 的工作原理。