2

I'm trying to build a search engine that allows my users to search with natural language commands, just like Google Now. Except, my search engine is slightly more constrained, in that it is mainly going to be used within an e-commerce site, and allow the users to search for certain devices.

Some of the features I want to provide are:

1) Allow users to search by brand 2) By model 3) by price range 4) By 3g/4g capability 5) By Operating System

etc. etc.

I built a mock version using which looks for certain keywords, like "price", "cost", "iphone 5", etc.

Is building my own dictionary/array of keywords the best way to accomplish this?

Or are there existing dictionaries/APIs to help parse my User's search query and return the appropriate information.

4

2 回答 2

3

请参见以下示例:

“给我找一部 4 GB 内存和至少 16 GB 存储空间的安卓手机。”

首先,您需要一个可以直接从输入中提取并插入到搜索查询中的单词列表。这是最简单的部分。

“给我找一部4 GB 内存和至少 16 GB 存储空间的安卓手机。”

接下来,输入中会有数字。

“给我找一部4 GB 内存和至少16 GB 存储空间的安卓手机。”

您现在已经提取了“android”和“phone”这两个词。现在您必须提取数字 - 以及它们之前和之后的 2 或 3 个单词。

“给我找一部4 GB 内存和至少 16 GB 存储空间的安卓手机。”

您的下一步是弄清楚这些数字的含义。为此,您需要一个如下表:(让我们将此表称为“属性”)

在此处输入图像描述

将上表与您从输入中提取的数字周围的数字和单词进行比较:

4---phone,with, gb , ram 6---at,least, gb,storage

通过使用合适的算法和属性表,您可以轻松找出数字的含义。只需将每个数字与每个属性进行比较 - 首先检查数字编号是否在属性范围内,然后检查数字周围的单词是否在输入中与属性的标签匹配。现在您知道每个数字的含义(4=ram,6=storage),您必须检查输入中的不等式。

检查不等式:

如果有任何短语,例如“至少”、“不超过”、“最多”等,那么你就有了不等式。在我们的例子中,你可以在数字 4 附近找到这样的词,但你可以在数字 6 附近找到术语“至少”。这意味着用户想要一部具有正好 4 GB 内存的手机(使用 ==),但是内部存储空间可能大于或等于 6 GB(使用 >=)。

另请注意,如果您无法将数字与房产相关联,则该数字很可能就是价格。

您可以添加更多功能......比如让用户按属性的递增/递减顺序对结果进行排序。例如:

“给我找一部 4 GB 内存和至少 16 GB 存储空间的安卓手机。先展示便宜的”

于 2015-05-28T21:26:37.087 回答
1

http://www.nltk.org/

我想你会想要这样的东西。

于 2015-05-28T19:34:49.087 回答