java - 如何在 Java 中将字符串“Weeelcommme tttto Unnnnnicommmerce”转换为“Welcome to Unicommerce”?
问题描述
输入
Input string = "Weeelcommme tttto Unnnnnicommmerce";
期望的输出
Welcome to Unicommerce
这与从 String 中删除重复项不同,因为我们也想要“ e ”和“ m ”。使用删除重复项HashSet
只为我们提供独特的元素。
解决方案
有很多方法可以自动完成,所有这些都需要某种字典。一个简单的算法是三元组频率分析。我将在下面描述一个例子。
字典
考虑字典
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) = c
z 计算 v1 和 v2 的余弦相似度的函数。然后v1 = (hee, eel, ell, llo)
和v2 = (hel, ell,llo, 0)
。现在余弦相似度将说明这些向量有多“相似”。对字典中的所有元素执行此操作并选择余弦相似度最接近 1 的单词将是最佳匹配的单词。我不会做算术,因为它很长,但在这里你可以找到相似度的公式。
其他注意事项
这种三元组频率的方法在语言处理中非常有用,以确定给定文本的语言,并应用于早期的语音到文本应用程序。我希望你从上面看到三元组是如何帮助你找到答案的。我认为您会遇到的唯一问题是查找字典,因为“Unicommerce”不是英文字典中的单词。
推荐阅读
- c# - 扩展的 datetimepicker 引发错误 DateRange,因为 DateTime 设备不在范围内
- python - 我正在尝试创建一个显示白胜和黑胜的 BarPlot,我做错了什么?
- android-studio - Android Studio 编辑器显示未找到导航操作
- python - 如何在 PyCharm 2021.1.1 中编辑项目结构中的第一列?
- python-3.x - 在 cpanel 上找不到满足 pywin32 要求的版本
- java - java项目目录中的MySQL
- jenkins - Jenkins 配置文件提供程序未获取文件
- matlab - Matlab 中的 DICOM 文件分割。将 4d 导出为 3d?
- html - Bootstrap 4 视频,iframe 标签未显示
- python - 试图让机器人说出错误处理程序缺少什么参数