0

我有一个问题,除了听起来微不足道之外,(对我来说)要找到一个直接的、可扩展的和高性能的解决方案并不简单。我有一个输入文本,网站用户可以在其中搜索位置。

今天位置可以是城市、城市中的地址或城市中的街区,用户必须使用逗号将地址或街区与城市分开,然后我很容易拆分字符串并查找是否第一个块是地址、社区或城市。如果用户未能在输入中填写所有需要的信息,输入一个没有城市的地址,并且我匹配多个具有相同名称的街道,我们将显示所有位置供他选择正确的位置。

使用搜索日志,我们发现大多数用户不使用逗号,即使所有工具提示都指出如何使用位置搜索(谢谢 google :p)。

因此,需要对位置搜索提出新要求,以接受非逗号分隔的地址,例如:

1. "5th Avenue"
2. "Manhattan"
3. "New York"
4. "5th Avenue Manhattan"
5. "5th Avenue Manhattan New York"
6. "Manhattan New York"
7. "5th Avenue New York"

但我找不到找到每个块的含义的方法或动态的方法来完成这项工作。即,如果我得到一个像“New Yok”这样的字符串,“new”可以是一个地址,“york”可以是一个城市。

我的问题是,是否有某种技术或框架来实现我所需要的,或者我需要在算法中以我的方式工作(基于字数、逗号等)来具体做到这一点?

编辑1:

因为我使用 SQL Server,所以我正在考虑全文搜索多列搜索,之前进行完全匹配,之后进行非完全匹配。但我认为一些不完整的地址会返回数千行。

4

1 回答 1

1

关键不是特异性从左到右递减吗?也就是说,最右边的语义元素(无论是“纽约”还是“曼哈顿”)总是最不具体的(如果它是自治市镇,那么我们不必担心城市,如果它是街道,我们不必担心不必担心自治市镇等)

因此,反转标记并递归,寻找一个完整的命中(“Manhattan”)或一个关键字(“Avenue”、“Street”、“New”)来指示语义元素的开始或结束。因此,通过后,您可能会:

"5th Avenue" -> TOKEN STREET_END_TOKEN
"Manhattan" -> BOROUGH
"New York" -> COMPOUND_BEGIN_TOKEN TOKEN
"5th Avenue Manhattan" -> TOKEN STREET_END_TOKEN BOROUGH
"5th Avenue Manhattan New York" -> TOKEN STREET_END_TOKEN BOROUGH COMPOUND_BEGIN_TOKEN TOKEN
"Manhattan New York" -> BOROUGH COMPOUND_BEGIN_TOKEN TOKEN
"5th Avenue New York" -> TOKEN STREET_END_TOKEN COMPOUND_BEGIN_TOKEN TOKEN

这应该给你足够的模式匹配。

更新:

好的,扩展一般策略:

Step 1 : Generate a pattern of the query structure by identifying keywords ("Manhattan"), and semantically-meaningful ("Street", "Avenue") or grammatically-significant ("New", "Saint") tokens. 
Step 2: Match the generated pattern against a set of templates -- "* BOROUGH *" -> (Street) (BOROUGH) (City)", "* STREET_END_TOKEN" -> (Street name) (Street type), etc.  
Step 3: The result of Step 2 ought to give you a sense of what kind of query you're dealing with. You'll have to apply domain rules at that point (if you know the complete query is TOKEN STREET_END_TOKEN then you know "Well, this is a query that just specifies a street" and you have to apply whatever rule is appropriate (grab the locale of their browser? Use their query history to guess which neighborhood and city? etc.) 
于 2012-06-01T18:40:18.210 回答