首页 > 解决方案 > 如何在 Java 中将字符串“Weeelcommme tttto Unnnnnicommmerce”转换为“Welcome to Unicommerce”?

问题描述

输入

Input string = "Weeelcommme tttto Unnnnnicommmerce";

期望的输出

Welcome to Unicommerce

这与从 String 中删除重复项不同,因为我们也想要“ e ”和“ m ”。使用删除重复项HashSet只为我们提供独特的元素。

标签: javaregexdictionary

解决方案


有很多方法可以自动完成,所有这些都需要某种字典。一个简单的算法是三元组频率分析。我将在下面描述一个例子。

字典

考虑字典

1. hello
2. he
3. my
4. name

输入

现在考虑输入heello mmy nnamme

构建三元组

我们需要构建字典中每个元素的三元组。

1. hello = hel ell llo
2. he = he
3. my = my
4. name = nam ame

然后我们拆分每个单词并构建它的三元组

1. heello = hee eel ell llo
2. mmy = mmy
3. nnamme = nna nam amm mme

我们构建一个向量并计算两者之间的 cos 相似度。

边注

在比较之前,所有三元组都被散列成唯一的整数,进一步的三元组应该被认为是整数。

比较

考虑z(v1, v2) = cz 计算 v1 和 v2 的余弦相似度的函数。然后v1 = (hee, eel, ell, llo)v2 = (hel, ell,llo, 0)。现在余弦相似度将说明这些向量有多“相似”。对字典中的所有元素执行此操作并选择余弦相似度最接近 1 的单词将是最佳匹配的单词。我不会做算术,因为它很长,但在这里你可以找到相似度的公式。

其他注意事项

这种三元组频率的方法在语言处理中非常有用,以确定给定文本的语言,并应用于早期的语音到文本应用程序。我希望你从上面看到三元组是如何帮助你找到答案的。我认为您会遇到的唯一问题是查找字典,因为“Unicommerce”不是英文字典中的单词。


推荐阅读