首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查与英文字母混在一起的汉字?

如何检查与英文字母混在一起的汉字?
EN

Stack Overflow用户
提问于 2016-12-06 03:02:56
回答 1查看 134关注 0票数 1

我的数据库中有一张用英文字母和数字以及汉字写成的产品名称清单。

有一个名为products的表,其中包含name_enname_zh等字段。

例如。

代码语言:javascript
复制
AB 10"机翼

彼得诺维格有一个奇妙的拼写检查算法,但它只适用于英语。

我想知道是否有办法对一个包含汉字的狭窄的词汇列表做一些类似的事情?

例如,漏掉的,如

代码语言:javascript
复制
A10机翼
AB 10鸡翼
AB 10鸡一
AB 10木几翼

所有将提示AB 10"机翼作为正确的拼写。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-13 07:54:47

你的问题比诺维格的要复杂得多:

中文输入法

在您的情况下(至少在您的示例中),拼写错误主要是由拼音输入方法造成的。同一类型的"jiyi“(英语:飞机翅膀)可以导致不同的汉语短语:

代码语言:javascript
复制
 机翼
 鸡翼
 鸡一
 几翼

汉语切分

在汉语中,要将一个长句子分解成具有语义意义的小标记,则需要执行分割。例如:

代码语言:javascript
复制
飞机模型零件 ->  Before segmentation
飞机-模型-零件   After segmentation you got three phrases separated by '-'.

在令牌级别上工作

你也许可以从拼写错误的列表开始试验。我想你可以从你的用户日志中收集一堆。用你的例子,一次找出一个拼写错误:

代码语言:javascript
复制
AB 10鸡翼

首先,将其分解为令牌:

代码语言:javascript
复制
A-B-10-鸡翼

(在这里,您可能需要一个中文分割算法来实现鸡翼应该一起处理)。

然后,您应该尝试使用编辑距离的想法在产品db中找到其最近的邻居。请注意:

  • 您不每次删除/编辑/替换一个字符,而是每次删除/编辑/替换一个令牌。
  • 在编辑/替换时,我们应该将候选对象限制为原始令牌的近邻。例如,->鸡翼机翼,几翼,机一

建立Lucene指数

您也可以尝试以不同的方式解决这个问题,从正确的产品名称开始。将每个产品名称视为文档,并从中预构建卢塞尼索引。然后,对于每个用户查询,查询匹配问题被转换为一个搜索问题,在该问题中,我们向搜索引擎发出一个查询,以查找我们数据库中最匹配的文档。在这种情况下,我相信Lucene可能会为您处理分段(如果不是,您需要扩展它的功能以满足您自己的需要)和令牌化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40987125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档