我的数据库中有一张用英文字母和数字以及汉字写成的产品名称清单。
有一个名为products的表,其中包含name_en、name_zh等字段。
例如。
AB 10"机翼彼得诺维格有一个奇妙的拼写检查算法,但它只适用于英语。
我想知道是否有办法对一个包含汉字的狭窄的词汇列表做一些类似的事情?
例如,漏掉的,如
A10机翼
AB 10鸡翼
AB 10鸡一
AB 10木几翼所有将提示AB 10"机翼作为正确的拼写。
我该怎么做?
发布于 2016-12-13 07:54:47
你的问题比诺维格的要复杂得多:
中文输入法
在您的情况下(至少在您的示例中),拼写错误主要是由拼音输入方法造成的。同一类型的"jiyi“(英语:飞机翅膀)可以导致不同的汉语短语:
机翼
鸡翼
鸡一
几翼汉语切分
在汉语中,要将一个长句子分解成具有语义意义的小标记,则需要执行分割。例如:
飞机模型零件 -> Before segmentation
飞机-模型-零件 After segmentation you got three phrases separated by '-'.在令牌级别上工作
你也许可以从拼写错误的列表开始试验。我想你可以从你的用户日志中收集一堆。用你的例子,一次找出一个拼写错误:
AB 10鸡翼首先,将其分解为令牌:
A-B-10-鸡翼(在这里,您可能需要一个中文分割算法来实现鸡翼应该一起处理)。
然后,您应该尝试使用编辑距离的想法在产品db中找到其最近的邻居。请注意:
建立Lucene指数
您也可以尝试以不同的方式解决这个问题,从正确的产品名称开始。将每个产品名称视为文档,并从中预构建卢塞尼索引。然后,对于每个用户查询,查询匹配问题被转换为一个搜索问题,在该问题中,我们向搜索引擎发出一个查询,以查找我们数据库中最匹配的文档。在这种情况下,我相信Lucene可能会为您处理分段(如果不是,您需要扩展它的功能以满足您自己的需要)和令牌化。
https://stackoverflow.com/questions/40987125
复制相似问题