2012-12-26 59 views
4

我想在Java中实现一个算法来查找最近似的字符串。在Java中实现的最佳字符串匹配算法?

我有station_names的MySQL数据库等 - 23 ST,233 ST,21 ST,14圣时代广场,24 ST

,并且如果用户输入等23日站搜索字符串然后我应该返回23 ST和233 ST或者如果用户输入像时代广场那么结果应该是14时代广场

我在互联网上发现了很多算法,但我很困惑要使用哪一种算法。

您能否给我推荐我可以用Java实现的最佳算法?

在此先感谢

+1

*“你能给我推荐最好的算法吗?”*我通常会选择带圆点的那种,因为它更漂亮。当然,你对“更好”的定义可能不包括视觉效果,那么为什么不告诉我们你的意思是更好? –

+0

感谢Andrew对你的回复,最好的算法意味着会产生用户想要搜索的最类似的字符串,例如,对于23 ST用户可以给搜索字符串,如23rd Station/23 Station/23rd St ect – Deepu

+0

http://en.wikipedia.org/wiki/String_searching_algorithm讨论一些流行的算法,但你需要在Java中实现它们 – AurA

回答

1

有很多方法可以做到这一点。例如,您可能会说21 ST233 ST更接近23rd station。你必须弄清楚你想要什么,找到最适合的方法。

很可能您可能需要多种方法然后对结果进行评分。这是我会做的。

您可以通过提供大型样本数据测试套件并找出哪种方法(或组合)能够提供最高的成功率来测试不同的方法。

+0

感谢Peter的回答,我想返回用户想要搜索的最类似的字符串,例如** 23 ST **(实际电台名称)用户可以输入搜索字符串 - ** 23rd Station/23 Station/23rd St ** – Deepu

+0

您可以定义“最相似”吗?虽然这是大多数人的想法,但对于计算机,您需要正式定义它。 –

2

要回答你的问题,通常没有最好的算法,只有在你的特定情况下效果最好的算法。

您将需要定义一个或多个度量标准来测量输入和DB中的字符串之间的差异,然后按照得分对结果进行排序(请参阅String metric)。

问题是最相似的字符串并不总是最接近的地址。这就是为什么我说你必须定义你自己的指标。

+0

谢谢桑迪,我会试试这个。 – Deepu