如何在Java中将字符串“Weeelcommme TTTTTO Unnnnicommerce”转换为“Welcome to Unicommerce”?

如何在Java中将字符串“Weeelcommme TTTTTO Unnnnicommerce”转换为“Welcome to Unicommerce”?,java,regex,dictionary,Java,Regex,Dictionary,输入 期望输出 这与从字符串中删除重复项不同,因为我们还需要e和m。使用HashSet删除重复项只会给我们提供唯一的元素。有很多方法可以自动完成,所有这些都需要某种字典。一个简单的算法是三叉图频率分析。我将在下面描述一个例子 词典 以字典为例 1. hello 2. he 3. my 4. name 输入 现在考虑输入Hyel-MMy NAMME。 建立三叉树 我们需要建立字典中每个元素的三角图 1. hello = hel ell llo 2. he = he 3. my = my 4. n

输入

期望输出


这与从字符串中删除重复项不同,因为我们还需要e和m。使用HashSet删除重复项只会给我们提供唯一的元素。

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

词典 以字典为例

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

现在考虑输入Hyel-MMy NAMME。 建立三叉树 我们需要建立字典中每个元素的三角图

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相似性

旁注 所有的三角形在比较之前都被散列成唯一的整数,进一步的三角形应该被认为是整数

比较 考虑函数zv1,v2=c,其中z计算v1和v2的余弦相似性。然后v1=hee,eel,ell,llo和v2=hel,ell,llo,0。现在,余弦相似性将告诉我们这些向量有多相似。对字典中的所有元素执行此操作,并选择余弦相似度最接近1的单词将是最匹配的单词。我不会计算,因为它很长,但你可以找到相似性的公式

其他注释
这种三元频率的方法在语言处理中非常常用,用于确定给定文本所使用的语言,并应用于早期的语音到文本应用程序。我希望你能从上面看到三叉图是如何帮助你找到答案的。我认为你会遇到的唯一问题是找到一本字典,因为Unicommerce不是英语字典中的一个单词。

你可以将折叠单词的字典哈希保存到完整的对应单词,并使用简单的算法从候选单词中删除重复字母

1. hello = hel ell llo
2. he = he
3. my = my
4. name = nam ame
a:[a]
aple:[apple]
ardvark:[aardvark]
to:[to/too]
unicomerce:[Unicommerce]
welcome:[welcome]
执行转换时,首先将句子拆分为单词,然后通过删除重复字母创建查找引用,然后检索每个已消除重复的单词的扩展单词


因此,Weeelcommme TTTTTO Unnnicommerce首先成为[welcome,to,Unicommerce],每个成员都从您的字典中扩展,以构建欢迎使用Unicommerce或可能欢迎使用Unicommerce。您将有一个不完美的解决方案,可以使用语法检查器帮助消除单词歧义,最终可能会出现字典中找不到的单词,但这至少是一个可行的起点。

在这种情况下,您需要有一本字典,您无法知道单词的有效性。要实现此行为,你需要懂英语。你需要使用字典,而且你基本上是在写一个自动更正函数。对单词进行三元频率分析,再加上字典,你会得到一个概率答案,这是你无法保证的最好答案。你需要一本相当大的词典,因为你的匹配词似乎不止英语单词,而仅仅知道英语是不够的。Unicommerce不是一个英语单词。这其实是一个难题。我会问。。。你为什么要这么做?常规的拼写检查和向用户建议更正的方法不是更好的主意吗?你需要一些字典,仅仅一个纯正则表达式是不够的。下面我的答案被否决了,现在被删除了。
a:[a]
aple:[apple]
ardvark:[aardvark]
to:[to/too]
unicomerce:[Unicommerce]
welcome:[welcome]